Wymagania wstępne

  • Windows 11 z WSL2 i Ubuntu (sprawdź: wsl --version w PowerShell)
  • Podłączony RTL-SDR V4 lub Airspy Mini przez USB
  • Na Windows: zainstalowane sterowniki (RTL-SDR przez Zadig/WinUSB, Airspy automatycznie)

WSLg (Windows Subsystem for Linux GUI) jest wbudowane w Windows 11 i pozwala uruchamiać aplikacje graficzne Linuxa bezpośrednio na pulpicie Windows — bez konfiguracji X11. Wymaga WSL 2.0+.


Przekazanie urządzenia USB do WSL

WSL2 domyślnie nie widzi urządzeń USB. Wymagany jest usbipd-win — narzędzie przekazujące urządzenia USB z Windows do WSL.

W PowerShell jako administrator zainstaluj usbipd-win:

winget install usbipd

Podłącz odbiornik SDR i wylistuj urządzenia, a następnie przekaż urządzenie do WSL (podaj właściwy BUSID):

usbipd list
# Connected:
# BUSID  VID:PID    DEVICE                                                        STATE
# 1-7    0bda:2838  Bulk-In, Interface                                            Not shared
# 1-8    1d50:60a1  AIRSPY                                                        Not shared
# 1-13   26ce:01a2  USB Input Device                                              Not shared
# 7-4    2357:0604  TP-Link Bluetooth 5.4 USB Adapter                             Not shared
# 8-1    046d:c534  USB Input Device                                              Not shared
# 8-4    046d:c52b  Logitech USB Input Device, USB Input Device                   Not shared

usbipd bind --busid 1-7
usbipd attach --wsl --busid 1-7 --auto-attach

usbipd bind --busid 1-8
usbipd attach --wsl --busid 1-8 --auto-attach

Flaga --auto-attach sprawia że usbipd automatycznie ponownie przekazuje urządzenie do WSL przy każdym podłączeniu kabla — nie trzeba nic robić ręcznie po odłączeniu i ponownym podłączeniu odbiornika.

Okno PowerShell z uruchomionym --auto-attach musi pozostać otwarte — proces działa w tle tego terminala. Jeśli chcesz uruchomić go bez widocznego okna, użyj polecenia poniżej. Proces będzie działał w tle aż do restartu Windows

Start-Process usbipd -ArgumentList "attach --wsl --busid 1-7 --auto-attach" -WindowStyle Hidden

Sprawdź w Ubuntu czy urządzenie jest widoczne:

lsusb
# Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
# Bus 001 Device 003: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
# Bus 001 Device 002: ID 1d50:60a1 OpenMoko, Inc. Airspy
# Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Konfiguracja RTL-SDR w Ubuntu

sudo apt update && sudo apt upgrade -y
sudo apt install -y rtl-sdr librtlsdr-dev


# Blacklist sterownika DVB-T — bez tego jądro zajmuje urządzenie przed biblioteką SDR
echo 'blacklist dvb_usb_rtl28xxu blacklist rtl2832 blacklist rtl2830' | sudo tee /etc/modprobe.d/blacklist-rtlsdr.conf
sudo modprobe -r dvb_usb_rtl28xxu rtl2832 rtl2830 2>/dev/null

# Uprawnienia udev, żeby nie uruchamiać z sudo
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE="0666"' | sudo tee /etc/udev/rules.d/20-rtlsdr.rules
sudo udevadm control --reload-rules && sudo udevadm trigger

# Odłącz i podłącz ponownie RTL-SDR.

rtl_test -t
# Found 1 device(s):
#   0:  RTLSDRBlog, Blog V4, SN: 00000001
# 
# Using device 0: Generic RTL2832U OEM
# Found Rafael Micro R828D tuner
# Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
# [R82XX] PLL not locked!
# Sampling at 2048000 S/s.
# No E4000 tuner found, aborting.

Komunikat No E4000 tuner found jest normalny — RTL-SDR V4 używa tunera R828D, nie E4000. Ważne że urządzenie zostało wykryte.

Konfiguracja Airspy Mini w Ubuntu

sudo apt install -y airspy libairspy-dev

# Uprawnienia udev
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="60a1", MODE="0666"'  | sudo tee /etc/udev/rules.d/52-airspy.rules
sudo udevadm control --reload-rules && sudo udevadm trigger

# Odłącz i podłącz ponownie Airspy Mini.

airspy_info
# airspy_lib_version: 1.0.11
# 
# Found AirSpy board 1
# Board ID Number: 0 (AIRSPY)
# Firmware Version: AirSpy MINI v1.0.0-rc10-0-g946184a 2016-09-19
# Part ID Number: 0x6906002B 0x00000030
# Serial Number: 0x260868C82A4D8F9B
# Supported sample rates:
#         6.000000 MSPS
#         3.000000 MSPS
# Close board 1

Instalacja SoapySDR

SoapySDR to warstwa abstrakcji — GNU Radio i Gqrx komunikują się przez nią z każdym urządzeniem jednakowo, bez konieczności pisania osobnego kodu dla RTL-SDR i Airspy.

sudo apt install -y soapysdr-tools soapysdr-module-rtlsdr soapysdr-module-airspy

SoapySDRUtil --find
# Found device 0
#   driver = airspy
#   label = AirSpy One [260868c82a4d8f9b]
#   serial = 260868c82a4d8f9b
# 
# Found device 1
#   default_input = True
#   default_output = False
#   device_id = 0
#   driver = audio
#   label = RDP Source

Instalacja GNU Radio

sudo apt install -y gnuradio gr-osmosdr

gnuradio-companion

Okno GNU Radio Companion pojawi się na pulpicie Windows przez WSLg.

Fix błędu NumPy — pakiet systemowy GNU Radio jest skompilowany pod NumPy 1.x. Jeśli Ubuntu ma zainstalowane NumPy 2.x pojawi się błąd _ARRAY_API not found:

pip3 install "numpy<2" --break-system-packages

Skalowanie UI na 4K — GTK domyślnie nie skaluje interfejsu na wysokich rozdzielczościach. Dodaj do ~/.bashrc:

GDK_DPI_SCALE=1.6 gnuradio-companion
# lub
echo 'export GDK_DPI_SCALE=1.6' >> ~/.bashrc
source ~/.bashrc

Instalacja Gqrx

Gqrx to pełnofunkcyjny odbiornik SDR z GUI i waterfallem, oparty na GNU Radio. Prostszy w obsłudze niż budowanie flowgraphów — uruchamiasz, wybierasz urządzenie i słuchasz.

sudo apt install -y gqrx-sdr

echo 'export GDK_SCALE=2' >> ~/.bashrc
source ~/.bashrc

gqrx