User Tools

Site Tools



29 July 2023, G8PZT

NOTE: This is a “quick and dirty” howto. Please feel free to refine it, add pictures, whatever..

QTTermTCP is a very popular “terminal” program for Packet Radio, written by G8BPQ. It can be used with BPQ node, as well as with other Packet programs, including XRouter. This document focuses on how to set up XRouter so that it can be used by QTTermTCP. It assumes you already have working copies of both QTTermTCP, and XRouter (i.e. XRPi or XRLin) version 502n or later.

STEP 1: Ensure that XRouter has an IPADDRESS

For security reasons, XRouter disables *all* TCP/IP functionality, even on localhost, by default. This restriction is lifted if you give XRouter an IP address, using the global IPADDRESS directive in XROUTER.CFG.

It doesn't matter what IP address you specify here. Any valid dotted quad will do because, unless you have set up an ethernet INTERFACE and PORT, XRouter will always use the Linux kernel stack for local operations.

(If you have a 44-net address, that's a good one to use, because it will allow you to use TCP/IP over radio.)


STEP 2: Ensure that XRouter has either TELNETPORT and/or RLOGINPORT

QTTermTCP requires a TCP “port” number to connect to (note this is a TCP “service number” not a PORT on XRouter).

Connections to TELNETPORT receive a more verbose welcome text than those to the RLOGINPORT, but QTTermTCP will happily use either.

If you use RLOGINPORT, your session will have full sysop privileges.

If you use TELNETPORT your session will NOT have sysop privileges (you can however escalate privileges using the “@” command.

The “standard” numbers for Telnet and RLogin are 23 and 513 respectively. Linux will not let XRouter open those ports unless XRouter is run from a root account, or is given the “capability” by the following command:

sudo setcap cap_net_bind_service=pe xrpi

(substitute xrlin for xrpi if you are on x86)

You can avoid this by setting the port numbers to something above 1024.

Example: TELNETPORT=6023

(See for more info.)

If you have modified XROUTER.CFG, don't forget to save it.

STEP 3: Setup a callsign and PASSWORD in XRouter

Non-guest TCP connections to XRouter require a password.

Sysop passwords reside in PASSWORD.SYS. Ordinary “user” passwords reside in USERPASS.SYS (note that all XRouter configuration filenames are in UPPERCASE to make their purpose obvious).

If you are using RLOGINPORT or the “@” command, XRouter checks PASSWORD.SYS. If you are using TELNETPORT, XRouter checks USERPASS.SYS instead.

The format of entries in both files is the same:

<callsign> <password>

The callsign must not include an SSID, and neither field can contain spaces. A suitable example would be like this:

g8pzt thisismypassword

You may set up the same password in both files, but it is good practice to use different ones.

You MUST use a valid callsign, not a username such as “root” or “admin”, which will always be rejected.

STEP 4: Allow Incoming Connects to QTTermTCP (OPTIONAL)

Skip this step if you DON'T wish to allow incoming connections.

QTTermTCP can be configured to allow incoming connections (usually on TCP port 8015), but you must also explicitly tell XRouter where to route those connections. This is done using the APPL (Application) directive in XROUTER.CFG.

The simplest form would be:

	# For incoming connections to QTTERMTCP

The above would create a new command called SYSOP, which if invoked would connect via TCP to localhost port 8015, on which QTermTCP should hopefully be listening. Note that you have to ENABLE this facility in QTTermTCP - see step 9 below. The application number is not important; you could just as easily make it application number 7 if you wished. Likewise the application name doesn't have to be SYSOP.

If you want QTTermTCP to accept DIRECT connections from AX25, you have to specify a destination callsign for those connections. That is done by adding APPLCALL as follows:

	# For incoming connections to QTTERMTCP

To accept direct connections from NetRom, you would need to add APPLALIAS and APPLQUAL, but that is NOT recommended for casual use because it would clutter up the nodes tables with transient nodes, which cause excess routing information traffic as they come and go.

If you have modified XROUTER.CFG, don't forget to save it.

STEP 5: Start (or Restart) XRouter

A restart is required only if you have made changes to XROUTER.CFG.

STEP 6: Start QTTermTCP if Not Already Running

It should be obvious, but someone will moan if I don't spell it out.

STEP 7: Set Up a Host in QTTermTCP

Click Setup → Hosts → New Host and fill in the hostname or IP address of XRouter. If you are running QTTermTCP on the same machine as XRouter, enter “” or “localhost” here. If XRouter is on a different machine, enter that machine's hostname or IP address instead.

Under “Port:” enter the service number you chose for TELNETPORT or RLOGINPORT.

Under “User:” and “Password:” enter the callsign and password chosen in step 3.

Click “save” when you are done.

STEP 8: Connect QTTermTCP to XRouter

Click “Connect” and QTTermTCP will present you with a list of hostnames.

If you have several systems on the same machine they will all rather helpfully be called “localhost”, and you will have to invoke voodoo to choose the correct one!

If you select the correct one, you should hopefully be able to connect. If not, the lower screen may give some clue, for instance “bad password!”.

STEP 9: Enable Incoming Connections To QTTermTCP

Ignore this step if you DON'T wish to allow incoming connections.

In QTTermTCP, click on “Listen”, check the “Enable listen” box, enter the port number chosen in step 4, and a “conenct text” which is sent to incoming connectees.

Click OK and you're all done.

Note: In “Single Window” mode, QTTermTCP will not accept incoming connections while it is connected to XRouter. However in “tabbed” or “MDI” mode it will.

Monitor Traffic

XRouter will send monitor traffic to QTTermTCP, but it will be in XRouter format, not BPQ format, i.e. it will look like this:

	 *** 14:40:51 port 4 rcvd:
	AX25: G8PZT>G8PZT-1 <RR R R4>

	 *** 14:41:00 port 4 rcvd:
	AX25: G8PZT>G8PZT-1 <I C R4 S4> ilen=20 pid=207 NET/ROM
	  NTRM: G8PZT-8 to G8PZT-9 ttl=25 cct=0100 <DISC REQ> 

	 *** 14:41:00 port 4 sent:
	AX25: G8PZT-1>G8PZT <I C R5 S4> ilen=20 pid=207 NET/ROM
	  NTRM: G8PZT-9 to G8PZT-8 ttl=25 cct=D208 <DISC ACK> 

The displayed port numbers are XRouter's PORT numbers not QTTermTCP's.

If your XRouter ports are numbered consecutively from 1, they will agree with the port mumbers under QTTermTCP's “Monitor” tab. If however XRouter's port numbers don't start at 1, or have gaps, QTTermTcp's “Monitor” tab will list consecutively numbered ports, with the XRouter port numbers in brackets like this:

	Port 1 (2) "Ethernet LAN"
	Port 2 (4) "Link to KIDDER"
	Port 3 (5) "Test Port 1"
	and so on...

Corrupted Display

Older versions of QTTermTCP (e.g. 0.0.58) have a bug which loses some data packets, causing a corrupted display. This was reported to G8BPQ and the fixed version should by now be available.

And Finally:

Please report any errors, omissions or compatibilty issues to

or to the xrouter mailing list (where you will also find the latest versions of XRouter) at

XRouter documentation can be found at

packet/xrouter-qttermtcp.txt · Last modified: 2023/07/29 14:49 by m0lte