Tips en Trucs 2026

USB delen op het netwerk

Het is een vaak voorkomend probleem: ik heb een USB-apparaat aangesloten op een computer in de werkplaats en ik wil het vanuit mijn comfortabele kantoor gebruiken. Wat te doen? Je zou een Remote Desktop verbinding kunnen maken met die computer. Maar eerlijk gezegd vind ik elke vorm van Remote Desktop omslachtiger en minder prettig dan ssh. Gelukkig kan Linux vrijwel alles als je maar weet hoe je het moet doen. Dus deze keer laat ik je zien hoe je een USB-apparaat via je netwerk kun delen. Natuurlijk heb ik een netwerk dat tot in de werkplaats reikt. Het zou een eenvoudige zaak moeten zijn om mijn desktopcomputer te vertellen dat één van zijn USB-apparaten zich aan de andere kant van het netwerk bevindt. Zo eenvoudig is het niet, maar het is wel te doen.

Hierbij komt een programma genaamd usbip kijken. Om dit te laten werken, hebben beide computers in het netwerk een aantal kernelmodules nodig, plus een daemon op de server: de computer waarop de USB-apparaten staan die je wilt delen.

Usbip_core en usbip_host zijn de kernelmodules die je op de server nodig hebt. Daarnaast heb je usbipd (de daemon) nodig. Op beide computers heb je het besturingsprogramma usbip nodig. Op de client computer heb je de vhci_hcd kernelmodule nodig.

Server (pindabook):

Veel mensen gebruiken een Raspberry Pi of een Debian systeem als USB-server. In dat geval is de installatie vrij eenvoudig:

dany@pindabook:~$ sudo apt install usbip hwdata usbutils
[sudo] wachtwoord voor dany:  
usbutils is reeds de nieuwste versie (1:018-2).
Installeren:
 hwdata  usbip

Samenvatting:
 Opwaarderen: 0, Installeren: 2, Verwijderen: 0, Niet opwaarderen: 0
 Downloadgrootte: 1.237 kB
 Benodigde ruimte: 1.372 kB / 84,6 GB beschikbaar

Doorgaan? [J/n]  
Ophalen:1 http://deb.debian.org/debian trixie/main amd64 hwdata all 0.394-1 [4.336 B]
Ophalen:2 http://security.debian.org/debian-security trixie-security/main amd64 usbip amd64 2.0+6.12.74-2 [1.233 kB]
1.237 kB opgehaald in 0s (13,1 MB/s)                             
Voorheen niet geselecteerd pakket hwdata wordt geselecteerd.
(Database wordt ingelezen ... 206579 bestanden en mappen momenteel geïnstalleerd.)
Uitpakken van .../hwdata_0.394-1_all.deb wordt voorbereid...
Bezig met uitpakken van hwdata (0.394-1) ...
Voorheen niet geselecteerd pakket usbip wordt geselecteerd.
Uitpakken van .../usbip_2.0+6.12.74-2_amd64.deb wordt voorbereid...
Bezig met uitpakken van usbip (2.0+6.12.74-2) ...
Instellen van usbip (2.0+6.12.74-2) ...
Instellen van hwdata (0.394-1) ...
Bezig met afhandelen van triggers voor man-db (2.13.1-1) ...

Allereerst moet je de modules zowel op de server als op de client laden. Vervolgens moet je de daemon op de server starten. Je kunt één of meer USB-apparaten aan de server koppelen met behulp van het opdrachtregelprogramma. Let op: het USB-apparaat moet vrij zijn; zodra je het aan de server hebt gekoppeld, kun je het niet meer rechtstreeks gebruiken.

Vervolgens maak je verbinding met de client. Nogmaals: één client krijgt het apparaat toegewezen, en dat is het dan. Het kan niet worden gedeeld met meerdere computers. Natuurlijk kun je het vrijgeven, waarna iemand anders het kan gebruiken. Of de server kan het vrijgeven, waardoor het apparaat weer beschikbaar komt voor lokaal gebruik. Maar zolang de server het apparaat in bezit heeft, kan er op elk moment slechts één client gebruikmaken van dat apparaat.

Het laden van de modules is eenvoudig met modprobe, hoewel je ze op de lange termijn waarschijnlijk wilt toevoegen aan /etc/modules-load.d, zodat ze bij het opstarten worden geladen. Probeer voorlopig op de server het volgende:

dany@pindabook:~$ sudo modprobe -a usbip_core usbip_host

Daarna moet je usbipd op de server uitvoeren. Dat kun je doen op elke manier waarop je gewoonlijk een daemon start, bijvoorbeeld via systemd, rc.local of iets dergelijks. Voer het voorlopig gewoon als root uit vanaf de opdrachtregel:

dany@pindabook:~$ sudo usbipd -d
usbipd: info: starting usbipd (usbip-utils 2.0)
usbipd: debug: usbipd.c:389:[listen_all_addrinfo] opening 0.0.0.0:3240
usbip: debug: usbip_network.c:253:[usbip_net_set_v6only] setsockopt: IPV6_V6ONLY
usbipd: info: listening on 0.0.0.0:3240
usbipd: debug: usbipd.c:389:[listen_all_addrinfo] opening :::3240
usbipd: info: listening on :::3240
usbipd: debug: usbipd.c:544:[do_standalone_mode] listening on 2 addresses
usbipd: debug: usbipd.c:575:[do_standalone_mode] heartbeat timeout on ppoll()
usbipd: debug: usbipd.c:575:[do_standalone_mode] heartbeat timeout on ppoll()
^Cusbipd: debug: usbipd.c:448:[signal_handler] received 'Interrupt' signal
usbipd: debug: usbipd.c:564:[do_standalone_mode] Interrupted system call
usbipd: info: shutting down usbipd

De -d optie activeert het weergeven van debug informatie waardoor je eenvoudiger fouten kunt opsporen. Stop de usbipd opdracht met de sneltoets Ctrl+c. Om deze opdracht als daemon op de achtergrond te starten, gebruik je de -D optie:

dany@pindabook:~$ sudo usbipd -D

Je kunt nu op zoek naar het busid van een USB apparaat om te delen:

dany@pindabook:~$ sudo usbip list -l
- busid 2-4 (8087:07dc)
  Intel Corp. : Bluetooth wireless interface (8087:07dc)

- busid 2-5 (04f3:0254)
  Elan Microelectronics Corp. : unknown product (04f3:0254)

- busid 2-6 (0bda:5720)
  Realtek Semiconductor Corp. : unknown product (0bda:5720)

- busid 1-1.7 (0483:91d1)
  STMicroelectronics : Sensor Hub (0483:91d1)

- busid 1-1.8 (056a:00ec)
  Wacom Co., Ltd : TPCEC (056a:00ec)

Sluit een USB Stick aan op de server en herhaal de vorige opdracht om zijn busid te achterhalen:

dany@pindabook:~$ sudo usbip list -l
- busid 2-2 (090d:1001)
  Multiport Computer Vertriebs GmbH : unknown product (090d:1001)

- busid 2-4 (8087:07dc)
  Intel Corp. : Bluetooth wireless interface (8087:07dc)

- busid 2-5 (04f3:0254)
  Elan Microelectronics Corp. : unknown product (04f3:0254)

- busid 2-6 (0bda:5720)
  Realtek Semiconductor Corp. : unknown product (0bda:5720)

- busid 1-1.7 (0483:91d1)
  STMicroelectronics : Sensor Hub (0483:91d1)

- busid 1-1.8 (056a:00ec)
  Wacom Co., Ltd : TPCEC (056a:00ec)

Wat je nodig hebt, is het busid. In bovenstaand voorbeeld heeft de pas aangesloten USB Stick het busid 2-2. Je koppelt dat apparaat aan de server met:

dany@pindabook:~$ sudo usbip bind -b 2-2
usbip: info: bind device on busid 2-2: complete

Dit kan volgen door de kernel berichten weer te geven met de opdracht:

dany@pindabook:~$ sudo dmesg -T --follow

dmesg

Daarbij zorgt de --follow optie dat de berichten continu gevolgd blijven worden. Deze opdracht zal ook eventuele foutmeldingen en waarschuwingen tonen. Breek deze opdracht af met de sneltoets Ctrl+c.

De USB Stick wordt daarbij losgekoppeld van de server waarop deze is aangesloten.

Losgekoppeld

Client (kvm):

Nu de server de USB Stick op het netwerk deelt, kunnen we een andere computer als client inrichten om de USB Stick daarop beschikbaar te maken.

Ook op de client moeten we dezelfde software pakketten installeren:

dany@KVM:~$ sudo apt install usbip hwdata usbutils
[sudo] wachtwoord voor dany:  
usbutils is reeds de nieuwste versie (1:018-2).
Installeren:
 hwdata  usbip

Samenvatting:
 Opwaarderen: 0, Installeren: 2, Verwijderen: 0, Niet opwaarderen: 0
 Downloadgrootte: 1.237 kB
 Benodigde ruimte: 1.372 kB / 30,6 GB beschikbaar

Doorgaan? [J/n]  
Ophalen:1 http://deb.debian.org/debian trixie/main amd64 hwdata all 0.394-1 [4.336 B]
Ophalen:2 http://security.debian.org/debian-security trixie-security/main amd64 usbip amd64 2.0+6.12.74-2 [1.233 kB]
1.237 kB opgehaald in 0s (20,6 MB/s)
Voorheen niet geselecteerd pakket hwdata wordt geselecteerd.
(Database wordt ingelezen ... 202571 bestanden en mappen momenteel geïnstalleerd.)
Uitpakken van .../hwdata_0.394-1_all.deb wordt voorbereid...
Bezig met uitpakken van hwdata (0.394-1) ...
Voorheen niet geselecteerd pakket usbip wordt geselecteerd.
Uitpakken van .../usbip_2.0+6.12.74-2_amd64.deb wordt voorbereid...
Bezig met uitpakken van usbip (2.0+6.12.74-2) ...
Instellen van usbip (2.0+6.12.74-2) ...
Instellen van hwdata (0.394-1) ...
Bezig met afhandelen van triggers voor man-db (2.13.1-1) ...

Op de clientcomputer heb je de vhci_hcd kernelmodule nodig:

dany@KVM:~$ sudo modprobe -a vhci_hcd

Om de op de server gedeelde USB apparaten op de client weer te geven, gebruik je de volgende opdracht. Je kunt in de plaats van de server hostname (hier pindanet) ook een ip adres gebruiken.

dany@KVM:~$ sudo usbip list -r pindabook
Exportable USB devices
======================
- pindabook
       2-2: Multiport Computer Vertriebs GmbH : unknown product (090d:1001)
          : /sys/devices/pci0000:00/0000:00:14.0/usb2/2-2
          : (Defined at Interface level) (00/00/00)

Daar het om een USB Stick gaat, geven we alle op de client aanwezige /dev/sd* apparaten weer:

dany@KVM:~$ ls /dev/sd*
ls: kan geen toegang krijgen tot '/dev/sd*': Bestand of map bestaat niet

Op de QEMU/KVM Virtuele test computer zijn er geen /dev/sd* apparaten.

Je kunt de op het netwerk gedeeld USB apparaat nu aankoppelen met:

dany@KVM:~$ sudo usbip attach -r pindabook -b 2-2

Het client systeem reageert daarbij alsof de gedeelde USB Stick fysiek zou aangesloten worden.

Schijven

En is ook als dusdanig te gebruiken.

Dolphin USB share

Dit wordt ook weergegeven bij het opsommen van de /dev/sd* apparaten:

dany@KVM:~$ ls /dev/sd*  
/dev/sda  /dev/sda1  /dev/sda2

De gekoppelde gedeelde USB apparaten en hun eigenschappen kan je opvragen met:

dany@KVM:~$ sudo usbip port
Imported USB devices
====================
Port 00: <Port in Use> at High Speed(480Mbps)
      Multiport Computer Vertriebs GmbH : unknown product (090d:1001)
      3-1 -> usbip://pindabook:3240/2-2
          -> remote bus/dev 002/005

Loskoppelen

Aangezien het client systeem gekoppelde USB apparaten ziet als fysieke apparaten, moet je deze op de client ook overeenkomstig gebruiken. In het geval van een gebruikte USB Stick, moet je deze ook Veilig verwijderen. Pas daarna kan je de op het netwerk gedeelde USB Stick van de client loskoppelen:

dany@KVM:~$ sudo usbip detach -p 00
usbip: info: Port 0 is now detached!

Op de server stop je het delen van de USB Stick met de opdracht:

dany@pindabook:~$ sudo usbip unbind -b 2-2
usbip: info: unbind device on busid 2-2: complete

Daardoor wordt de USB stick terug beschikbaar op de server. En kan je de USB stick veilig verwijderen.

USB geluidskaart koppelen

Daar je met usbip USB poorten deelt kan je allerlei USB apparaten delen. Denk aan muizen, toetsenborden, printers, scanners, enz. Het volgende voorbeeld toont het delen van een USB geluidskaart.

dany@pindabook:~$ sudo usbip list -l
- busid 1-2 (0d8c:0014)
  C-Media Electronics, Inc. : Audio Adapter (Unitek Y-247A) (0d8c:0014)

- busid 1-4 (8087:07dc)
  Intel Corp. : Bluetooth wireless interface (8087:07dc)

- busid 1-5 (04f3:0254)
  Elan Microelectronics Corp. : unknown product (04f3:0254)

- busid 1-6 (0bda:5720)
  Realtek Semiconductor Corp. : unknown product (0bda:5720)

- busid 3-1.7 (0483:91d1)
  STMicroelectronics : Sensor Hub (0483:91d1)

- busid 3-1.8 (056a:00ec)
  Wacom Co., Ltd : TPCEC (056a:00ec)

We delen de aangesloten USB geluidskaart (Audio Adapter) op het netwerk met:

dany@pindabook:~$ sudo usbip bind -b 1-2
usbip: info: bind device on busid 1-2: complete

Op een client apparaat waarop we de op het netwerk gedeelde USB geluidskaart willen gebruiken, controleren we de aanwezigheid met:

dany@KVM:~$ sudo usbip list -r pindabook
Exportable USB devices
======================
- pindabook
       1-2: C-Media Electronics, Inc. : Audio Adapter (Unitek Y-247A) (0d8c:0014)
          : /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2
          : (Defined at Interface level) (00/00/00)

Het koppelen van de gedeelde USB geluidskaart zelf gebeurt met:

dany@KVM:~$ sudo usbip attach -r pindabook -b 1-2

En je kunt de gedeelde USB geluidskaart op d e client testen en gebruiken.

USBIP

Een overzicht van de gekoppelde USB apparaten op de client geef je weer met:

dany@KVM:~$ sudo usbip port
Imported USB devices
====================
Port 00: <Port in Use> at Full Speed(12Mbps)
      C-Media Electronics, Inc. : Audio Adapter (Unitek Y-247A) (0d8c:0014)
      3-1 -> usbip://pindabook:3240/1-2
          -> remote bus/dev 001/007

De gedeelde USB geluidskaart koppel je los van de client met:

dany@KVM:~$ sudo usbip detach -p 00
usbip: info: Port 0 is now detached!

Om de USB geluidskaart niet langer op het netwerk te delen, voer je op de server de volgende opdracht uit:

dany@pindabook:~$ sudo usbip unbind -b 1-2
usbip: info: unbind device on busid 1-2: complete

Om op de server het delen van USB apparaten helemaal te stoppen, stop je de usbipd daemon met:

dany@pindabook:~$ sudo kill `pgrep usbipd`

Meer info

Meer informatie over usbip kan je vinden op:

Usbip verwijderen

Verwijder de geïnstalleerde softwarepakketten, zowel op de server als op de client(s):

dany@pindabook:~$ sudo apt purge usbip hwdata
[sudo] wachtwoord voor dany:  
VERWIJDEREN:                               
 hwdata*  usbip*

Samenvatting:
 Opwaarderen: 0, Installeren: 0, Verwijderen: 2, Niet opwaarderen: 0
 Vrijgemaakte ruimte: 1.372 kB

Doorgaan? [J/n]  
(Database wordt ingelezen ... 216559 bestanden en mappen momenteel geïnstalleerd.)
hwdata (0.394-1) wordt verwijderd ...
usbip (2.0+6.12.74-2) wordt verwijderd ...
Bezig met afhandelen van triggers voor man-db (2.13.1-1) ...

dany@KVM:~$ sudo apt purge usbip hwdata
[sudo] wachtwoord voor dany:  
VERWIJDEREN:                               
 hwdata*  usbip*

Samenvatting:
 Opwaarderen: 0, Installeren: 0, Verwijderen: 2, Niet opwaarderen: 0
 Vrijgemaakte ruimte: 1.372 kB

Doorgaan? [J/n]  
(Database wordt ingelezen ... 202584 bestanden en mappen momenteel geïnstalleerd.)
hwdata (0.394-1) wordt verwijderd ...
usbip (2.0+6.12.74-2) wordt verwijderd ...
Bezig met afhandelen van triggers voor man-db (2.13.1-1) ...

Om echt schijfruimte vrij te maken, verwijderen we ook de niet langer gebruikte afhankelijke pakketten met:

dany@pindabook:~$ sudo apt autoremove
Samenvatting:                              
 Opwaarderen: 0, Installeren: 0, Verwijderen: 0, Niet opwaarderen: 0

Wat dus niet echt nodig was.