Skip to main content

RemoteRF Host (hostrf) — Linux Setup

HostRF Installation

The guide is done/verified for Ubuntu Server/Desktop 24.04 LTS.

0) If Raspberry Pi

Raspberry Pi Imager → Install Ubuntu Server 24.04 LTS → Boot Raspberry Pi from SD card.

1) System Prerequisites (APT)

sudo apt update
sudo apt install -y curl ca-certificates bzip2 git build-essential
sudo apt install -y libusb-1.0-0 udev

Optional: confirm architecture:

uname -m
  • x86_64 → Intel/AMD
  • aarch64 → ARM64 (Raspberry Pi 64-bit, some servers)

2) Install Miniconda

2.1 Download the installer

x86_64

cd /tmp
curl -fsSLO https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

ARM64 (aarch64)

cd /tmp
curl -fsSLO https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh

2.2 Install (non-interactive, recommended)

x86_64

bash Miniconda3-latest-Linux-x86_64.sh -b -p "$HOME/miniconda3"

ARM64 (aarch64)

bash Miniconda3-latest-Linux-aarch64.sh -b -p "$HOME/miniconda3"

2.3 Enable conda in your current shell

source "$HOME/miniconda3/etc/profile.d/conda.sh"
conda --version

If you want conda available automatically in new terminals:

"$HOME/miniconda3/bin/conda" init bash
source ~/.bashrc

2.4 Install mamba (default solver)

conda install -n base -c conda-forge -y mamba
mamba --version

Might have to accept anaconda TOS.

conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main

conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r

3) Create the Environment (with mamba (faster))

mamba create -n hostrf -y -c conda-forge -c defaults  python=3.10 pip setuptools wheel grpcio protobuf python-dotenv numpy scipy libiio pylibiio libusb

conda activate hostrf
python -m pip install -U pip
python -m pip install remoterf-host

The base remoterf-host package installs the Python runtimes for every packaged device driver, including ADALM-Pluto, RTL-SDR, and HackRF. No device extras are required.

sudo reboot now

HostRF Config

Run the below for a comprehensive overview:

hostrf --help

To get hostrf up and running:

1) Point to a RemoteRF server

HostRF requires a RemoteRF Server already setup. See RemoteRF-Server for additional details.

hostrf stores its host config under: ~/.config/remoterf/host/

Custom device drivers are loaded from: ~/.config/remoterf/drivers/

hostrf --config --addr <host:port>
# example:
hostrf --config --addr 164.97.201.67:5000
hostrf --config --show

2) Set host parameters

On the remoterf server, run the below:

Example uses 'lab-host-01' as the host name. It will return a valid command you can just copy and paste into the host CLI.

serverrf --host --token-create lab-host-01 --length 8

Given the parameters/tokens returned, run the below:

hostrf --host --set <hostname> \"TOKEN\"
#example:
hostrf --host --set lab-host-01 "UTzhag"

3) Connect devices (Adalm Pluto)

To connect plutos to the server:

iio_info -s

If the pluto doesn't show up, yet the below works:

sudo iio_info -s

Run the below and reboot after:

sudo groupadd -f plugdev
sudo usermod -aG plugdev "$USER"

sudo tee /etc/udev/rules.d/53-adi-usb.rules >/dev/null <<'EOF'
# Type the below in
SUBSYSTEM=="usb", ATTR{idVendor}=="0456", MODE="0660", GROUP="plugdev"
EOF

sudo udevadm control --reload-rules
sudo udevadm trigger
sudo reboot now

Look for a 'hw_serial: 104473'. Keep note of said serial per device.

Add pluto to device list. Understand that the device_id (int) needs to be GLOBALLY unique!

hostrf --device --add --pluto <id>:<device_name>:<hw_serial>

#Example
hostrf --device --add --pluto 10:"hostrf pluto 0":104473

For a Pluto running the MIMO schema, configure devices.yml with the schema device type:

devices:
  - device_id: 11
    device_type: adalm_pluto_mimo
    name: hostrf pluto mimo 0
    init:
      serial: "104474"

Remove device:

hostrf --device --remove <id>

Show devices:

hostrf --device --show

Clear all device config:

hostrf --device --wipe

Run to start the host. You should be able to see host on the server if setup properly.

hostrf --serve

4) Connect USRP devices

The NI USRP-2901, Ettus Research USRP B205-mini, and USRP N210 use the same session-scoped UHD driver and Dynamic v2 interface. The machine connected to the radio must provide the UHD 4.10.0.0 Python module. HostRF publishes the schema without UHD installed, but opening a hardware session requires that supported UHD API.

Register each model with an explicit profile and stable selector:

hostrf --device --add --usrp-2901 7:usrp2901_lab:31A2B3C
hostrf --device --add --usrp-b205-mini 8:b205mini_lab:31E9F48
hostrf --device --add --usrp-n210 9:n210_lab:192.168.10.2
hostrf --device --show

--usrp and --usrp2901 remain aliases for --usrp-2901.

The resulting inventory constrains the devices as follows:

devices:
  - device_id: 7
    device_type: usrp
    name: usrp2901_lab
    init:
      profile: usrp2901
      type: b200
      serial: 31A2B3C
  - device_id: 8
    device_type: usrp
    name: b205mini_lab
    init:
      profile: b205mini
      type: b200
      serial: 31E9F48
  - device_id: 9
    device_type: usrp
    name: n210_lab
    init:
      profile: n210
      type: usrp2
      addr: 192.168.10.2

For the N210, configure the host network interface so the radio address is reachable before starting HostRF. Control calls, opaque handles, and binary IQ frames use the authenticated host tunnel. Native UHD sessions close when a reservation ends or the tunnel disconnects.

5) Connect RTL-SDR

The base HostRF package includes the RTL-SDR Python wrapper and packaged native library. Install the command-line tools only if you want the local rtl_test diagnostic:

sudo apt-get install rtl-sdr
rtl_test

Register by stable serial when possible, or by zero-based device index:

hostrf --device --add --rtl-sdr 10:rtl_fm:serial=00000001
hostrf --device --add --rtl-sdr 11:rtl_backup:index=1

The remote client exposes PyRtlSdr-style tuning, gain, optional tuner controls, buffer reset, and bounded synchronous sample/byte reads. Asynchronous callbacks are not exposed across the RPC boundary.

6) Connect HackRF

The base HostRF package includes the HackRF Python binding. Install the native libhackrf runtime and tools on the host machine:

sudo apt-get install hackrf
hackrf_info

Register by serial or device index:

hostrf --device --add --hackrf 12:hackrf_lab:serial=0000000000000000719031ac235bb14a
hostrf --device --add --hackrf 13:hackrf_backup:index=1

The remote client exposes tuning, sample rate, filter bandwidth, LNA/VGA/TX gain, amplifier and bias-tee state, bounded synchronous IQ reads, and TX-buffer loading.

7) Connect a TI xWR68xx mmWave radar

TI mmWave SDK 3 out-of-box firmware uses the radar board's Silicon Labs CP2105 bridge as two UARTs: Enhanced for the 115200-baud CLI and Standard for the 921600-baud binary data stream. Install the Python transport and confirm that both interfaces are visible:

python -m pip install "pyserial>=3.5,<4"
python -m serial.tools.list_ports -v

On macOS, install the Silicon Labs CP210x VCP driver if the CP2105 appears in USB inventory but does not expose both /dev/cu.* nodes. Add the radar by its CP2105 serial and an unused global device ID:

hostrf --device --add --ti-mmwave 14:ti_xwr68xx:00DF4F69

The HostRF schema discovers both interfaces from that serial, keeps a bounded complete-frame queue, and exposes raw packets for client-side TI TLV decoding.

Custom schemas under ~/.config/remoterf/drivers/ take precedence over the packaged defaults. No usrp_policy.yml file is required.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

remoterf_host-1.1.3.tar.gz (123.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

remoterf_host-1.1.3-py3-none-any.whl (118.1 kB view details)

Uploaded Python 3

File details

Details for the file remoterf_host-1.1.3.tar.gz.

File metadata

  • Download URL: remoterf_host-1.1.3.tar.gz
  • Upload date:
  • Size: 123.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.10

File hashes

Hashes for remoterf_host-1.1.3.tar.gz
Algorithm Hash digest
SHA256 3485baa64893302c3ae7d0d812c481901e8cdf8b630108de0e54fdece8ffcd74
MD5 90a7602a5b074ddf0d5941b2f46f8277
BLAKE2b-256 f3885124591700fee93a74480167707959e6e59c5ad5f00bb29d8b3c7fa48008

See more details on using hashes here.

File details

Details for the file remoterf_host-1.1.3-py3-none-any.whl.

File metadata

  • Download URL: remoterf_host-1.1.3-py3-none-any.whl
  • Upload date:
  • Size: 118.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.10

File hashes

Hashes for remoterf_host-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4dded8f31bcae9d3a98f94d3d5308ffcd8dc64e1e6c8595e11542b05010fe5ee
MD5 c00e968fe880aab45ee3007b4b0e5a5f
BLAKE2b-256 6e88cdea6e0b63fed96e84e84e84a0023d6ffb573ad670ffa1bd00640c853b37

See more details on using hashes here.

Release history Release notifications | RSS feed

1.1.4

2 files

This release

1.1.3 This release

2 files

1.1.1

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

0.1.36

2 files

0.1.35

2 files

0.1.31

2 files

0.1.30

2 files

0.1.29

1 file

0.1.28

2 files

0.1.27

2 files

0.1.26

2 files

0.1.25

2 files

0.1.24

2 files

0.1.23

2 files

0.1.22

2 files

0.1.21

2 files

0.1.20

2 files

0.1.19

2 files

0.1.18

2 files

0.1.17

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page