Skip to content



When first run, go to the Setup - General Settings tab first and configure the device options, then click Save before starting TX or RX. Without the correct device arguments or the correct antenna selected, the application can crash when enabling RX or TX.

Before any upgrade, please make a backup of the $HOME/.config/qradiolink/ directory in case something goes wrong, to avoid losing settings and channels.

See Configuration for more details.

Running the program

It is not recommended to run qradiolink as the root user.

It is recommended to start the application using the command line when running the first few times and look for any error messages output to the console. Some of them can be ignored safely, others are critical. Logging to console is by default enabled.

To display the application in fullscreen mode, use the system shortcut for fullscreen (F11 and Ctrl+Shift+F in KDE, Ctrl+F11 in Gnome)

Audio recordings are saved in the directory specified in the settings. Audio is recorded in FLAC (free lossless audio compression) format, with audio data only being written to file when there is something being played back on the audio interface. That means that recording while there is silence will not generate file data. The file name corresponds to the time when the recording was started.

The S-meter calibration feature is not complete yet, however you can enter in the Setup tab the level (integer value expressed in dBm) of a known signal (e.g. sent by a generator) to correct the reading. Do NOT apply signals with levels above -30 to 0 dBm to the receiver input as this might damage your receiver, depending on hardware. Please note that the RSSI and S-meter values displayed are relative to the current operating mode filter bandwidth, so the FM reading will be different to a SSB reading! Calibration tables support for different bands may be provided in the future.

Selecting the mode and enabling transmit and receive

Use the lower right drop-downs to select the transmit and receive mode. The application can operate in mixed mode, that is you can transmit one mode and receive another mode. MMDVM settings

After selecting the desired modes, enable the RX and / or TX buttons. If the SDR device cannot be initialized, an error pop-up will be displayed and you will be directed to the General settings page to reconfigure the device arguments.

Sample rate, FFT

The minimum supported sample rate in GUI mode is 1 MSps. The maximum supported sample rate is 50 Msps. For best performance, at higher sample rates, use a smaller FFT size.

Transmit is supported at all usable sample rates. Transmitting at higher sample rates will use more CPU cycles and be less efficient, so it is recommended to use the minimum possible sample rate when transmitting.

High sample rates, high FPS rates and high FFT sizes all affect the CPU performance adversely. On embedded platforms with low resources, you can disable the spectrum display completely using the FFT checkbox.

Enable the FFT history effect to better view bursty transmissions in the Radio Settings page.

Sample rate, FFT, FPS

The frame per second display rate can be configured in a drop down below the spectrum display. It is not possible to display a higher FPS than the Sample Rate / FFT size value. Even when setting FPS to maximum rate, the display will only be updated as FFT bins are computed, since there is no FFT overlap as in other applications. The FPS value also sets the rate at which the S-meter and constellation display are updated, so reduce it to minimum usable values. If the controls menu is not visible, the S-meter display will not consume CPU resources. Similar for the Constellation display.

Spectrum display

You can change the FFT reference display level by hovering with the mouse on the left sidebar where the dB numbers are displayed and dragging this bar up and down. You can also zoom on this axis by hovering with the mouse and using the scroll whell. The levels will be saved in the settings and will remain the same at the next restart.

Reference level zoom-in

Hovering the mouse on the FFT display will bring up a tooltip with the signal level at that precise point and the frequency.


You can also drag the frequency bar below the FFT display to the left and right, and you can zoom in and out with the mouse wheel on both of the number bars. Right clicking the frequency bar resets the frequency zoom to the normal default value.

Frequency zoom-in

The FFT history effect setting allows the display of the two previous FFT bins in addition to the current one, which may be useful for the display of short bursts transmissions. Enable the effect and / or FFT colours in the Radio settings page.

Filter widths for reception and transmission of the analog modes (FM, SSB, AM) are configurable. To increase or decrease them, drag the margins of the filter box on the spectrum display. For SSB upper sideband, only the upper filter limit can be configured. For SSB lower sideband, only the lower filter limit is configurable.

Constellation display

For Codec2 and Opus digital voice modes as well as video and IP modes, a constellation display window is available and can be used to evaluate the quality of the received signal. The display can be activated using the button: Constellation display button

The constellation display window is transparent and can be moved anywhere on the screen.

Constellation display window

Note that the constellation window will not show data for FreeDV and analog voice modes.

Changing frequency

There are two main modes of changing the transmit and receive frequency. Clicking anywhere in the FFT spectrum display area will move the demodulator bars to that frequency. If no TX split is set, that will also be the transmission frequency.

The second way is to click to a general area on the spectrum display, and then use the frequency control widget to precisely adjust the frequency. Hover with the mouse above the digits, and either use the mouse wheel or click in the upper or lower area of the digit to increment or decrement the frequency by that decimal. Frequency control widget

Voice over IP (radio over IP)

VOIP uses umurmur as a server. A version known to work with qradiolink is mirrored at qradiolink.

You can use QRadioLink as a pure VOIP client without using the radio by selecting Use PTT for VOIP on the Base station tab.

For radio over IP operation, you need to toggle Forward radio on in the Base station tab to send the digital or analog radio voice to the VOIP server and viceversa. Any voice packets coming from the server will be transmitted directly after transcoding in this case. Full duplex audio from more than one VOIP client at the same time can be transmitted. To be able to transmit audio over radio, enable the PTT button after you have configured the VOIP streaming. Radio over IP and Repeater mode can be used at the same time.

Radio over IP interface

The VOIP username will be your callsign as set on the settings page. The server password is stored in plain text inside the config file.

In the Base station tab, once connected to umurmur you will be able to see a list of channels and users, including users with active voice transmission. To the right of the channel list, a text box displays text messages, and below it there is a field where you can enter and send text messages via the Mumble protocol to other connected programs.

The VOIP volume slider on the Setup tab controls the volume of the audio sent to the Mumble server.

It is now possible to mute self or deafen self from the UI without disconnecting from the VOIP server.

The Mumble application is now also compatible with QRadioLink. It is recommended to enable Push To Talk in Mumble and maximize the network robustness and latency settings. Text messages from Mumble are displayed inside the application, but no action is taken for channel-wide messages. Text messages can also be sent to the current Mumble channel. If remote control is enabled, private Mumble text messages will control the radio.

The Mumble VOIP connection uses the Opus codec at a higher bitrate, so ensure the server can handle bitrates up to 50 kbit/s per client. The VOIP bitrate can be configured in the Setup page. On Android phones, the Plumble application can be used as a client.

Remote control via Mumble private text messages requires enabling remote control in settings, and using the Mumble client (either desktop or Android) to send text messages to the QRadioLink username. Text messages sent to the channel will be ignored by the application. Authentication of the user who is sending the commands is not yet implemented.

When operating a repeater linked to the VOIP network, you may experience small delays of voice due to transcoding operations, especially for mixed mode repeaters (in addition to network latencies).

Headless mode

Running headless (no graphical user interface) for usage on embedded platforms like the Raspberry Pi or similar boards requires starting QRadioLink from the command line with the --headless option; example:

$ qradiolink --headless  >> $HOME/.config/qradiolink/qradiolink.log 2>&1

When running in headless mode, console log will be disabled by default with the above command. Init scripts for SysV/systemd will be provided at some point to be able to run QRadioLink as a system service. When running headless from CLI, the network command server is started by default listening on the port configured in the settings file (or 4939 if not configured). Headless and remote operation will usually require you to enable VOIP forwarding either in the configuration file or via a command, unless you want to use audio from the machine where QRadioLink is running. CPU consumption can reach 50% at 800 MHz CPU clock for a headless QRadioLink instance connected to the VOIP network and operating as a duplex repeater (depending on mode used).

The configuration file is located in $HOME/.config/qradiolink/qradiolink.cfg.

Log messages are stored at $HOME/.config/qradiolink/qradiolink.log (this location may change in the future).

Memory channels

Memory channels

The memory channels storage file is located in $HOME/.config/qradiolink/qradiolink_mem.cfg.

After adding a memory channel, you can edit its values by double clicking on a table cell. This may cause the radio to switch to that channel. The settings are not updated instantly, so if you make a change, after you press Enter, switch to another channel and back to get the updates. A button allows you to save channels before the window is closed. Saving sorted channels is not possible yet. Otherwise, the channels, like the settings, will be stored on exit (if no application crash meanwhile).

Transmit and receive

Duplex or semi-duplex

Toggle duplex mode on and off using this button: Duplex toggle

In full duplex operation you need to have sufficient isolation between the TX antenna port and the RX antenna port to avoid overloading your input or destroying the LNA stage.

In half duplex mode the receiver audio is muted during transmit and the RX gain is minimized. Do not rely on this feature if using an external power amplifier, please use a RF switch (antenna switch) with enough isolation, or introduce attenuators in the USB relay sequence to avoid destroying the receiver LNA.

The transmitter of the device is active at all times if enabled, even when no samples are being output. Although there is no signal being generated, local oscillator leakage may be present and show up on the spectrum display. This is not a problem usually, unless if you keep a power amplifier connected and enabled at all times. You can use the USB relays to disable it in this case when not transmitting.

Transmit shift can be positive or negative. After changing the value in the Split field, you need to press Enter to put it into effect. Setting the TX shift is not possible while transmitting a signal. Although the shift is stored as Hertz and you can edit this value in the config, the UI will only allow a value in kHz to be entered (e.g. -7600 kHz standard EU UHF repeater shift). TX split

To switch immediately to the reverse repeater frequency, use the Rev button above.

Repeater mode requires the radio to operate in Duplex mode. Prior to enabling repeater mode, make sure to configure the TX shift (positive or negative). Mixed mode repeat is possible, so you can operate the receiver on a different mode to the transmitter (FM to Codec2/Opus/FreeDV or viceversa). If radio forwarding is enabled, audio from the repeater will be broadcast to the VOIP network as well. The repeater can now handle mixing of audio incoming from the VOIP network and coming from the radio receiver so it is possible for two or more users on different connected repeaters to speak simultaneously.


Digital transmit gain in the Setup page can be safely ignored on most devices. It was added as a workaround for the PlutoSDR and is no longer required. Leave it at 5 (half scale) unless you know better.

FreeDV modes and PSK modes are very sensitive to amplifier non-linearity. You should not try to use them within a non-linear envelope to avoid signal distortion, splatter or unwanted spectrum components. Digital gain for these modes has been set in such a way to avoid non-linear zone for most devices output stages. If this is not satisfactory, you can use the digital gain setting to increase the digital gain.

Receive and transmit gains currently operate as described in the gr-osmosdr manual. At lowest settings, the programmable gain attenuator will be set, following with any IF stages if present and finally any LNA stages if present. This behaviour is desirable since there is no point setting the LNA to a higher value than the PGA if the signal power is already above the P1dB point of the LNA stage. Controls for adjusting individual gain stages can also be found on the controls menu. The name of the gain stage will appear as a tooltip.

Setting application internal microphone gain above the middle of the scale might cause clipping and distortion of audio, as the system volume also affects what goes to the radio.

If no audio is being transmitted, check the Pulseaudio mixer (Pavucontrol) and ensure that the Recording device is set correctly.

VOX mode requires careful setup of system microphone gain to avoid getting stuck on transmit. The VOX activation level can be configured in the Setup page.


Squelch is automatic for digital voice modes, and can be set to a certain value using the left-most dial. In analog voice modes, you can auto-adjust the squelch value to the current signal level using the autosquelch button. Automatic squelch

Call log and text

For Codec2, Opus and M17 digital modes (except FreeDV), the callsign is transmitted along with voice. You can see the call log temporarily on top of the spectrum display and permanently in the Link services tab.

Call log

Text messages received will also be displayed in this field. Aboce it, there is an input field where you can enter a text message to be transmitted.

Relay switching

USB relays using FTDI (FT232) chipsets are used to control RF switches, power amplifiers and filter boards. To determine if your USB relay board is supported, look for a similar line in the output of lsusb:

Bus 002 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC

Do note that the identifier digits are the most important: 0403:6001.

At the moment, such USB relays can be sourced on Amazon and Ebay and can be identified by the light silver-blue colour of the board. Other types of relays may be supported in the future.

QRadioLink can control a maximum of 8 relays, and the used relays can be configured in the Setup page. The setting called relay_sequence is an 8 bit char bitmask that can take values from 0 to 255 and each bit controls the relay with the bit+1 number, starting with bit 0 and relay number 1. The order in which relays are activated and deactivated during a transmission cycle is always as follows: activation starting with relay 1 to relay 8, deactivation in reverse order (relay 8 to relay 1). A Python script ext/ is included in the git repository to help you determine the activation order of relays on the board.

TX split

LimeRFE frontend

The LimeRFE frontend is supported in simplex and full duplex mode. Control of the LimeRFE is done via the USB connection. The default device is /dev/ttyUSB0, however you can change this device in the Setup -> General Settings page in case your device is asigned a different tty when plugging it in. Automatic tuning based on SDR frequency is available, however only amateur bands in IARU region 1 are currently supported. Be careful not to enable duplex mode in QRadioLink if port labeled TX is not terminated on a 50 Ohm load or connected to an antenna. For simplex operation use only the ports labeled Tx/Rx and 70 MHz.

Do not exceed a transmit gain setting of 80 for the 2300 - 2450 MHz band to avoid amplifier damage. For SDR frequencies outside of IARU region 1 amateur radio bands, the WIDEBAND_1000 and WIDEBAND_4000 RF paths are used for both transmit and receive.

On the Radio Settings page you will find settings for the LimeRFE attenuator and notch filter.

IP modem mode

IP radio modem operation mode requires net administration priviledges (NET_ADMIN capabilities) to be granted to the application. An error message will be output at startup if these priviledges are not present. You can safely ignore this message if you don't need to use the IP modem facility.

$ sudo setcap "cap_net_raw,cap_net_admin+eip" ./qradiolink

The IP modem can use two modes: IP QPSK 250k and IP 4FSK 100k. The modem can be configured in the Setup page to use burst transmission instead of continuous transmission. To use the IP modem mode, you will need to enable Duplex and set a positive or negative transmit Split large enough to avoid interference of TX with RX (or use a duplexer).

M17 mode

The M17 audio modem has specific settings available. M17 Settings

  • the channel access number (CAN) for receive and transmit.
  • a checkbox which tells the receiver to decode all transmissions, regardless of CAN number
  • source callsign (will be transmitted along with voice)
  • destination callsign
  • destination type: Callsign, ALL, ECHO, INFO, UNLINK. See the M17 protocol specification for more details.

Repeater mode

To use the repeater mode, enable Duplex and set a positive or negative transmit shift. Select the desired RX and TX operation modes, then go to the Base station tab and enable the Repeater button. Finally, press the PTT button to enable re-transmit over RF.

Remote control interface

A remote control interface can be enabled in the Radio Settings tab. The network remote control feature (for headless mode) is work in progress. The network server will listen on the localhost IPv4 network interface and the default control port is TCP 4939. There is no provision for authentication of the user, so use SSH to log in to the remote system and use telnet from there to localhost port 4939. To use the network remote control feature, you can simply use the telnet program or you can create simple Python or shell scripts to automate the commands. In order to have command history, install the rlwrap program and use it with telnet.

The help command will list all the available commands as well as parameters:

$ rlwrap telnet localhost 4939
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Welcome! Available commands are: 
rxstatus (0 parameters): Status of receiver (started or not)
txstatus (0 parameters): Status of transmitter (started or not)
txactive (0 parameters): See if the radio is on the air
rxmode (0 parameters): Get RX operating mode
txmode (0 parameters): Get TX operating mode
rxctcss (0 parameters): Get RX CTCSS
txctcss (0 parameters): Get TX CTCSS
rxvolume (0 parameters): Get RX volume value
txvolume (0 parameters): Get TX volume value
squelch (0 parameters): Get squelch value
rxgain (0 parameters): Get RX gain value
txgain (0 parameters): Get TX gain value
rssi (0 parameters): Get current RSSI value
voipstatus (0 parameters): Get VOIP status
forwardingstatus (0 parameters): Get radio forwarding status
voxstatus (0 parameters): Get VOX status
repeaterstatus (0 parameters): Get repeater status
duplexstatus (0 parameters): Get duplex status
setrx (1 parameters): Start/stop receiver, 1 enabled, 0 disabled
settx (1 parameters): Start/stop transmitter, 1 enabled, 0 disabled
setrxmode (1 parameters): Set RX mode (integer number, 0-16)
settxmode (1 parameters): Set TX mode (integer number, 0-16)
setrxctcss (1 parameters): Set RX CTCSS (floating point number, 0.0 to 200.0)
settxctcss (1 parameters): Set TX CTCSS (floating point number, 0.0 to 200.0)
setsquelch (1 parameters): Set squelch (integer number, -150 to 10)
setrxvolume (1 parameters): Set RX volume (integer number, 0 to 100)
settxvolume (1 parameters): Set TX volume (integer number, 0 to 100)
setrxgain (1 parameters): Set RX gain (integer number, 0 to 99)
settxgain (1 parameters): Set TX gain (integer number, 0 to 99)
tunerx (1 parameters): Tune RX frequency, integer value in Hertz
tunetx (1 parameters): Tune TX frequency, integer value in Hertz
setoffset (1 parameters): Set demodulator offset, integer value in Hertz
setshift (1 parameters): Set TX shift, integer value in Hertz
setduplex (1 parameters): Set duplex mode, 1 enabled, 0 disabled
setforwarding (1 parameters): Set radio forwarding mode, 1 enabled, 0 disabled
setrepeater (1 parameters): Set repeater mode, 1 enabled, 0 disabled
setvox (1 parameters): Set vox mode, 1 enabled, 0 disabled
setpttvoip (1 parameters): Use PTT for VOIP, 1 enabled, 0 disabled
setcompressor (1 parameters): Enable audio compressor, 1 enabled, 0 disabled
setrelays (1 parameters): Enable relay control, 1 enabled, 0 disabled
setrssicalibration (1 parameters): Set RSSI calibration, integer value in dBm
setrxsamprate (1 parameters): Set RX sample rate, integer value in Msps
autosquelch (0 parameters): Set autosquelch
setfilterwidth (1 parameters): Set filter width (analog only), integer value in Hz
ptt_on (0 parameters): Transmit
ptt_off (0 parameters): Stop transmitting
connectserver (2 parameters): Connect to Mumble server, string value hostname, integer value port
disconnectserver (0 parameters): Disconnect from Mumble server
changechannel (1 parameters): Change channel to channel number (integer value)
mumblemsg (1 parameters): Send Mumble message, string value text
mutemumble (1 parameters): Mute Mumble connection, 1 enabled, 0 disabled
start_trx (0 parameters): Convenience function, requires everything to be preconfigured
stop_trx (0 parameters): Convenience function, requires everything to be preconfigured

qradiolink> rxstatus
RX status is inactive.

qradiolink> setrx 1
Turning on receiver

qradiolink> rxstatus
RX status is active.

qradiolink> quit
Connection closed by foreign host.

MMDVM mode

MMDVM integration allows full TDMA duplex repeater operation only with LimeSDR and Ettus USRP devices. To intialize the device, use the string driver=lime,serial=XXXXXX where the serial number is the actual serial number of the device. Full TDMA mode is not supported via gr-osmosdr, so no other devices can use this mode yet.

MMDVM multi-channel mode demands more CPU resources, and DMR timing can be affected by the FFT update loop. To avoid this, for MMDVM mode qradiolink can only be run in CLI (headless) mode, starting it with the --mmdvm CLI argument. Before this, you can configure all parameters by starting it normally with GUI, then exit and start it via CLI only. Care must be taken that the receiver offset versus the radio center frequency is chosen in such a way that all MMDVM channels fall inside the receiver bandwidth. You can also edit all the settings in ~/.config/qradiolink/qradiolink.cfg if the GUI cannot be launched on the system.

THe maximum number of MMDVM channels is 7 in the MMDVM-multi mode, the minimum number of channels is 2 in this mode. To use only one channel, select the MMDVM mode in the mode dropdowns. MMDVM settings

Video transmission mode

Select one of the video modes for both RX and TX in the lower right menus.

Once video is being received, a new window will appear on top containing the image. You can combine this window with the constellation display window, and move them anywhere on the screen.

Video and constellation display on top of spectrum

The video transmission also has sound, using the Opus audio codec. The audio device needs to be configured properly, since video cannot be transmitted if no audio device is available.

GPredict control

GPredict radio tuning: early integration with GPredict satellite tracking allows it to control both RX and TX frequencies and compensate for the Doppler effect of sattelite passes. In order to enable it, you will need to also enable Remote Control, and then configure a new radio in GPredict (full duplex, with no PTT status support, same port as configured in QRadioLink for remote control, LO set to zero for both downlink and uplink). While GPredict control is active, you will not be able to issue normal remote control commands. Warning: this feature is still in early development. GPredict can issue tune request to unsupported frequencies if it is set to track a sattelite with no transponder, which can crash QRadioLink.