Skip to content

Network SDR sharing

AryaOS can serve an onboard SDR raw over the network so a remote operator can tune and demodulate it from a desktop client (SDR++, SDRangel, GQRX, SDR#, dump1090, …) instead of decoding it on the box. A dongle can only do one job at a time, so sharing a dongle stops its decoder first.

Raw SDR sharing is unauthenticated — opt-in only

Both servers below give any client that can reach the port full control of the dongle (tuning + raw IQ). They are off by default, and the firewall does not open their ports on any zone. Enable a share only on a trusted or VPN network — open the firewall service deliberately, or bind the server to your VPN address (AOS_RTLTCP_BIND / AOS_SOAPY_BIND / AOS_SPYSERVER_BIND). Turn it back off when you're done.

Servers

Server Devices Client connects as Port
rtl_tcp RTL-SDR only (per dongle) rtl_tcp host:port (SDR#, GQRX, dump1090…) 1234 + index
SoapyRemote any SoapySDR device (RTL / LimeSDR / Airspy / HackRF) driver=remote,remote=<host> (SDR++, SDRangel) 55132
SpyServer RTL-SDR (per dongle) spyserver://<host>:<port> (SDR#, SDRangel, SDR++) 5555 + index

SpyServer is an optional proprietary component

The Airspy spyserver binary is not in Debian; AryaOS fetches it at build time from airspy.com. If the builder was offline the mode is unavailable and aryaos-sdr share N spyserver reports so (check share-status"spyserver_available"). SpyServer streams a compressed, decimated slice — lighter on the network than rtl_tcp's raw IQ, and it never advertises the box in the public SpyServer directory (list_in_directory = 0).

Sharing a dongle

aryaos-sdr list                         # find the dongle index
sudo aryaos-sdr share 0 rtltcp          # RTL-SDR 0 over rtl_tcp on :1234
sudo aryaos-sdr share 0 soapy           # all SoapySDR devices over SoapyRemote :55132
sudo aryaos-sdr share 0 spyserver       # RTL-SDR 0 over SpyServer on :5555
sudo aryaos-sdr share 0 off             # stop sharing (then re-apply a role to decode)
aryaos-sdr share-status                 # JSON: which share servers are running

Resume normal decoding after sharing with sudo aryaos-role set <role>.

Opening access (deliberately)

The share ports are closed by default. To reach a share, either bind to the VPN:

# rtl_tcp bound to the Tailscale address only:
sudo systemctl edit aryaos-rtltcp@0     # add: [Service]\nEnvironment=AOS_RTLTCP_BIND=100.x.y.z

…or open the firewall service on a trusted zone (the definitions ship but are attached to no zone):

sudo firewall-cmd --zone=public --add-service=aryaos-rtltcp        # or aryaos-soapyremote / aryaos-spyserver
# make permanent only if you really want it always-on:
sudo firewall-cmd --permanent --zone=public --add-service=aryaos-rtltcp

See also