K3LTC.com Experimentation

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:8080
which 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!