HOW-TO Decode and Display APRS Packets from WebSDR Audio

Things you will need …

  • alsa-utils (for ALSA loopback device and arecord – probably already installed with your Linux distro – I used Ubuntu 14.04 LTS.)
  • JACK Audio Connection Kit (I’m not sure if this is even needed, but I installed it anyway as it helps you to hear things whilst using the loopback!)
  • multimon-ng (to decode AFSK packets.)
  • XASTIR (to display packets graphically.)

Audio capture and decoding …

Follow the tutorial at to install both alsa-utils and the JACK Audio Connection Kit.  (Yes you can also use fldigi to decode HF data modes from WebSDR with the same config!)

Download and install multimon-ng …

git clone
cd multimonNG
mkdir build
cd buildqmake ../
sudo make install

Next you need to go to and choose a suitable ‘radio’.  You are able to filter by band (2m!) and your region as appropriate, which makes this a lot easier when you are searching!

Set the frequency and mode as required – 144.800 MHz in Europe, 144.390 MHz in N America. FM in either case!  Set the volume (on the webpage) about mid-way (my system volume was at 100%) and tick the squelch option if white noise annoys you!  You may have to play about a bit to get the levels right when it comes to getting multimon-ng to decode things.

At this stage I had to go to my audio settings and select the loopback device for playback.  Yes, it goes very quiet right about now – you can run JACK using the setup explained above to hear things again (it doesn’t seem to interfere with ALSA grabbing the audio!)

Here’s the tricky bit!  What we now have to do is capture the WebSDR audio using the ALSA loopback device and pipe it to multimon-ng to decode it.

After much head-scratching this is what I came up with …

arecord -t raw -D plug:cloop -f S16_LE -r 22050 | multimon-ng -a AFSK1200 -A -t raw -

You should see decoded APRS packets scrolling up your terminal.

Displaying it graphically …

Install XASTIR.  By far the easiest way is to use the command apt-get install xastir if your distro has a precompiled binary available.  This way it will also install all the dependencies XASTIR requires to work.  If not, you will have to download and compile from the source available at  If you decide to compile from source, you will need to install the dependencies it asks for along the way.

Those who have never compiled from source before will need to install some development packages (Google is your friend!) but the actual steps to compile and install XASTIR from source are very familiar if you have compiled a program from source previously.

sudo make install

Run the configure script with ./configure and if/when it fails install the dependency it complains is missing.  Once the configure script completes successfully, it will tell you with which options it is going to compile XASTIR.  I also installed ImageMagick andGraphicsMagick separately by running sudo apt-get install imagemagick graphicsmagick before running the configure script one last time as although it isn’t a dependency as such, you can’t display any decent maps without it!  There are some other add-ons you can compile into it; do so if you wish.

Now you’re good to make the source code then sudo make install the binaries.

Once you have installed and configured XASTIR for your callsign and location (it will prompt you on first start) the option we’re interested in is Interface > Enable Server Ports on XASTIR’s menu bar.  Select it, that’s all you need to do to XASTIR at this stage.

OK, so we’ve already got ALSA grabbing the audio from WebSDR and piping it to multimon-ng to be decoded; now to get this lot talking to XASTIR!  Fortunately, XASTIR has installed some other tools needed to complete this tutorial.

Follow (and modify as appropriate) the tutorial at  We only need to complete steps 13 onwards!

At step 13, substitute for …

mkfifo –m a+rw aprs.fifo
arecord -t raw -D plug:cloop -f S16_LE -r 22050 | multimon-ng -a AFSK1200 -A -t raw - >aprs.fifo

Step 14 we can ignore, step 15 we already completed above while configuring XASTIR and step 16 is optional if you already know your APRS-IS passcode.

Steps 17 and 18 can be completed as per the instructions, not forgetting to substitute the my_call_sign, my_callpass_code and the pipe location as appropriate for your setup.  Don’t forget to run …

chmod a+x ./

… before trying to execute it!

Things should now start to appear on the map in XASTIR and you can confirm data is coming from the injection script by selecting View > Incoming Data on XASTIR’s menu bar.

Point to note (a gotcha which I haven’t figured out yet!) …

I needed to use 2 terminal windows.  One to run the arecord/multimon-ng pipe to the fifo and another to run the injection script reading from the fifo and sending data to XASTIR.  If I tried to run one or the other (or both) in the background, I ran into problems.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s