Install
Packages will be published with each release in the GitHub repository. This page describes which package to use and how to set VerityRF Modem up with a radio and a client.
Contents: Linux, Windows, without the desktop app, Docker, configuration, PAT, VarAC, audio, PTT, help.
Linux
The desktop packages hold the app, the engine (verityrf) and the observer
(verityrf-observer). Use one of them:
| System | Packages |
|---|---|
| 64-bit PC (x86_64) | VerityRF_<version>_amd64.deb, VerityRF-<version>-1.x86_64.rpm or VerityRF_<version>_amd64.AppImage |
| 64-bit ARM (arm64), e.g. Raspberry Pi OS 64-bit | VerityRF_<version>_arm64.deb, VerityRF-<version>-1.aarch64.rpm or VerityRF_<version>_aarch64.AppImage |
| 32-bit ARM (armhf), Raspberry Pi 2 and later on a 32-bit OS | VerityRF_<version>_armhf.deb, VerityRF-<version>-1.armhfp.rpm or VerityRF_<version>_armhf.AppImage |
sudo apt install ./VerityRF_*_amd64.deb # Debian, Ubuntu, Raspberry Pi OS
sudo dnf install ./VerityRF-*.x86_64.rpm # Fedora and other rpm systems
chmod +x VerityRF_*.AppImage && ./VerityRF_*.AppImage
- Needs PulseAudio or PipeWire (with
pipewire-pulse, the default on current distributions). - The ARM packages need Debian 12, Ubuntu 22.04, Raspberry Pi OS 12 or later. The 32-bit build needs ARMv7 (not the Pi 1 / Zero / Zero W). The observer is the heaviest part; a Pi 4 or 5 is best for it.
- For steady transmit timing the engine asks for real-time priority. Allow it with an rtkit session or a limits file (
@audio - rtprio 95, your user in groupaudio); without it, it runs at normal priority with a warning.
Windows 10 and 11
Run VerityRF_<version>_x64-setup.exe: a per-user install, no administrator rights
needed. It puts verityrf.exe and verityrf-observer.exe next to the app.
- The installer is not code-signed yet, so SmartScreen asks once: More info, then Run anyway.
- The app uses WebView2, which is part of Windows 10 and 11.
- If the firewall asks about the ports, allow private networks only if clients on other machines must reach VerityRF Modem.
Without the desktop app
For a server, a Raspberry Pi without a screen, or your own scripts: the archives
verityrf-<version>-<target>.tar.gz (Linux x86_64, aarch64, armv7) and
verityrf-<version>-x86_64-pc-windows-gnu.zip hold the two programs, an example
configuration and a README.
verityrf --list-devices # the sound devices it can use
verityrf --input "USB Audio CODEC" --output "USB Audio CODEC" --ptt rigctld
verityrf --fm narrow # VARA FM instead of VARA HF
verityrf --config my.toml --kiss # with the KISS port on 8100
verityrf --print-config # the configuration in effect
It runs until Ctrl+C; the console log shows the ports and every link. verityrf --help lists every option.
Docker
The engine and the observer also run as a container on Linux (amd64, arm64 and armv7), with the host's PulseAudio/PipeWire socket or ALSA devices and any PTT method. Container images are not published yet. With an image loaded:
mkdir -p config && cp verityrf.example.toml config/verityrf.toml # edit [audio] and [ptt]
docker run --rm -it --user "$(id -u):$(id -g)" --ulimit rtprio=95 \
-v "$PWD/config:/config:ro" -v verityrf-logs:/logs \
-v "$XDG_RUNTIME_DIR/pulse/native:/run/pulse/native" \
-p 127.0.0.1:8300-8301:8300-8301 -p 127.0.0.1:8310:8310 verityrf
The ports are published on 127.0.0.1 only: whoever reaches the command port can key your transmitter.
Configuration
In the app, open Settings; it edits the same file the engine reads. The file is
~/.config/verityrf/verityrf.toml on Linux and %APPDATA%\verityrf\verityrf.toml on
Windows. Every key is optional. A minimal station:
[station]
licence = "N0CALL" # your licensed base call: its links are REGISTERED
[audio]
input = "USB Audio CODEC"
output = "USB Audio CODEC"
[ptt]
method = "rigctld"
rigctld = "127.0.0.1:4532"
Then Start engine in the app (or run verityrf). Changes saved later take effect with
Restart engine.
PAT (Winlink)
In PAT's configuration (pat configure):
"varahf": {
"addr": "localhost:8300",
"bandwidth": 2300,
"rig": "",
"ptt_ctrl": false
}
Start VerityRF Modem, then pat connect varahf:///N1CALL, a gateway from pat rmslist, or
pat http and the web interface. bandwidth may be 500, 2300 or 2750. Leave
ptt_ctrl false when VerityRF Modem keys the radio; with ptt_ctrl true and a hamlib
rig, PAT keys it and VerityRF Modem's PTT method is host.
For VARA FM, start VerityRF Modem with --fm narrow (or wide) and use PAT's varafm
transport: "varafm": {"addr": "localhost:8300", "ptt_ctrl": false}, then
pat connect varafm:///N1CALL.
VarAC
In VarAC's settings for the VARA HF modem: host 127.0.0.1, command port 8300
(data port 8301). Turn off VarAC's option to start VARA itself, and start VerityRF Modem first. For VARA FM,
choose the modem type VaraFM and run VerityRF Modem with --fm. If you use broadcasts, start
VerityRF Modem with --kiss and point VarAC's KISS port at 8100.
Keying: either VerityRF Modem keys the radio and VarAC's own PTT is off, or VarAC keys it and VerityRF Modem's PTT
method is host.
Audio
- Linux:
verityrf --list-deviceslists the PulseAudio/PipeWire sources and sinks; use the names it prints. VerityRF Modem measures the real output latency on the sink's monitor, so the PTT lines sit exactly on the audio. - Windows: the device names as Windows shows them, such as
Microphone (USB Audio CODEC)andSpeakers (USB Audio CODEC). Turn off the interface's audio enhancements. - Transmit level: use TUNE in the app's Audio view (a 1500 Hz tone with PTT). Raise the level until the radio's ALC just starts to act, then back off a little. On VARA FM the client's drive level sets it.
PTT
Choose in Settings → PTT, or in the [ptt] section. Each method has a Test and a
Key 1 s button in the app.
- Client keys it (
host, the default): PAT or VarAC key the radio on VerityRF Modem's PTT lines. - VOX: the radio keys on the audio; keep its VOX delay short.
- rigctld: run
rigctld -m MODEL -r /dev/ttyUSB0 -s 38400(orCOM3) and setptt.rigctld. - Serial RTS/DTR:
ptt.serial_portandptt.serial_line. On Linux your user must be in groupdialout. - CM108 / CM119 GPIO:
verityrf --list-hidlists the candidates; setptt.cm108_device(a USB id like0d8c:0012is stable across replugging) andptt.cm108_gpio(default 3). On Linux, give your group access to the device with a udev rule:
then# /etc/udev/rules.d/60-verityrf-cm108.rules SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0d8c", MODE="0660", GROUP="plugdev"sudo udevadm control --reload && sudo udevadm trigger, add yourself toplugdev, log in again and replug the interface.
ptt.max (30 s by default) releases a key held by rigctld, serial or CM108 PTT if a transmission ever runs longer.
Problems and questions
Report problems and ask questions in the project's GitHub issues. Include your system, the package you installed, your client and, if you can, the engine's console output or the app's activity log.