A simple, user-friendly script to manage Bluetooth TNC connections for AX.25 packet radio on Linux.
- π Auto-discovery - Automatically finds and connects to compatible TNCs
- π‘ Multi-TNC support - Run multiple TNCs simultaneously with different RFCOMM devices
- π¨ Clean interface - Color-coded output with clear progress indicators
- βοΈ Zero configuration - Works out of the box with sensible defaults
- π§ Flexible options - CLI parameters for non-interactive operation
- β Robust pairing - Proper Bluetooth pairing sequence with retry logic
- BTECH UV-PRO
- Radtel RT-660
- VGC VR-N76
- VERO VR-N7600 (possibly compatible, untested)
sudo apt update
sudo apt install -y ax25-tools ax25-apps bluetooth# Download the script
curl -LO https://raw.githubusercontent.com/8ff/btkiss/main/btkiss.sh
# Make it executable
chmod +x btkiss.sh-
Enable pairing and TNC on your radio:
- Menu β Pairing β Press OK
- Menu β General Settings β KISS TNC β Enable
-
Auto-connect:
sudo ./btkiss.sh --auto-connect
-
Enter your callsign when prompted (e.g.,
N0CALL-1)
That's it! Your AX.25 interface is ready.
# Scan for devices
sudo ./btkiss.sh --list-devices
# Auto-connect to first compatible device
sudo ./btkiss.sh --auto-connect
# Connect to specific device
sudo ./btkiss.sh --connect <MAC_ADDRESS>
# Stop and disconnect
sudo ./btkiss.sh --halt
# Show help
sudo ./btkiss.sh --help--callsign <CALL> # Specify callsign (e.g., N0CALL-1)
--rfcomm <NUM> # Use /dev/rfcommNUM (default: 0)
--no-kiss # Skip KISS attach (Bluetooth/RFCOMM only)# Auto-connect with callsign
sudo ./btkiss.sh --auto-connect --callsign N0CALL-1
# Connect to specific MAC address
sudo ./btkiss.sh --connect 38:D2:00:01:11:FE
# Use second RFCOMM device (for multiple TNCs)
sudo ./btkiss.sh --connect 38:D2:00:01:11:FE --rfcomm 1
# Bluetooth only (no KISS attach)
sudo ./btkiss.sh --connect 38:D2:00:01:11:FE --no-kiss
# Stop second TNC
sudo ./btkiss.sh --halt --rfcomm 1You can run multiple TNCs simultaneously by using different RFCOMM devices:
# First TNC on rfcomm0 β creates ax0
sudo ./btkiss.sh --connect 38:D2:00:01:11:FE --rfcomm 0 --callsign N0CALL-1
# Second TNC on rfcomm1 β creates ax1
sudo ./btkiss.sh --connect 38:D2:00:01:22:FF --rfcomm 1 --callsign N0CALL-2Each RFCOMM device creates its own AX.25 interface (ax0, ax1, ax2, etc.)
- Menu β General Settings β KISS TNC β Enable
- Save and exit
- Menu β Pairing β Press OK
- Wait for pairing indicator
- Device is discoverable for ~2 minutes
# Monitor packets
sudo axlisten -a -c -t
# Test transmission (from another station)
echo "Hello World" | beacon -s btport -d DEST-0- Ensure radio is powered ON
- Enable pairing mode: Menu β Pairing β Press OK
- Radio must be in pairing mode during initial scan
- Try again:
sudo ./btkiss.sh --list-devices
This means you didn't press OK in pairing mode on the radio:
- Turn radio OFF then ON
- Menu β Pairing β Press OK
- Run script again
Radio needs to be restarted:
- Turn radio OFF then ON
- Menu β Pairing β Press OK
- Run script again
Make sure KISS is enabled on your radio:
- Menu β General Settings β KISS TNC β Enable
Check the output of:
ip link show ax0
cat /proc/net/ax25If interface doesn't exist, try:
sudo ./btkiss.sh --halt
sudo ./btkiss.sh --auto-connect- Cleanup - Removes cached Bluetooth device data
- Scan - Discovers compatible TNCs
- Pair - Trust then pair
- Connect - Establishes RFCOMM serial connection
- Attach - Creates AX.25 network interface with KISS
/etc/ax25/btkiss.conf- Saved MAC address and callsign/etc/ax25/axports- AX.25 port configuration
- Uses Bluetooth Classic (BR/EDR) Serial Port Profile (SPP)
- RFCOMM for serial port emulation
- KISS protocol for TNC communication
- Creates AX.25 network interface (ax0, ax1, etc.)
Happy packet radio operating! π»