QubesOS
Running RF Swift on QubesOS
We use Podman which is the preferred way for QubesOS, allowing rootless mode without any issues.
The setup is straightforward: create a TemplateVM (to install dependencies), then an AppVM (to hold RF Swift and images).
Step 1 – Create a TemplateVM
We need a TemplateVM where we install Podman and RF Swift dependencies. These dependencies will persist in the template and be inherited by AppVMs.
Go to: Menu > QubesOS Tools > Qube Manager > New qube
- Name it something recognizable (e.g.
rfswift-template) - Choose a color for this domain
- Provide network temporarily to this TemplateVM so we can install dependencies
Then open a terminal in the TemplateVM and run:
curl -fsSL "https://raw.githubusercontent.com/PentHertz/RF-Swift/refs/heads/main/get_rfswift.sh" | sh
Once done, switch the TemplateVM network back to “none” and shut it down.
Step 2 – Create an AppVM
Now create an AppVM that will hold the RF Swift binary and images:
Go to: Menu > QubesOS Tools > Qube Manager > New qube
- Name it properly (e.g.
rfswift) - Choose a color to recognize the domain
- Use the TemplateVM you just created as the template (to inherit the dependencies)
- Set networking to
sys-firewall(needed to pull images)
Resize storage
Depending on the images you want, you may need more space. In dom0 terminal:
qvm-volume resize rfswift:private 90GB
qvm-volume resize rfswift:root 20GBAdjust sizes depending on your needs – 90GB for private can hold all images comfortably.
Step 3 – Install RF Swift and pull images
Open a terminal in your new AppVM and install RF Swift:
curl -fsSL "https://raw.githubusercontent.com/PentHertz/RF-Swift/refs/heads/main/get_rfswift.sh" | shThen pull the image(s) you want:
rfswift images pull -i sdr_fullOther available images include sdr_light, rfid, bluetooth, wifi, etc.
Step 4 – Attach USB devices
Before running a container with a device, you need to attach the USB device to your AppVM.
Using the GUI
- Plug in your SDR device
- Left-click the Devices icon in the system tray
- Find your device (e.g. HackRF, RTL-SDR)
- Select Attach to rfswift (or your AppVM name)
Using the CLI (dom0)
# List available USB devices
qvm-usb list
# Attach to your AppVM
qvm-usb attach rfswift sys-usb:2-1Step 5 – Run a container
Once the device is attached, run an image to create a container:
rfswift runThe TUI will guide you through options:
Key settings:
- Device mount: use
/dev/bus/usb:/dev/bus/usbto pass all USB devices to the container
- Privileged mode: enable it to use X11 display and USB devices
- Realtime mode: optionally enable it to boost container processing performance
After that, you can fire up your tools inside the container:
sdrpp # SDR++
urh # Universal Radio Hacker
cyberether # CyberEther
hackrf_info # Test HackRF
rtl_test -t # Test RTL-SDRHere are some examples of tools running on QubesOS:
You can also install additional software later inside the same container, like Ghidra:
Troubleshooting
USB device not visible in container
- Verify the device is attached to the AppVM:
lsusb - Make sure you used
/dev/bus/usb:/dev/bus/usbas device mount when creating the container - Try enabling Privileged mode
“No space left on device”
Increase storage in dom0:
qvm-volume resize rfswift:private 50GClean up unused images:
rfswift cleanup imagesContainer networking fails
Check your AppVM has a NetVM assigned:
# In dom0
qvm-prefs rfswift netvmRelated
- Using Podman – Podman-specific guidance
- Air-Gapped Installation – Offline image transfer
- Running RF Swift – General usage guide
- Container Management – Dynamic device/capability management