If you haven’t been keeping up with S2 Underground’s wonderful series of videos on the use of HF radio frequencies for what is colloquially called “warlord communications,” you should. It’s quite the leap-of-faith, to not only start producing videos on the use of HF band radios, but also produce a networking plan for low-cost, weak signal communications in the form of GhostNet; I’m impressed with what he’s doing out there, fighting in the shade.
But if you have kept up with S2U’s videos, then you’ve seen the hardware he works with; that Windows tablet may be perfect for his muscle memory and daily practices, but… I doubt a large portion of his audience is happy to be getting advice for Windows, when everything else is exactly what they’ve been searching for. And I don’t only refer to myself, with terrible hacks of Linux machines which eschew otherwise common assumptions, like systemd and gcc — for the fun of it! I also refer to those I know that would love something that runs well on Mac, because all they have are Macs. Others still use experimental operating systems, and while I can’t solve their problems, I can spend the time on my machines to help as many people as I can in that regard.
Before we get into the audio, you’ll need to make a detour over to the JS8Call repository and build the project for yourself. You can find all the compilation instructions in the repository, here. Once JS8Call is built, you’ve got the one big piece of UI software you will need, other than pavucontrol which most distributions of Linux give you out the gate, but others might have you download or build it separately.
Setting up a virtual audio pipe for RTL-SDR in Windows is an exercise in pain — at least two pieces of software you’re going to be downloading, if you follow S2U’s videos precisely, will ask you for money and heavens know how irritating that can become. Thankfully, the experience is a good bit easier on Linux, using only the rtl_sdr software, alsa software, and pipes on the command line.
Okay, it’s not ONLY pipes on the command line; without going into a tangent about audio systems on Linux, suffice it to say that that gets you as far as the station you chose playing out of your speakers. The next steps will depend generally on what audio systems you use, but presuming you use PulseAudio, or Pipewire with the PulseAudio emulator, I believe these steps should work as well for you as they did for me.
Go ahead and hit Ctrl-C
and stop the hiss of 7.078MHz if you copied what I did above, and type the following:
$ pactl load-module module-null-sink
$ pactl load-module module-loopback
If your speakers begin to feed back, go ahead and mute your microphone before going to the next steps. I wouldn’t want you going deaf.
Open up pavucontrol
and select the Playback tab, choosing “All Streams” from the drop-down at the bottom. You should see a new playback output — “loopback” followed by some numbers. Go ahead and assign the loopback to the null sink, as shown below, to prevent it from causing feedback between your microphone and speakers.
You can run the command to replay the SDR output, now:
$ rtl_fm -f 7078k -M usb - | aplay -c 1 -f S16_LE
Let’s break this down right quick, while it’s still outputting to your primary speakers:
rtl_fm -f 7078k -M usb -
: We’re playing the audio of the SDR data received on 7078000Hz using Upper Side Band demodulation and outputting tostdin
(-
). We then pipe (|
) that intoaplay -c 1 -f S16_LE
: which sets the number of channels to 1, and the sampling format Soundblaster 16 LE, which is about as plain as it comes.
We can now go back to pavucontrol
and you should see that audio output:
The name it displays for yours may vary; because I’m using PipeWire, it displays as “Pipewire Alsa [aplay]”, but it may say “PulseAudio Alsa [aplay]” or even just “aplay” — what matters is that you change the audio output device it’s pointing at from the default to “null-sink” as displayed in the picture above. Then, it’s as simple as selecting the “null sink” input and output device in js8call’s Settings.
There you go; if you’ve got a good enough antenna, and the right RTL-SDR hardware (the V3 has been tested to work decently with HF signals) or an AirSpy for that matter, you are now able to receive JS8 messages (and, if you have WSTJ-X installed, FT8 messages) with ease, in Linux.
And if it didn’t work? Sorry, no refunds. Again, the one rabbit hole I’m trying to avoid in this newsletter is the complexities of the Linux sound systems; if someone better equipped than I to explain them would want to, I’d be glad to host their writings on the subject and get into it in a separate newsletter — but for now, I’m content to have found a generally simple way to ensure it’s not just the people with Windows Tablets who can make good use of S2 Underground’s advice. And, the advice he gave about USB sound devices works just as well in Linux as it does in Windows, so if you’re still feeling a bit Shit Outta Luck, then you can still get a $10 dongle, a $5 aux cable, and plug a perfectly good Tecsun PL-368 into it.