Skip to content
Dudiebug edited this page Oct 2, 2026 · 1 revision

USB/IP

USB/IP passes a USB device plugged into CouchLiteOS through to a Linux gaming PC over the network. It is meant for racing wheels, HOTAS, specialty controllers, and hardware that needs its own driver on the PC. Normal gamepads do not need it; Moonlight already sends their input.

USB/IP has no encryption or password of its own. Use it only on a network you trust.

On CouchLiteOS

Nothing is shared by default. Open TERMINAL.

  1. List the devices: sudo couchliteos-usbip list

  2. Add each device to /etc/couchliteos/usbip-allowlist.conf, one per line:

    VID:PID:SERIAL
    VID:PID:*                 # only if the device has no serial number
    VID:PID:SERIAL:risky      # needed for blocked device types (see below)
    
  3. Apply and check:

    sudo couchliteos-usbip reconcile
    sudo couchliteos-usbip status

    sudo couchliteos-usbip unbind-all stops sharing everything.

  4. Tell the firewall which PC may connect: set the gaming PC's LAN IPv4 address as lan_address under [host:gaming-pc] in /var/lib/couchliteos/config.ini, then sudo systemctl reload couchliteos-firewall. Every other computer is blocked.

Safety rules:

  • Storage, webcams, audio/microphones, keyboards and mice are refused unless the entry ends in :risky.
  • Never add a security key.
  • The controller you use for the launcher is always refused.
  • Unplugging and replugging a device does not share anything that is not on the list.

On the Linux gaming PC

The client files are in the host/ folder of the repository (use the folder from the release that matches your box).

sudo apt install usbip
sudo modprobe vhci_hcd
sudo install -m 0755 host/couchliteos-usbip-client /usr/local/sbin/
sudo install -m 0644 host/couchliteos-usbip-client.service /etc/systemd/system/
sudo install -m 0600 host/couchliteos-usbip-client.conf.example /etc/couchliteos-usbip-client.conf
sudoedit /etc/couchliteos-usbip-client.conf
sudo systemctl enable --now couchliteos-usbip-client.service

The client attaches only devices CouchLiteOS shares. Use couchliteos-usbip-client status and couchliteos-usbip-client detach-all.

Over Tailscale (optional, off by default)

In /var/lib/couchliteos/config.ini:

[tailscale]
remote_usbip = true
allowed_usbip_peer = 100.64.x.y

allowed_usbip_peer is the gaming PC's single Tailscale IPv4 address. Reload the firewall, point the client at CouchLiteOS's Tailscale address, and also limit port TCP 3240 to the gaming PC in your tailnet policy. The allowlist still applies. Relayed Tailscale connections can be too jittery for wheels and HOTAS devices.

Clone this wiki locally