gr-rx888 — Docker quickstart
From a fresh Ubuntu terminal to a tunable AM radio receiver in about ten minutes. No GNU Radio or Docker experience required.
Hardware: RX888 mk2 direct-sampling SDR · Host: Ubuntu 22.04 or newer (tested through 25.04) on a 64-bit PC with at least one USB-3 port (the blue ones).
Copy button
in its top-right corner. Click it, then paste into your terminal with
Ctrl+Shift+V. No need to retype anything.
- Plug the RX888 into a USB-3 port
- Open a terminal and verify it's there
- Install Docker
- Log out and back in
- Run Docker's hello-world test
- Raise the kernel's USB buffer limit
- Clone gr-rx888
- Build the Docker image
- Let Docker draw on your screen
- Run the AM Broadcast Band demo
- Execute the flowgraph
- Troubleshooting
1Plug the RX888 into a USB-3 port
Use the supplied USB-3 cable. On the laptop, pick a blue USB port — that's USB-3 (5 Gbps). Black USB-2 ports will not deliver enough bandwidth and streaming will fail.
The little LED on the RX888 should glow. Leave it plugged in for every step below.
2Open a terminal and verify it's there
Open Terminal (Ctrl+Alt+T on most Ubuntu desktops). Then ask Linux what's on the USB bus:
lsusb | grep -i 04b4You should see a line containing 04b4:00f1 (firmware loaded)
or 04b4:00f3 (bootloader — it'll be flashed automatically
the first time the container runs). 04b4 is the Cypress
USB vendor ID; the RX888's FX3 chip uses it. If you see nothing,
the cable or the port is the problem — try a different blue port.
3Install Docker
Docker is a tool that runs a pre-packaged environment containing GNU Radio, the RX888 driver, and everything else you'd otherwise have to build by hand. On Ubuntu, install the version from the distro repos:
sudo apt update
sudo apt install -y docker.ioBy default docker needs sudo on every command.
Add yourself to the docker group so you can skip that
forever:
sudo usermod -aG docker $USER4Log out and back in
Group membership only takes effect on a fresh login session. The
command you just ran will not work yet — you have to log out of
your desktop and log back in (or reboot the machine). Once you've
logged back in, open a new Terminal and confirm you're in the
docker group:
groups | tr ' ' '\n' | grep dockerIt should print docker. If nothing prints, log out again
or reboot — the group really does need a new session.
5Run Docker's hello-world test
Before we touch any radio code, confirm Docker itself is healthy by running its tiny built-in test container:
docker run --rm hello-worldYou should see a friendly multi-line banner that begins with
"Hello from Docker!" and explains what just happened. If
instead you see permission denied while trying to connect to the
Docker daemon socket, you skipped Step 4 — log out, log back in,
and try again.
6Raise the kernel's USB buffer limit
At 32 MS/s the RX888 fills the kernel's default USB transfer buffer
faster than userspace can drain it. The symptom is
LIBUSB_ERROR_NO_MEM from the driver. The fix is one line:
sudo sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'This raises the cap from the default 16 MB to 1 GB. It's not
persistent — the value resets at every reboot. To make it permanent,
add usbcore.usbfs_memory_mb=1000 to your kernel command line.
For first-time bring-up, the one-shot above is fine.
7Clone gr-rx888
sudo apt install -y git
git clone https://github.com/ringof/gr-rx888.git
cd gr-rx888Stay in this gr-rx888 directory for the rest of the steps.
8Build the Docker image
docker/build.shThis runs docker build against the recipe in
docker/Dockerfile. It downloads Ubuntu 24.04, GNU Radio
3.10, the RX888 firmware blob, and compiles librx888 and
gr-rx888 from source. First run takes 5–15 minutes
depending on your bandwidth. Subsequent runs are instant (cached).
When it finishes, list your images to confirm:
docker imagesYou should see a gr-rx888 row with tag latest.
9Let Docker draw on your screen
GNU Radio Companion is a graphical application. The container needs permission to open windows on your desktop:
xhost +local:docker(Run xhost -local:docker after the demo to revoke that.)
10Run the AM Broadcast Band demo
The image's grc-demo command opens the bundled AM receiver
flowgraph in GRC. The long-looking command below is one logical line
that passes USB, audio, and display sockets into the container:
docker run --rm -it --privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v /run/user/$(id -u)/pulse:/tmp/pulse:ro \
-e PULSE_SERVER=unix:/tmp/pulse/native \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
gr-rx888:latest grc-demoOptional reading: what each flag does
--rm— delete the container when it exits.-it— give it a terminal so you can see log output.--privileged— let it talk to USB devices (the blunt-but- simple option; tighter rules are documented indocker/README.md).-v /dev/bus/usb:/dev/bus/usb— expose the USB bus.-v …/pulse:/tmp/pulse:ro+PULSE_SERVER— route container audio to your host's PulseAudio/PipeWire so the AM audio comes out your speakers.-e DISPLAY+-v /tmp/.X11-unix:/tmp/.X11-unix— let GRC render windows on your X11 display.grc-demo— the entrypoint that opens the demo flowgraph.
You'll see a few preflight checks (USB-3 link, firmware, device
permissions) scroll past, then a GNU Radio Companion window opens with
am_bcb_audio_demo.grc loaded.
11Execute the flowgraph
- In GRC, click the Execute button — the ► play icon in the toolbar (or press F6).
- A second window opens with a waterfall, a PSD plot, a Tune slider (540–1700 kHz) and a Volume slider.
- Drag the Tune slider until you hit a strong AM station — the waterfall will show a bright vertical line. Adjust Volume.
Other entrypoints
… gr-rx888:latest(no argument) → CLI smoketest: one second of samples, prints PASS/FAIL. Good for bench bring-up.… gr-rx888:latest shell→ interactive bash inside the container withrx888_stream,rx888_preflight, andgnuradio-companionon the PATH.
!Troubleshooting
docker: command not found
Step 3 didn't finish. Run sudo apt install -y docker.io
again and confirm with which docker — it should print a
path like /usr/bin/docker.
permission denied while trying to connect to the Docker daemon socket
You're not in the docker group yet, or you didn't log
out and back in after Step 3. Run groups and look for
docker in the list. If it isn't there, log out fully (or
reboot) and try again. Reopening just the terminal window is not
enough — it has to be a new desktop login session.
no Cypress FX3 device (04b4:*) found
The RX888 isn't on the bus. Try a different blue USB-3 port and a
different cable. Confirm the device shows up with
lsusb | grep -i 04b4 on the host before re-running
the container — the container can only see what the host already sees.
link speed 480 Mbps — RX888 needs USB3
You plugged into a USB-2 port. Move to a blue port. On laptops with only one USB-3 port, unplug other USB devices first — some docks and hubs negotiate down to USB-2 when over-subscribed.
LIBUSB_ERROR_NO_MEM during streaming
The kernel USB buffer cap is still at the default. Re-run Step 6 on the host (not inside the container — that setting can only be changed from the host):
sudo sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'GRC window doesn't open, or cannot open display
You skipped xhost +local:docker in Step 9, or you're
running on Wayland-only without XWayland installed. Most Ubuntu
desktops ship XWayland by default; if yours doesn't, install it with
sudo apt install -y xwayland and start a new session.
Flowgraph runs but no sound
Check that the host pulse socket bind-mount path is correct:
ls /run/user/$(id -u)/pulse/native should succeed and
print the file. If it doesn't, your desktop isn't using PulseAudio or
PipeWire, which is unusual on modern Ubuntu. The visualization-only
demo (am_bcb_demo.grc) works fine without audio — see
docker/README.md
for how to launch it instead.
Flowgraph runs but the spectrum is flat / no stations visible
The RX888's antenna input needs an actual antenna — even a few meters of wire clipped to the SMA center pin will pull in AM broadcast stations after dark. Without an antenna there's nothing for the front end to receive.