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
- Spécifications officielles du protocole USB/IP dans la documentation du noyau
- Tutoriels communautaires pour déploiements avancés
- Projet GitHub
usbip-winpour compatibilité multi-OS