Raspberry Pi4 Trifecta TNC-Bank Image Companion Documentation


A (long winded) demonstration of the setup


The image requires at least a 16GB SDCard (8.3GB used) and will auto-resize to the full capacity on boot up.

P.S This document is still a work in progress 😻

When Used as A TNC Bank

Upon first boot the image will resize itself to fit the full capacity of the SD card. Second boot will present a black screen, it is at this point where you can right-click on the screen to open the menu. From there, open a terminal.

Please note that there is no toolbar installed, you may want to install the tint2 package if you wish to actually use the desktop. (sudo apt install tint2)

By default, none of the TNCs are started automatically, but can be enabled to do so:

sudo systemctl enable vara
sudo systemctl enable ardop
sudo systemctl enable ardop-gui
sudo systemctl enable qtsm

sudo service vara start
sudo service ardop start
sudo service ardop-gui start
sudo service qtsm start

To view the TNCs, attach VNC Viewer to Display “2”.

So long as you have RealVNC client installed on a remote system, such as another Raspberry Pi, or an iPad you can connect to the screen running the TNCs for monitoring purposes.

From Terminal: Note: omit the brackets if providing an IP address.

vncviewer [optional IP address]:2 

Login is "pi"
Password is "raspberrypi"

Or open VNC Viewer from the menu and launch the preconfigured VNC from that (this may be stripped from the image in future for security reasons).

Configuring the TNCs

Note: Due to how QtSoundModem config dialog saves settings, the manually configured sound devices do not appear in the dropdown lists because they are “virtual”, therefore the dsnoop/dmix devices will be overwritten if the dialog is used to change configuration parameters, so the best practice is to edit the file manually to change the KISS or AGW TCP ports to your preference (if needed).

vim bin/QtSoundModem.ini 

By default the following ports are set:


  • KISS: 7777
  • AGW: 6666


  • 8015


  • 8300
  • 8301 (data)

Additional resources:

When used as a Console With Old Packet Apps (not TNCS) –

Not meant for 3rd Parties but provided for educational purposes only.

As this image is dual-purpose, this image is also capable of running old packet applications for fun, but due to performance requirements must not be used if running the system as a TNC-bank.

On this image is DOSBOX with various packages preconfigured to use a virtual serial port pipe to the box with the node running, its complicated and is not really for 3rd party use because of this.

Each program such as “superpacket” or “winpack” relies on a listening serial device on the node, each program has a unique TCP port and so listeners must be set up on the node box. The listeners direct the traffic to a device that the node is configured to attach to when it is started.

Here are some examples for BPQ32:

        ID=TCP KISS 8004      
        QUALITY=192             ; Quality factor applied to node broadcasts heard on
                                        ; this port, unless overridden by a locked route
                                        ; entry. Setting to 0 stops node broadcasts
        FRACK=5000                      ; Level 2 timout in milliseconds
        RESPTIME=1000           ; Level 2 delayed ack timer in milliseconds
        RETRIES=5                       ; Level 2 maximum retry value
        MAXFRAME=6                      ; Max outstanding frames (1 thru 7)
        PACLEN=128                      ; Default max packet length for this port.
                                        ; PACLEN is ignored for APRS packets
        L3ONLY=0                        ; 1=No user downlink connects on this port
        DIGIFLAG=1                      ; Digipeat: 0=OFF, 1=ALL, 255=UI Only
        USERS=10                        ; Maximum number of L2 sessions, 0 = no limit
        ID=TCP KISS 8006       
        QUALITY=244             ; Quality factor applied to node broadcasts heard on
                                        ; this port, unless overridden by a locked route
                                        ; entry. Setting to 0 stops node broadcasts
        FRACK=8000                      ; Level 2 timout in milliseconds
        RESPTIME=2000           ; Level 2 delayed ack timer in milliseconds
        RETRIES=10                      ; Level 2 maximum retry value
        MAXFRAME=3                      ; Max outstanding frames (1 thru 7)
        PACLEN=100                      ; Default max packet length for this port.
                                        ; PACLEN is ignored for APRS packets
        L3ONLY=0                        ; 1=No user downlink connects on this port
        DIGIPORT=0                      ; Port on which to send digi'd frames (0 = same port)
        USERS=10                        ; Maximum number of L2 sessions, 0 = no limit

On the NODE system

The serial port listeners on the node box (remote) are run from some start scripts, for example:

For PORT 17 (tcp 8004):


socat -d -d PTY,raw,echo=0,link=/home/pi/port-8004-stay PTY,raw,echo=0,link=/home/pi/port-8004 &

while true

socat -d -d open:/home/pi/port-8004-stay,nonblock,echo=0,raw TCP4-LISTEN:8004,reuseaddr,fork
sleep 1

# End

For PORT 18 (tcp 8006):

socat -d -d PTY,raw,echo=0,link=/home/pi/port-8006-stay PTY,raw,echo=0,link=/home/pi/port-8006 &

sleep 3
while true

socat -d -d open:/home/pi/port-8006-stay,nonblock,echo=0,raw TCP4-LISTEN:8006,reuseaddr,fork
sleep 1

# End

On the Console System

The image has the reciprocal couplings for each of these tcp ports provided as linux services, these can be turned on automatically.

The following ports with self explanatory service names are available:

port-2704 port-8004 port-8005 port-8006 port-8007 port-8009 port-8011

The above services corrleate to the the various different preconfigured dosbox packages that I have set up for different packet radio applications. They all run on different TCP ports so that it is actually possible to interconnect the applications through the node. e.g. connect from Winpack to the node, then from the node connect to the SuperPacket application (if it is also running).

It is not wise to configure too many kiss-TNC ports as it can have a detrimental effect on the node, sometimes causing BPQ32 to lock up intermittently. For the purposes of this document I have limited it to just two: Port 17 (tcp 8004) and 18 (tcp 8006) respectively for “superpacket” and “winpack”.

Serial Port Tunnels (client side) – enable and start syntax:

sudo systemctl enable port-8004
sudo systemctl enable port-8006


sudo service port-8004 start
sudo service port-8006 start

Each port that is started opens a ‘screen’ session for debugging. Each screen session is easily identifiable using “screen -r”

pi@console:~ $ screen -r
There are several suitable screens on:
	5915.Port8004	(07/23/2022 11:16:56 AM)	(Detached)
	5093.Port8006	(07/23/2022 11:08:14 AM)	(Detached)

To view the console's output:

screen -r Port8006 

CTRL-A then D will detatch the console.


Winpack is configured to use DOS BPQ as the communications layer, and utilizes the KISS interface to talk to my remote node. The node’s “socat” serial port is listening on TCP port 8006, using the socat setup described above. This allows the DOSBOX instance to communicate with the node that is on a remote host. The nodes talk to each other via NETROM, the example port setup shown earlier in the document demonstrates that NETROM is enabled and is sending as many nodes as possible on that port. When successfully linked, the Winpack terminal should show a lot of NETROM activity from broadcasts.

The schametic is like this:

     LinBPQ Node -- [Kiss Port 17] -- [Serial Socat Listener Port 8006] <-network-> [Remote Serial Socat Connector] <—-> [DOSBOX-Staging] <—-> [DOS BPQCODE.DLL] <--> [Windows 3.11] <--> [Winpack 6.80]

To configure your own callsign you must edit the following file:


When the ‘winpack’ script is run it will launch DOSBOX and run the BPQCFG.EXE automatically before auto-booting Windows, this converts the configuration TXT into binary for the BPQCODE to use. Winpack is preconfigured to use the resident BPQ node.

Winpack’s own callsign configuration is pretty straight forward and self explanatory.

Superpacket, on the other hand, is a complex RTFM situation, only for those with the edge!

Apps confirmed and preconfigured to work:

  • Paket 6.1 (paket)
  • Baycom (baycom)
  • Winpack 6.80 (winpack)
  • SuperPacket 9.2 (sp)
  • New Packet Generation 2.0 (npg)
  • TST Host (tsthost)
  • BPQ 4.09 (DOS)
  • TheDraw has been included to provide access for text drawing.

Take a look in /home/pi/.config/dosbox for the various config files for the applications. Note that each application requires a unique BPQ KISS port to be configured, with the exception of Paket, which requires a TNC emulator port to be configured. For KISS, see the Ports examples above.

Example TNCPORT for Paket (BPQ32 configuration).


Some applications dependant on BPQCODE in DOS that have been tested and known to fail:

  • EasyTERM PMS (DOS based frontend for BPQ from circa 1994, not to be confused with UZ7HO software)