Dire Wolf turns a Linux computer or Raspberry Pi into a software-based packet radio TNC. It can decode APRS packets, transmit position beacons, operate as an APRS Internet Gateway, and provide a network connection for applications such as Xastir, YAAC, APRSISCE/32, and PinPoint APRS.
The software is powerful, but its configuration file can look confusing when you first open it. This guide explains the most important Dire Wolf settings line by line and shows how they work together.
The examples focus on a Raspberry Pi APRS iGate using a USB sound interface or All-In-One Cable, commonly called an AIOC.
Where Is the Dire Wolf Configuration File?
Dire Wolf usually reads a file named:
direwolf.conf
Its location depends on how you installed and started Dire Wolf. Common locations include:
~/direwolf.conf
/etc/direwolf.conf
/etc/direwolf/direwolf.conf
You can also tell Dire Wolf which configuration file to use:
direwolf -c /etc/direwolf.conf
Before editing the file, create a backup:
sudo cp /etc/direwolf.conf /etc/direwolf.conf.backup
Lines beginning with a number sign are comments:
# This is a comment
Dire Wolf ignores comments. They are useful for documenting your settings.
Example Dire Wolf APRS Configuration
The following example creates a receive-and-transmit APRS station with optional APRS-IS iGate support:
ADEVICE plughw:CARD=AllInOneCable,0
ACHANNELS 1
ARATE 48000
CHANNEL 0
MYCALL NI3N-10
MODEM 1200
PTT /dev/ptt-aioc
AGWPORT 8000
KISSPORT 8001
IGSERVER noam.aprs2.net
IGLOGIN NI3N-10 12345
PBEACON delay=1 every=30 overlay=S symbol="R&" lat=39.8721 long=-79.7390 power=5 height=20 gain=3 comment="NI3N Raspberry Pi APRS Station"
IGBEACON delay=1 every=60 lat=39.8721 long=-79.7390 comment="NI3N APRS Internet Gateway"
Do not copy this configuration without changing the callsign, location, APRS-IS passcode, audio device, and PTT settings.
Now let us examine every line.
Selecting the Audio Device
ADEVICE plughw:CARD=AllInOneCable,0
The ADEVICE line tells Dire Wolf which Linux audio device to use.
In this example:
plughwasks ALSA to handle audio format conversion when necessary.CARD=AllInOneCableidentifies the USB sound device by name.0selects device zero on that sound card.
Using the device name is usually more reliable than using a numbered device such as plughw:1,0. Linux can change card numbers after a restart or when you connect another USB audio device.
Use this command to list playback devices:
aplay -l
Use this command to list recording devices:
arecord -l
You might see output similar to this:
card 2: AllInOneCable [All-In-One-Cable], device 0: USB Audio
You could then use:
ADEVICE plughw:2,0
However, the named form remains more dependable:
ADEVICE plughw:CARD=AllInOneCable,0
If the interface uses separate capture and playback devices, Dire Wolf also supports two device names:
ADEVICE plughw:CARD=DeviceName,0 plughw:CARD=DeviceName,0
The first device handles received audio. The second handles transmitted audio.
Setting the Number of Audio Channels
ACHANNELS 1
ACHANNELS defines the number of audio channels.
Use:
ACHANNELS 1
for a mono interface or a single radio.
Use:
ACHANNELS 2
when a stereo sound card carries two independent radio channels.
Most basic APRS iGate installations use one radio and one audio channel, so ACHANNELS 1 is appropriate.
This setting does not refer to the radio frequency. It refers to the number of audio streams that Dire Wolf processes.
Setting the Audio Sample Rate
ARATE 48000
ARATE sets the audio sampling rate in samples per second.
A value of 48,000 works well with most modern USB audio interfaces:
ARATE 48000
Some devices use 44,100 samples per second:
ARATE 44100
Use a rate supported by your sound interface. ALSA may perform conversion when you use plughw, but matching the device’s native rate can reduce complications.
For standard 1200-baud APRS, a 48 kHz sample rate is a common choice.
Selecting the Dire Wolf Channel
CHANNEL 0
CHANNEL 0 tells Dire Wolf that the settings following this line apply to its first radio channel.
Dire Wolf begins numbering channels at zero:
CHANNEL 0is the first channel.CHANNEL 1is the second channel.
A single-radio configuration normally uses only:
CHANNEL 0
When using two radios, you can create separate sections:
CHANNEL 0
MYCALL NI3N-10
MODEM 1200
CHANNEL 1
MYCALL NI3N-11
MODEM 9600
Each channel can have its own callsign, modem mode, PTT control, and beacon settings.
Setting Your Callsign
MYCALL NI3N-10
MYCALL assigns your amateur radio callsign and SSID to the selected channel.
The SSID is the number following the hyphen. It identifies a specific station or device operating under your callsign.
Examples include:
MYCALL NI3N
MYCALL NI3N-1
MYCALL NI3N-10
Common APRS conventions include:
-7for handheld radios-9for mobile stations-10for iGates-15for additional stations
These are conventions, not strict technical requirements.
Every station transmitting over amateur radio must use a valid callsign. Do not leave the sample callsign from someone else’s configuration.
If you use multiple Dire Wolf channels, assign MYCALL under each CHANNEL section.
Selecting the Packet Modem
MODEM 1200
MODEM 1200 selects 1200-baud AFSK packet.
This is the standard mode used for APRS on 144.390 MHz in North America.
The two primary audio tones are:
- 1200 Hz
- 2200 Hz
Dire Wolf detects these tones in received audio and converts them into packet data.
A basic APRS station should use:
MODEM 1200
Do not confuse the modem speed with the sound card sample rate. MODEM 1200 describes the packet data rate. ARATE 48000 describes how frequently the computer samples the audio.
Dire Wolf supports additional modem types and speeds, but standard VHF APRS normally uses 1200 baud.
Configuring Push-to-Talk Control
PTT /dev/ptt-aioc
The PTT setting tells Dire Wolf how to key the transmitter.
This example uses a device created for an AIOC interface:
PTT /dev/ptt-aioc
Your actual device path may differ. Never assume that this path exists on your system.
Traditional USB serial interfaces often use RTS or DTR:
PTT /dev/ttyUSB0 RTS
or:
PTT /dev/ttyUSB0 DTR
Dire Wolf can also control PTT through GPIO or supported CM108-family USB audio interfaces. The correct method depends on your cable and radio interface.
Check the available devices:
ls -l /dev/ttyUSB*
ls -l /dev/ttyACM*
If you use a persistent symbolic link such as /dev/ptt-aioc, verify it:
ls -l /dev/ptt-aioc
Test PTT carefully before connecting the radio to an antenna. A bad PTT configuration can leave the transmitter keyed continuously.
A receive-only iGate does not need PTT. In that case, leave the PTT line disabled:
# PTT /dev/ptt-aioc
Enabling the AGWPE Network Port
AGWPORT 8000
AGWPORT enables Dire Wolf’s AGWPE-compatible network interface on TCP port 8000.
APRS programs can connect to Dire Wolf through this port and use it as a network TNC.
Common client applications may expect:
Host: 127.0.0.1
Port: 8000
Use 127.0.0.1 when the client runs on the same computer as Dire Wolf.
If the client runs on another computer, use the Raspberry Pi’s LAN address:
Host: 192.168.1.140
Port: 8000
Do not expose this port directly to the Internet. Limit access with your firewall.
Enabling the KISS Network Port
KISSPORT 8001
KISSPORT enables the KISS TNC interface on TCP port 8001.
KISS stands for Keep It Simple, Stupid. It is a standard protocol used by packet-radio applications to exchange frames with a TNC.
A client using KISS over TCP would normally connect to:
Host: 127.0.0.1
Port: 8001
You do not need both AGWPE and KISS unless your applications require them. Leaving both enabled provides flexibility and normally causes no problem on a trusted local network.
Selecting an APRS-IS Server
IGSERVER noam.aprs2.net
IGSERVER identifies the APRS Internet System server that Dire Wolf will contact.
For North America, a common rotating server address is:
IGSERVER noam.aprs2.net
A rotating server name directs the connection to an available APRS-IS server in the region.
Other regional server groups may be more appropriate outside North America.
Dire Wolf receives APRS-IS data through this connection and can upload packets heard over radio. Whether it transmits Internet data back over RF depends on your iGate configuration.
Logging In to APRS-IS
IGLOGIN NI3N-10 12345
IGLOGIN supplies the APRS-IS login callsign and passcode.
The format is:
IGLOGIN CALLSIGN-SSID PASSCODE
For example:
IGLOGIN NI3N-10 12345
Replace 12345 with the APRS-IS passcode generated for your callsign.
The callsign should normally match the station identity used by the iGate.
An APRS-IS passcode is not a secure password. It only confirms that the callsign has the expected passcode. Do not treat it as protection for sensitive accounts.
If you do not want APRS-IS connectivity, comment out both lines:
# IGSERVER noam.aprs2.net
# IGLOGIN NI3N-10 12345
Dire Wolf can still decode and display radio packets without an Internet connection.
Creating an RF Position Beacon
PBEACON delay=1 every=30 overlay=S symbol="R&" lat=39.8721 long=-79.7390 power=5 height=20 gain=3 comment="NI3N Raspberry Pi APRS Station"
PBEACON creates a position beacon.
This line contains several options.
delay=1
delay=1
Dire Wolf waits one minute after startup before sending the first beacon.
A short delay gives the sound interface, radio, network, and GPS time to initialize.
every=30
every=30
Dire Wolf sends the beacon every 30 minutes.
For a stationary station, 20 to 30 minutes is usually sufficient. Sending a fixed position every minute wastes airtime and increases channel congestion.
overlay=S
overlay=S
The overlay changes or adds meaning to certain APRS symbols.
Use overlays only when you understand the selected symbol and its APRS definition. An incorrect overlay can cause mapping applications to display the wrong station type.
symbol="R&"
symbol="R&"
The symbol option selects the icon displayed by APRS mapping applications.
APRS symbols consist of a symbol table identifier and a symbol character. Because this syntax can be easy to misread, confirm the result on an APRS map after starting the station.
Choose a symbol that accurately represents the station. Do not label a receive-only station as a digipeater.
lat=39.8721
lat=39.8721
This is the station’s latitude in decimal degrees.
Positive values indicate north. Negative values indicate south.
long=-79.7390
long=-79.7390
This is the station’s longitude in decimal degrees.
Negative values indicate west. Positive values indicate east.
Check the minus sign carefully. Entering 79.7390 instead of -79.7390 would place a Pennsylvania station in the Eastern Hemisphere.
For a home station, consider reducing the published precision if you do not want to advertise its exact location.
power=5
power=5
This reports the transmitter power in watts.
Enter the actual RF output power, not the radio’s maximum advertised power.
height=20
height=20
This reports the antenna height above average terrain.
Do not automatically enter the antenna’s height above the ground. APRS PHG data uses height above average terrain and encodes it according to the APRS specification.
If you do not know the correct value, omit the PHG-related fields rather than publishing misleading coverage information.
gain=3
gain=3
This reports the antenna gain in dB.
Use a realistic value for the antenna. Do not include feed-line gain because feed lines introduce loss.
comment="NI3N Raspberry Pi APRS Station"
comment="NI3N Raspberry Pi APRS Station"
The comment appears with the position report.
Keep it short and useful. Examples include:
comment="Receive-only APRS iGate"
comment="Dire Wolf APRS iGate"
comment="Weather and APRS station"
Do not claim that the station is a digipeater unless digipeating is actually enabled.
Creating an APRS-IS Beacon
IGBEACON delay=1 every=60 lat=39.8721 long=-79.7390 comment="NI3N APRS Internet Gateway"
IGBEACON publishes the station’s position directly to APRS-IS.
Unlike PBEACON, an IGBEACON does not need to occupy the RF channel.
The options work in the same general way:
delay=1sends the first report one minute after startup.every=60sends another report every 60 minutes.latandlongdefine the station location.commentdescribes the station.
For a receive-only iGate, an APRS-IS beacon is often the better way to publish the station’s position. It identifies the iGate without transmitting an unnecessary RF beacon.
Receive-Only iGate Configuration
A receive-only iGate listens for APRS packets and forwards them to APRS-IS. It never transmits.
A minimal configuration might look like this:
ADEVICE plughw:CARD=AllInOneCable,0
ACHANNELS 1
ARATE 48000
CHANNEL 0
MYCALL NI3N-10
MODEM 1200
IGSERVER noam.aprs2.net
IGLOGIN NI3N-10 12345
IGBEACON delay=1 every=60 lat=39.8721 long=-79.7390 comment="NI3N Receive-Only APRS iGate"
Notice what is missing:
- No active
PTTline - No RF
PBEACON - No digipeater command
- No Internet-to-RF gating command
This setup can receive APRS audio and upload decoded packets without keying the radio.
Digipeater Configuration
Dire Wolf can repeat selected APRS packets over RF. This function requires careful planning because unnecessary digipeaters can create packet collisions and duplicate traffic.
A typical digipeater rule resembles:
DIGIPEAT 0 0 ^WIDE[1-7]-[1-7]$ ^WIDE[1-7]-[1-7]$
The fields identify:
- The source radio channel
- The destination radio channel
- The callsign-pattern rule
- The packet path-pattern rule
Do not enable a digipeater simply because Dire Wolf supports it.
Before enabling one:
- Monitor local APRS activity.
- Check coverage from existing digipeaters.
- Coordinate with local APRS operators.
- Use appropriate duplicate suppression.
- Confirm that the station improves coverage.
- Avoid placing another digipeater in an already congested area.
Leave the command commented out when you only need an iGate:
# DIGIPEAT 0 0 ...
Internet-to-RF Gating
A bidirectional iGate can transmit selected APRS-IS traffic over RF. This is different from uploading packets heard on the radio.
A configuration may include a command such as:
IGTXVIA 0 WIDE1-1
This tells Dire Wolf which RF channel and path to use for approved Internet-to-RF packets.
Do not enable this line without understanding Dire Wolf’s gating rules, APRS network practices, and local RF conditions. A poorly configured bidirectional iGate can inject excessive traffic into the local APRS channel.
For a receive-only iGate, leave it disabled:
# IGTXVIA 0 WIDE1-1
Setting Transmit Timing
Some radios require a short delay between keying PTT and receiving audio.
Dire Wolf provides timing controls such as:
TXDELAY 30
TXTAIL 10
TXDELAY 30
TXDELAY adds a delay after Dire Wolf keys the transmitter and before it sends packet data.
The value is measured in units defined by the Dire Wolf configuration syntax, traditionally 10-millisecond intervals for this setting. A value of 30 therefore represents approximately 300 milliseconds.
This delay gives the transmitter time to reach full output.
Too little delay can cut off the beginning of packets. Too much delay wastes airtime.
TXTAIL 10
TXTAIL controls how long Dire Wolf continues sending the ending flag pattern before releasing PTT.
A small tail may help some radios and interfaces complete the packet cleanly. Excessive tail time wastes channel capacity.
Start with conservative values and adjust them based on actual packet decoding.
Testing the Configuration
Start Dire Wolf manually before creating a system service:
direwolf -c /etc/direwolf.conf
Watch the terminal output.
A successful startup should show:
- The selected audio device
- The sample rate
- The configured channel
- The modem type
- The station callsign
- The APRS-IS connection
- Received and decoded packets
Dire Wolf displays received packet information as it decodes traffic.
If it reports that it cannot open the audio device, verify the ALSA device name:
arecord -l
aplay -l
If it reports that it cannot open the PTT device, check the device path and permissions:
ls -l /dev/ptt-aioc
If APRS-IS rejects the login, check:
- The callsign
- The SSID
- The APRS-IS passcode
- Internet connectivity
- The
IGSERVERaddress
Checking Audio Levels
Correct audio levels matter more than most configuration changes.
If the receive level is too low, Dire Wolf may hear noise but fail to decode packets. If it is too high, clipping and distortion can destroy the AFSK tones.
Run Dire Wolf with audio-level reporting enabled:
direwolf -a 100 -c /etc/direwolf.conf
Dire Wolf will periodically display audio statistics.
You can adjust the capture level with:
alsamixer
Select the USB audio interface, switch to the capture controls, and adjust the input level.
Aim for clean decoding across both strong and weak stations. Do not maximize the control automatically. More audio does not always produce better decoding.
Common Configuration Mistakes
Wrong audio-device number
A configuration using this line may stop working after a restart:
ADEVICE plughw:1,0
Use the card name when possible:
ADEVICE plughw:CARD=AllInOneCable,0
Incorrect longitude sign
A western longitude needs a negative value:
long=-79.7390
Callsign mismatch
Keep the callsign consistent across:
MYCALLIGLOGIN- Beacon comments
- APRS-IS registration and passcode
Invalid APRS-IS passcode
Do not use your website, email, or radio-club password. APRS-IS uses a callsign-specific numerical passcode.
Enabling PTT on a receive-only iGate
A receive-only station does not need PTT. Comment out the line to prevent accidental transmissions.
Excessive beaconing
A stationary station does not need to transmit its position every minute. Use a reasonable interval and consider sending the station position only through APRS-IS.
Enabling digipeating without coordination
More digipeaters do not always improve APRS. They can increase packet collisions and make the network less reliable.
Exposing network ports to the Internet
Do not publicly expose AGWPE port 8000 or KISS port 8001. Restrict them to the local computer or trusted LAN.
A Clean Receive-Only Configuration
The following configuration provides a practical starting point for a Raspberry Pi receive-only iGate:
# USB audio interface
ADEVICE plughw:CARD=AllInOneCable,0
ACHANNELS 1
ARATE 48000
# APRS radio channel
CHANNEL 0
MYCALL NI3N-10
MODEM 1200
# Local application interfaces
AGWPORT 8000
KISSPORT 8001
# APRS-IS connection
IGSERVER noam.aprs2.net
IGLOGIN NI3N-10 12345
# Publish the iGate position through APRS-IS
IGBEACON delay=1 every=60 lat=39.8721 long=-79.7390 comment="NI3N Receive-Only APRS iGate"
# Transmit functions intentionally disabled
# PTT /dev/ptt-aioc
# PBEACON ...
# DIGIPEAT ...
# IGTXVIA ...
Replace the callsign, passcode, coordinates, and audio device before using it.
Final Thoughts
A Dire Wolf configuration becomes easier to understand when you divide it into five sections:
- Audio interface settings
- Radio channel and modem settings
- Push-to-talk control
- Local network interfaces
- APRS-IS and beacon settings
Start with a receive-only configuration. Confirm that Dire Wolf hears clean audio, decodes packets, and uploads them to APRS-IS. Add transmit functions only after the receive side works reliably.
Change one setting at a time and restart Dire Wolf after each change. This approach makes problems easier to identify and prevents several configuration errors from hiding each other.
With the correct sound device, audio level, callsign, and APRS-IS credentials, a Raspberry Pi running Dire Wolf can serve as a reliable APRS iGate without requiring a traditional hardware TNC.