This guide covers the simplest schema-backed device path in the current RemoteRF server implementation: ADALM-PLUTO SDRs. The Pluto schema is already loaded as a built-in driver, so most setups only need working Pluto dependencies and a correct devices.yml entry.

The ADALM-PLUTO (Pluto SDR), manufactured by Analog Devices.
The ADALM-PLUTO (Pluto SDR), manufactured by Analog Devices.

Overview

There is native support of the ADALM-PLUTO devices (AKA “Pluto SDRs”) in RemoteRF via the built-in pluto schema. Fundamentally, this guide is the same for both servers and hosts; whichever machine the Pluto is physically attached to must have the Pluto dependencies installed, must be able to see the Pluto locally, and must have the right devices.yml entry.

The only parts that vary are machine-local details such as which Python environment you install into, which devices.yml you edit, and whether you start serverrf or hostrf. The minimum setup of Pluto devices is as follows:

  1. Install the Pluto-side Python dependencies in the same environment as remoterf-server or remoterf-host, depending on which machine owns the Pluto.
  2. Make sure iio_info -s can see the device on that same machine without sudo.
  3. Add each Pluto physically connected to that machine to its devices.yml file.
  4. Restart that machine’s RemoteRF process.

Each of these steps is provided in detail below.

TODO: WHEN TO ACTUALLY PHYSICALLY CONNECT THE DEVICE?

Install and Detect

Step 1

Install Pluto Dependencies

Install the Pluto-side Python package and supporting Conda libraries in the same environment where remoterf-server or remoterf-host is installed on the machine that owns the Pluto.

Run:
python -m pip install -U pip
conda install -y libiio pylibiio libusb 
sudo apt install libiio-utils
python -m pip install pyadi-iio
Step 2

Verify Detection

Make sure the machine that owns the Pluto can see it before you touch devices.yml.

Run:
iio_info -s
Expected result: Look for the Pluto serial in the output. That serial is the value you will place in devices.yml.
If Needed

Fix USB Permissions

If the Pluto only appears when you run sudo iio_info -s, fix the USB permissions first. Otherwise, the Pluto may not be recognized properly when you start the RemoteRF server or host process. The older server notes used this udev rule pattern. TODO WHAT DOES THIS LAST SENTENCE MEAN?

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

sudo tee /etc/udev/rules.d/53-adi-usb.rules >/dev/null <<'EOF'
Then type this in:
SUBSYSTEM=="usb", ATTR{idVendor}=="0456", MODE="0660", GROUP="plugdev"
EOF
Then run:
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo reboot now

Manifest Example

Save this file on the machine the Pluto is physically attached to. For a Pluto attached to the main RemoteRF server, place it at ~/.config/remoterf/devices.yml. For a Pluto attached to a RemoteRF host, place it at ~/.config/remoterf/host/devices.yml.

Below is an example devices.yml file for Pluto devices:

devices.yml
yaml
devices:
  - device_id: 1
    device_type: pluto
    name: Pluto A
    init:
      serial: "104473f6"

  - device_id: 2
    device_type: pluto
    name: Pluto B
    init:
      serial: "58472j"

Important: Note that device_type must be pluto. init.serial should match the serial reported by iio_info -s. name is just the human-facing label RemoteRF shows to users. You can create many Pluto entries with the same schema because the schema is per device type, while devices.yml is per physical device instance.

Verification

Verify the Pluto Comes Online

Now, let's confirm the Pluto is indeed accessible. If you are connecting the Pluto to the server, run serverrf -s. If you are connecting the Pluto to a host, run hostrf -s.

Expected result: When the Pluto opens successfully, the current schema should print a line similar to Connected to Pluto serial=104473f6 via usb:....

Then check this: On a server-attached setup, in the interactive serverrf -s shell, run devices list. On a host-attached setup, you can also run devices list from hostrf -s to confirm the host loaded the Pluto locally, but you should still run devices list from the server side after the host connects so you can verify the main server sees it too.

Still having issues? Reboot the machine that has the Pluto physically attached, then rerun the startup command and repeat the devices list check.

Notes: Restart the RemoteRF server after changing devices.yml or adding a custom Pluto schema. If you customize the Pluto schema, keep the method naming convention consistent with the IDL generator: get_*, set_*, and call_*. Clients do not need a manual Pluto-specific library rollout when you adjust the exposed interface. They fetch the schema from the server and regenerate their local remote driver when the schema hash changes.

Next Steps