Wymagania wstępne
- Windows 11 z WSL2 i Ubuntu (sprawdź:
wsl --versionw 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