Partage de périphériques USB via le protocole USB/IP sous Linux

Introduction à USB/IP

USB/IP est un projet open source intégré au noyau Linux, permettant la mise en réseau et le partage distant de périphériques USB entre machines. Ce système repose sur une architecture client-serveur où les données circulent via TCP/IP, simulant une connexion locale tout en étant physiquement distante.

Architecture du système

L'implémentation repose sur deux composants principaux :

  • VHCI (Virtual Host Controller Interface) : exécuté côté client, ce module virtuel intercepte les requêtes USB émanant du noyau local et les achemine vers un serveur distant via le réseau.
  • Stub Driver : déployé côté serveur, il reçoit les commandes depuis le client et les transmet aux contrôleurs matériels réels gérant le périphérique USB connecté localement.

Cette séparation logique permet au client d'utiliser un périphérique USB comme s’il était branché directement, tandis que le serveur agit comme intermédiaire matériel.

Configuration du serveur USB

Installation des outils et chargement des modules

Sous Ubuntu, installez les paquets nécessaires :

sudo apt update
sudo apt install linux-tools-generic usbip

Sous CentOS/RHEL, utilisez :

sudo yum install -y kmod-usbip usbip-utils

Activez ensuite les modules noyau requis :

sudo modprobe usbip-core
sudo modprobe vhci-hcd
sudo modprobe usbip-host

Exposition d’un périphérique USB

Connectez le périphérique (par exemple une clé USB) puis listez-le :

sudo usbip list --local

Le résultat affiche les périphériques disponibles avec leur identifiant busid.

Démarrer le démon d’écoute :

sudo usbipd --daemon --tcp-port 3240

Liez le périphérique à exporter en utilisant son busid (ex: 1-4.1) :

sudo usbip bind --busid=1-4.1

Une fois lié, le périphérique devient accessible à distance.

Annuler l’exposition

Pour retirer le partage, utilisez :

sudo usbip unbind --busid=1-4.1

Configuration du client USB

Chargement des modules

Assurez-vous que les mêmes modules sont chargés que sur le serveur :

sudo modprobe usbip-core
sudo modprobe vhci-hcd
sudo modprobe usbip-host

Découverte des périphériques distants

Listez les périphériques exposés par un serveur distant :

sudo usbip list --remote=192.168.1.100

Cela affichera les périphériques disponibles avec leurs descriptions et busid.

Connxeion à un périphérique distant (attach)

Pour intégrer le périphérique distant dans l’environnement local :

sudo usbip attach --remote=192.168.1.100 --busid=1-4.1

Le système traitera le périphérique comme s’il était physiquement branché. Vérifiez avec :

lsusb

Déconnexion du périphérique (detach)

Affichez les connexions actives :

sudo usbip port

Identifiez le port utilisé (ex: Port 00), puis détachez-le :

sudo usbip detach --port=00

Le périphérique est alors désactivé côté client.

Utilisation sous Windows

Il est possible d’utiliser USB/IP depuis Windows grâce au projet usbip-win. Ce dernier implémente un pilote compatible VHCI et permet de se connecter à un serveur Linux exécutant USB/IP. L’installation suit un processus classique d’ajout de pilote signé, suivi d’une configuration en ligne de commande.

Documentation et ressources

Étiquettes: USB/IP Linux noyau partage_périphérique réseau_USB

Publié le 11 octobre à 14h37