Winlink on Linux with pat
Mar 16, 2023
One of the first things I looked into when I got my license was Winlink and immediately was put off by the fact that it appeared to be a Windows only system with "Win" even in the name. Also, there was controversy over the fact that it apparently used proprietary and encrypted formats over the air which is expressly forbidden in the Amateur Radio spectrum where all communications should be open for all to monitor. Arguments were made at the time that the formats were not encrypted but encoded. Encoded data that you cannot decode are effectively encrypted to a listener although one could certainly make the argument that CW (morse code) is encoded in the same manner. So, to summarize, I became less interested in winlink because it seemed to be "Windows only" and there was some controversy over its open-ness, and I didn't know anyone using it.
Fast forward to last night's net and I learned that at least one person in the club has been using it regularly to report to the Skywarn nets and the question was asked who might be interested in learning how to use it. I had to admit that I wasn't that interested, but one member KA2LAC replied that there was now a version that would work in Linux. I looked that up and found LA5NTA, Martin Pedersen's pat project on github.
On my ubuntu 22.04.2 LTS machine, I cloned (this means "copied all the files of") the project with:
git clone https://github.com/la5nta/pat.git
I saw that it was a go-lang project (go is a popular modern programming language) so I installed go-lang:
sudo apt install golang-go
I found I had to build one of the requirements for the project first with:
make.bash libax25
but then I could just run make.bash
and pat compiled without error and pretty quickly at that. Running my freshly built pat program on the command line gave me all the options available:
Pat is a client for the Winlink 2000 Network. Usage: ./pat [options] command [arguments] Commands: connect Connect to a remote station. interactive Run interactive mode. http Run http server for web UI. compose Compose a new message. read Read messages. composeform Post form-based report. position Post a position report (GPSd or manual entry). extract Extract attachments from a message file. rmslist Print/search in list of RMS nodes. updateforms Download the latest form templates from winlink.org. configure Open configuration file for editing. version Print the application version. env List environment variables. help Print detailed help for a given command. Options: --config string Path to config file. (default "/home/in8/.config/pat/config.json") --event-log string Path to event log file. (default "/home/in8/.local/state/pat/eventlog.json") --forms string Path to forms directory. (default "/home/in8/.local/share/pat/Standard_Forms") --ignore-busy Don't wait for clear channel before connecting to a node. -l, --listen string Comma-separated list of methods to listen on (e.g. ardop,telnet,ax25). --log string Path to log file. The file is truncated on each startup. (default "/home/in8/.local/state/pat/pat.log") --mbox string Path to mailbox directory. (default "/home/in8/.local/share/pat/mailbox") --mycall string Your callsign (winlink user). --radio-only Radio Only mode (Winlink Hybrid RMS only). -s, --send-only Download inbound messages later, send only.
Noticing the configure option I did that first which opens an editor so you can fill in some variables. I entered my call sign in the appropriate place, but wasn't sure how to proceed so I saved it and ran pat again. Then I noticed there was an http option so I ran that with:
pat http
which reported on the command line that it had started a web server on port 8080. Being familiar with stuff like this I knew to open a web browser and type:
http://localhost:8080which brought up a very clean and modern looking interface:
I wasn't sure how to proceed but I found under the Ready tab something that allowed me to select telnet as a mode of connection. I entered in the call sign of someone I knew was already using winlink and it built a connection string in the address field automatically.
After hitting connect, the UI displayed some activity in the black monitor portion at the bottom. It was clearly doing something which is great! Shortly afterward I noticed I had a new message under the Inbox tab which was an activation message with a password I could use! I've blurred that out here for reasons. I re-ran pat configure
and added that password into the right place in that file.
In the Action tab I chose to Compose a new message to KA2LAC and it appeared to send it fine.
This morning I received a reply!
Thus ends the first part of this experiment, the more interesting part will be attempting to send these communications over the air. Given I still only have VHF and UHF capability my range is pretty limited, but I look forward to messing with that as more folks in the club become interested in experimenting with Winlink. Thanks to KA2LAC for mentioning the pat project!