JS8Call
Getting Started
Calsigns
Js8Call uses your amateur radio callsign as your primary network address and identity,
allowing for direct messaging, automated relays, and group chats. By placing a specific
callsign at the start of a transmission, the software automatically
targets that station, even if they are unattended or on a different frequency.
Direct Calling
To initiate a private chat, you type the recipient's callsign first in
your message (e.g., N6XXX HELLO). The software interprets this as a directed message.
The receiving station’s software recognizes
its own callsign and alerts the operator, or logs it to their inbox if they are away
Group Calls
Js8Call allows you to direct messages to multiple stations
simultaneously using group callsigns, which always start with an @ symbol
(e.g., @ALLCALL, @ARRL, @LOCAL). Anyone monitoring that group will receive and decode
the transmission, making it highly effective for emergency nets or club communications.
Automated Responses & Network Routing
Because your callsign acts as a unique digital identifier, you can
configure your station for automated functions. You can send a heartbeat signal
(using your callsign) to check who hears you. You can also leave messages for other
stations by targeting their callsign, which their system will store until they
return to the keyboard.
Primary uses and capabilities
- Keyboard-to-Keyboard Chat:
- Unlike standard FT8 (which only sends short, automated signal
reports), JS8Call allows free-text communication.
It functions much like a decentralized, ultra-low-power chatroom.
- Grid-Down & Emergency Communications:
Because of its incredible sensitivity, operators can pass text
messages even with compromised antennas, high background noise,
or minimal power (QRP).
- Message Relaying & Store-and-Forward:
If you cannot directly reach a distant station, you can send a
message to a third-party operator who will relay it.
You can also leave messages in another station's "mailbox" for them to read
later.
- Heartbeat/Automatic Announce:
Stations can send automated "heartbeat" beacons to announce their presence and
confirm which other stations can hear them, making it easy to instantly
map an emergency network.
- Directed Messaging & Commands:
Operators can send commands to query other stations (e.g., asking for a
signal report or station status) or reach specific groups like @ALLCALL or
regional preparedness nets.
JS8Call bridges the gap between deep-fringe signal decoding and highly interactive,
multi-operator text messaging.
To open JS8Call
Excute the AppImage file directly from the terminal
/var/www/html/apps/js8call.sh
or
by double-clicking the file JS8Call-Improved-2.5.2-x86_64.AppImage
/var/www/html/apps/JS8Call-Improved-2.5.2-x86_64.AppImage
I have also created a launcher on the panel:
It's the gear icon on the far right
Settings - Getting Started
(tr)uSDX
To operate JS8Call with a (tr)uSDX transceiver on a Linux laptop, you need to use a
specific CAT emulation driver and configure audio routing through virtual loopback
devices.
Core Software Solution
The primary method for Linux integration is the truSDX-Linux
driver, a Python-based CAT interface available on GitHub. This driver emulates a
Kenwood TS-480 radio, allowing JS8Call to control the (tr)uSDX via USB.
It handles frequency synchronization, PTT control, and audio streaming over the
USB connection (using UA0/UA1/UA2 commands).
Configuration
The driver and (tr)uSDX settings have already been installed on the Linux Mint 21.3
image. The below is provided for reference
The most critical setting is PTT Method: CAT, as the (tr)uSDX requires CAT control for
transmission, which also disables VOX during band changes.
Essential Configuration Steps
- Install the truSDX-Linux driver and dependencies (Python 3.12+, pyserial, pyaudio) and configure ALSA loopback or PipeWire virtual audio devices.
- In JS8Call, select the Kenwood TS-480 radio profile and set CAT control to /tmp/trusdx_cat with a baud rate of 115200.
- Set PTT Method to CAT and ensure DTR/RTS are Off/None in CAT settings if using the native driver, or configure OmniRig if using it as a bridge.
- Use Virtual Audio Cables (e.g., VB-Cable or Loopback) for both Input and Output, routing audio correctly between the radio and JS8Call.
- Ensure the (tr)uSDX is running firmware version 2.00 or higher for stable USB/CAT communication.
- Set Semi-QSK menu option 2.4 to Off for FT8/JS8Call operations; this should only be On for CW modes.
Radio Profile:
Select Kenwood TS-480 (or Kenwood Generic) in the JS8Call/Rig control dropdown.
CAT Control:
Set to /tmp/trusdx_cat with a baud rate of 115200.
PTT Method:
Set to CAT. Ensure DTR and RTS are set to Off/None in the CAT control settings if using
the native driver, or configure OmniRig if using it as a bridge.
Serial Port:
Select the correct COM port (e.g., COM8) with a baud rate of 115200.
Data/Stop/Handshake:
Set to 8/1/None.
Audio Devices:
Use Virtual Audio Cables (such as VB-Cable or Loopback) for both Input and Output. Set the Input to the cable receiving audio from the radio and the Output to the cable sending audio to the radio.
Firmware:
Ensure the (tr)uSDX is running firmware version 2.00 or higher for stable USB/CAT
communication.
Semi-QSK:
Set menu option 2.4 to Off for FT8/JS8Call operations; this should only be On
for CW modes.
The (tr)uSDX's USB audio interface is designed to work with software like JS8Call,
but proper configuration is essential for reliable operation.
By following these steps, you can achieve seamless integration between the
(tr)uSDX and JS8Call on a Linux system, enabling effective digital communication
in the field.
To configure (tr)uSDX for JS8Call (or JS8Call-Improved), use the Kenwood TS-480 radio
profile in your software's radio settings.
To configure JS8Call to work with the (tr)uSDX, follow
these steps:
Before going out in the field install the driver
Driver Installation: Clone the miltonics/truSDX-Linux repository and run the setup.sh
script. This installs dependencies (Python 3.12+, pyserial, pyaudio) and configures
ALSA loopback or PipeWire virtual audio devices.
JS8Call Radio Settings:
- Rig: Kenwood TS-480
- CAT Control: /tmp/trusdx_cat
- Baud Rate: 115200
- PTT Method: CAT
- Data/Stop/Handshake: 8/1/None
.AppImage
JS8Call-Improved is distributed as an AppImage for Linux users, providing a
convenient way to run the application without traditional installation.
To set up JS8Call-Improved on MX Linux, follow these steps:
chmod +x JS8Call-Improved-*.AppImage
After making the AppImage executable, you can run it directly from the terminal or
by double-clicking the file in your file manager.
You can then launch the application by double-clicking the file or executing it
directly via the terminal. Note that because JS8Call-Improved is a fork of the
original JS8Call, you may need to install additional dependencies such as
libqt5multimedia5-plugins if your audio devices do not appear in the settings,
which can be done with:
sudo apt install libqt5multimedia5-plugins
To change your callsign in JS8Call, open the Settings menu by pressing F2 or
navigating to File > Settings.
In the General - Station tab, locate the Callsign
field, enter your new amateur radio callsign (e.g., KO6LVT), and save the changes.
How to Achieve BktTimeSync-Level Accuracy on Linux
Follow these steps to use a USB GPS dongle as a primary time source
Install Required Packages
Open your terminal and install the GPS daemon and time
synchronization tools (for Debian/Ubuntu-based distributions):
bash
sudo apt update
sudo apt install gpsd gpsd-clients chrony
2. Configure the GPS Daemon
Map the GPS to mount on your system (usually /dev/ttyUSB0).
Edit the gpsd configuration file:
bash
sudo nano /etc/default/gpsd
Update the DEVICES and GPSD_OPTIONS lines:
textDEVICES="/dev/ttyUSB0"
GPSD_OPTIONS="-n"
3. Configure chrony or ntp as Your Time Source
You can configure chrony to pull time from the GPS daemon instead of the internet.
Open the configuration file:
bash
sudo nano /etc/chrony/chrony.conf
Add the GPS as a local reference clock. You will typically add a line like this at the
bottom of the file (refer to the GPSD Time Service HOWTO for exact syntax):
textrefclock SHM 0 poll 4 refid GPS precision 1e-1
Restart the chrony service to apply your changes:
bash
sudo systemctl restart chronyd
Alternatives to BktTimeSync for Linux
If you prefer a simpler GUI-driven method similar to BktTimeSync on Linux,
you can use these software options:
JTSync: A popular tool for amateur radio users that provides clock synchronization by
reading incoming FT8/WSJT-X signals and localizing callsigns.
GPSD Web Interfaces / Gpsmon: You can use built-in tools like gpsmon via your
terminal to verify satellite fixes and ping your system with real-time NMEA data.
GridTracker features initial, community-driven or variant support for JS8Call via
specific UDP configurations or WSJT-X server emulation, though native integration
historically required specific packet structures from the JS8Call application side.
You can track real-time digital decodes, map stations,
and handle logging by ensuring your UDP port settings align between the applications.
Integration and Setup
- UDP Ports: JS8Call typically communicates over port 2242, whereas GridTracker listens on
designated ports for live traffic parsing.
- ADIF Logging: You can manage log redundancy by feeding ADIF outputs or syncing logs
directly while operating.
-
Mapping and Roster: View decoded callsigns, Maidenhead grid squares, and real-time path
trajectories on the interactive GridTracker map interface.
JS8Call-Improved
To route traffic successfully from JS8Call-Improved to GridTracker, you must trick
GridTracker into treating the data stream like standard WSJT-X data.
Because GridTracker natively uses
WSJT-X data structures, you must configure JS8Call-Improved to simulate a WSJT-X
server.
Configure JS8Call-Improved
- Open JS8Call-Improved and navigate to Settings > Reporting.
- Locate the UDP Server section.
- Check the box to enable the WSJT-X Server emulation.
- Set the IP address to 127.0.0.1 and change the UDP port to match what
GridTracker expects (typically 2237 for WSJT-X,
or keep it at 2242 if you manually match it in GridTracker).
Configure GridTracker
- Open GridTracker and click the Settings (gear) icon.
- Go to the General tab.
]
- In the Receive UDP Port field, ensure the port matches the one you assigned in
JS8Call-Improved (e.g., 2237 or 2242).
- GridTracker will automatically begin decoding incoming traffic and mapping
Maidenhead grids on the screen.
Known Limitations
No Call Roster Replies:
Due to inherent UDP structural differences, you cannot click a callsign inside the
GridTracker Call Roster to initiate a reply back inside JS8Call-Improved. Replying must
be handled directly within the
JS8Call-Improved chat interface.
Shared Port
Shared Port Conflicts: If you also use WSJT-X for FT8, ensure both software applications
are not trying
to send data to the same port at the same exact time to avoid traffic collisions.
Snips from the Docs
GridTracker’s IP address and Port settings must match WSJT-X’s. If they don’t the
two applications won’t be able to communicate with each other.
If you have opened WSTJ-X but
don’t see “RECEIVE” in the control panel check your GridTracker settings.
At the top of the General tab the “Application Status” should read:
WSJT-X - ? - (127.0.0.1/2237)/JTDX - ? - (?)

Note: if you’re running WSJT-X and GridTracker on separate computers use
multicast address 224.0.0.73.
Easy |