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. Umożliwia uruchamianie aplikacji graficznych 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. Wymagane jest narzędzie usbipd-win, które przekazuje 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 powoduje, że usbipd automatycznie ponownie przekazuje urządzenie do WSL przy każdym podłączeniu kabla. Eliminuje to konieczność ręcznych działań po odłączeniu i ponownym podłączeniu odbiornika.

Okno PowerShell z uruchomionym --auto-attach musi pozostać otwarte, ponieważ proces działa w tle tego terminala. Aby uruchomić go bez widocznego okna, użyj poniższego polecenia. 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, aby 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 ponownie podłącz 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, a nie E4000. Istotne jest potwierdzenie wykrycia urządzenia.

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 ponownie podłącz 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 w jednolity sposób, bez potrzeby 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.

Rozwiązanie 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 w bashrc:
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. Interfejs jest prostszy w obsłudze niż budowanie flowgraphów. Wystarczy uruchomić aplikację, wybrać urządzenie i rozpocząć odbiór.

sudo apt install -y gqrx-sdr

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

gqrx