Orange Pi Zero 2W + Airspy Driver & SpyServer Setup + Tailscale (Headless Armbian Minimal Community)
This guide walks you through setting up an Orange Pi Zero 2W to run SpyServer in headless mode with an Airspy Discovery HF+ using Armbian Minimal (Bookworm) and remote access via Tailscale. It's designed for a lightweight, low-power, reliable SDR streaming setup.
- Orange Pi Zero 2W
- Airspy Discovery HF+
- Antenna
- microSD card (16GB or larger)
- Card reader
- Wi-Fi credentials
- Power supply for Orange Pi Zero 2W (5V, 2A)
- Another device (Mac/PC) on the same network and with and SDR software installed (e.g. SDR++) for the setup and testing
- Download the Minimal / IOT version from
👉 https://www.armbian.com/orange-pi-zero-2w - Flash to SD card using Balena Etcher
Hint: for mac users, if you do not want to install additional softwares via the terminal, use linux VM via UTM
Mount the SD Card and copy the below contents to the following file:
Path: /root/.not_logged_in_yet
Contents:
#/root/.not_logged_in_yet
# Network
PRESET_NET_CHANGE_DEFAULTS="1"
PRESET_NET_ETHERNET_ENABLED=0
PRESET_NET_WIFI_ENABLED=1
PRESET_NET_WIFI_SSID="YOUR_WIFI_SSID"
PRESET_NET_WIFI_KEY="YOUR_WIFI_PASSWORD"
PRESET_NET_WIFI_COUNTRYCODE="DE"
PRESET_CONNECT_WIRELESS="n"
PRESET_NET_USE_STATIC="0"
# Locale & Timezone
SET_LANG_BASED_ON_LOCATION="n"
PRESET_LOCALE="en_US.UTF-8"
PRESET_TIMEZONE="Europe/Berlin"
# Root user
PRESET_ROOT_PASSWORD="orangepizero2w"
# Normal user
PRESET_USER_NAME="sdradmin"
PRESET_USER_PASSWORD="orangepizero2w"
PRESET_DEFAULT_REALNAME="Your Name"
PRESET_USER_SHELL="bash"
Enter your values within the ""
More setup options can be found here: https://docs.armbian.com/User-Guide_Autoconfig/
💾 Save and safely eject the SD card.
- Insert the SD card
- Plug in power
- Wait about 60–90 seconds for first boot
From another device on the same network:
arp -a
If unsure, flush ARP and ping the network:
sudo arp -a -d
ping 192.168.0.255
arp -a
Look for a new IP with orangepizero2w host name (e.g. 192.168.0.xxx)
- SSH In
ssh sdradmin@discovered-ip e.g. 192.168.0.xxx
Replace 'discovered-ip e.g. 192.168.0.xxx' with the ip of the orange pi
Password:
orangepizero2w
✅ Tested On: • Orange Pi Zero 2W • Armbian Minimal (Bookworm) • Airspy HF+
🔧 Setup Instructions
- Update & Install Dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install -y git cmake libusb-1.0-0-dev build-essential wget
- Build & Install Airspy Discovery HF+ Driver
cd ~
git clone https://github.com/airspy/airspyhf.git
cd airspyhf
mkdir build && cd build
cmake -DLIBUSB_INCLUDE_DIR=/usr/include/libusb-1.0 ..
make
sudo make install
sudo ldconfig
- Set udev Rules for USB Access
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="800c", MODE:="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/52-airspyhf.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo usermod -aG plugdev $USER
newgrp plugdev
- Test the Driver
airspyhf_info
✅ You should see serial number, firmware, and supported sample rates.
- Download & Extract SpyServer
cd ~
wget https://www.airspy.com/downloads/spyserver-arm64.tgz
tar -xvzf spyserver-arm64.tgz
This provides: • spyserver • spyserver.config (default config is sufficient)
- Run SpyServer
./spyserver spyserver.config
✅ You should see output like:
Listening for connections on 0.0.0.0:5555 Connected to Airspy HF+ device
- Connect from SDR++
On another device running SDR++: • Source: SpyServer • Host: 192.168.0.xxx (your Orange Pi’s IP) • Port: 5555 • Username/password: leave blank
⛓️ 8. Auto-start SpyServer on Boot (systemd)
Create a systemd service file:
sudo nano /etc/systemd/system/spyserver.service
Paste:
[Unit]
Description=SpyServer
After=network.target
[Service]
Type=simple
ExecStartPre=/bin/sleep 5
User=sdradmin
ExecStart=/home/sdradmin/spyserver /home/sdradmin/spyserver.config
Restart=on-failure
[Install]
WantedBy=multi-user.target
Then enable it:
sudo systemctl daemon-reload
sudo systemctl enable spyserver
sudo systemctl start spyserver
✅ SpyServer now starts automatically after every reboot.
Source: SpyServer
Host: 192.168.0.xxx (your Orange Pi’s IP)
Port: 5555
Username/password: leave blank
- Install:
curl -fsSL https://tailscale.com/install.sh | sh
- Start and authenticate:
sudo tailscale up
It will give you a link — open it in a browser, sign in with Google/GitHub/etc. Also install Tailscale on our end device with the SDR software installed
- Get your Pi’s private Tailscale IP:
tailscale ip -4
✅ Now You Can:
• Open SDR++ on any other device with Tailscale installed
• Connect directly to your Pi using that 100.x.x.x IP and port 5555
🌿 Enable Wi-Fi Power Saving
🔧 1. Enable Power Save (Live)
sudo iw dev wlan0 set power_save on
Test latency (optional):
ping -i 0.2 8.8.8.8
💾 2. Make it Persistent via systemd
Create a systemd service:
sudo nano /etc/systemd/system/wifi-powersave.service
Paste:
[Unit]
Description=Enable Wi-Fi power save mode
After=network.target
[Service]
ExecStart=/sbin/iw dev wlan0 set power_save on
RemainAfterExit=true
[Install]
WantedBy=multi-user.target
Enable it:
sudo systemctl daemon-reload
sudo systemctl enable wifi-powersave
✅ This ensures Wi-Fi power saving is applied on every boot.
⸻
Disable Bluetooth & HDMI (optional, to reduce interference or power usage)
Disable Bluetooth:
echo "blacklist btbcm" | sudo tee -a /etc/modprobe.d/disable-bluetooth.conf
echo "blacklist hci_uart" | sudo tee -a /etc/modprobe.d/disable-bluetooth.conf
sudo systemctl disable --now bluetooth
Disable HDMI:
echo "hdmi_blanking=2" | sudo tee -a /boot/armbianEnv.txt
⸻
Disable Logging & Unnecessary Services (optional, to reduce SD card wear)
Disable rsyslog:
sudo systemctl stop rsyslog
sudo systemctl disable rsyslog
⸻
Disable other services:
sudo systemctl disable --now man-db.timer
sudo systemctl disable --now apt-daily.timer apt-daily-upgrade.timer
sudo systemctl mask systemd-journald.service
⸻
Disable Cron Daemon (optional)
sudo systemctl disable --now cron
⸻
Reboot to Apply All Changes
Remove Build Tools
sudo apt remove --purge -y git cmake libusb-1.0-0-dev build-essential
sudo apt autoremove -y
⸻
Uninstall Airspy Driver + SpyServer + Tailscale
sudo rm /usr/local/lib/libairspyhf* /usr/local/bin/airspyhf*
sudo rm /etc/udev/rules.d/52-airspyhf.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
rm -rf ~/airspyhf ~/spyserver ~/spyserver-arm64.tgz ~/spyserver.config
sudo tailscale down
sudo systemctl disable --now tailscaled
sudo apt remove --purge tailscale -y
sudo apt autoremove -y
You now have a compact, headless SpyServer SDR setup running on the Orange Pi Zero 2W — perfect for remote HF monitoring, low-power SDR stations, or portable deployments.