USB Over IP sous Linux

Vous disposez d’une imprimante USB (et seulement USB). Pour l’instant, vous n’avez aucun moyen de la contrôler depuis un autre ordinateur chez vous. Nous supposons bien entendu que les deux ordinateurs sont en réseaux (par le biais d’une box par exemple).

Je veux pouvoir transformer mon imprimante USB en imprimante réseau (et donc pouvoir l’utiliser et la contrôler partout chez moi).

La première solution qui s’offre à vous consiste à acheter un appareil qui partage sur le réseau les périphériques USB. Prévoyez un budget minimum de 100 euros pour avoir quelque chose de bien.

Mais heureusement que l’Open-Source est là, et nous allons nous débrouiller nous même, avec un budget de… 0 euros !

USB/IP est une excellente solution logicielle.

Procédure coté serveur

1- Téléchargez le logiciel présent dans les dépôts Debian / Ubuntu :

sudo aptitude install usbip

Vous devez charger les modules suivants pour être capable de contrôler vos ports USB :

sudo modprobe usbip
sudo modprobe usbip_common_mod

Pour démarrer le service « usbip » comme un démon :

sudo usbipd -D

Le message suivant s’affiche.

Bind usbip.ko to a usb device to be exportable!

Pas de panique ! C’est normal. Cela signifie vous devez choisir quel sera le port USB à partager.

1- Branchez votre appareil USB (imprimante, webcam, etc…)

2- Exécutez la commande pour trouver l’identifiant du vendeur et de l’appareil :

lsusb

Il est sous la forme :

Bus XXX Device ZZZ: ID VendorID:DeviceID

Les identifiants Vendeur / Appareil (Vendor / Device) sont codés sur 4 digits chacun (03f0:7a11 par exemple).Le premier (03f0) est pour Hewlett-Packard (qui est la marque de mon imprimante), et le second (7a11) est l’appareil USB (ici, mon imprimante en elle même).

Maintenant que nous avons trouvé les identifiants matériel, nous sommes capable de localiser sa position sur le bus.

sudo usbip_bind_driver –list

Résultat :

busid 2-1.2 (03f0:7a11)
2-1.2:1.0 -> none
2-1.2:1.1 -> usblp
2-1.2:1.2 -> none
2-1.2:1.3 -> usb-storage

Trouvez l’identifiant du bus sur lequel est notre imprimante. Ici, c’est « 2-1.2 ».

Il est temps maintenant de connecter l’appareil USB au réseau :

sudo usbip_bind_driver –usbip 2-1

Vous devez avoir une réponse finale du genre :

** Message: bind 2-1.2 to usbip, complete!

Une fois cette commande exécutée, le serveur est maintenant en écoute sur le réseau dans l’attente de connections clients.

Procédure coté client

Installation du logiciel :

sudo apt-get install usbip

Chargez le module “vhci-hcd” :

sudo modprobe vhci-hcd

Pour lister les périphériques USB disponibles sur le serveur :

sudo usbip -l <@ ip>

Bien entendu, remplacer <@ ip> par l’adresse IP du serveur.

Enfin, la commande qui nous apporte un nouveau périphérique USB :

sudo usbip -a <@ ip> X-Y

Remplacer X-Y par le l’identifiant du bus (2-1.2:1.1 pour l’exemple de tout à l’heure).

Si tout va bien, le périphérique est maintenant reconnu par le système. Si c’est un périphérique amovible, le périphérique sera monté; dans le cas d’une imprimante, il faudra l’installer comme une imprimante normale.

Sachez également logiciel client existe aussi sous Windows et je vous donne même le lien de téléchargement.

Tout d’abord, il faut extraire l’archive téléchargée.
En premier lieu, il faut installer le driver en cliquant droit sur le fichier bus.inf, puis sur « Installer ».
Ensuite, exécutez une invite de commande Windows (Menu Démarrer, Exécuter, « cmd »).
Avec la commande « cd » (comme sous Linux !), déplacez vous dans le répertoire où se trouve l’exécutable d’usbip.

Pour lister les périphériques USB disponibles sur le serveur (dans une invite de commande) :

usbip.exe -l <@ ip>

Et ensuite, la commande qui nous apporte un nouveau périphérique USB :

usbip.exe -a <@ ip> USB-ID

C’est bon ! Le périphérique USB doit maintenant être détecté par Windows !

J’espère avoir été clair sur les explications. Si vous avez suivi ce que j’ai fait à la lettre, tout devrait fonctionner. Sinon, vérifiez bien que vous avez choisi le bon identifiant du périphérique USB.
J’ai testé et ça fonctionne : Imprimante USB transformée en imprimante réseau, disque dur USB partagé sur le réseau, Webcam utilisée comme caméra de surveillance.

  • fred

    Bonjour,

    Le principe est intéressant, mais cela nécessite toujours que l’ordinateur auquel l’imprimante est branchée soit en route : dans ce cas, autant configurer CUPS pour exporter l’imprimante, non ? Pour d’autres genres de périphériques auquel il n’existerait pas de démon réseau, cela peut être utile. Quant au « partage », qu’en est-il quand plusieurs ordinateurs cherchent à accéder au même périphérique USB ? Pour un disque dur, cela ne doit pas être beau à voir ?!?

  • nico

    bonjour,
    je viens de suivre la procédure et j’ai un problème concernant le client sous XP.
    quand je clique droit sur le point.INF, puis menu installer, j’ai le sablié une seconde puis aucun message.

    ensuite quand je lance la commande :
    usbip -a 192.168.50.80 1-2

    voici ce que répond le system :

    usbip dbg: usbip_network.c: 229 (tcp_connect ) trying 192.168.50.80 port 3240

    usbip dbg: usbip_network.c: 249 (tcp_connect ) connected to 192.168.50.80:3240
    usbip dbg: usbip.c: 147 (query_interface0) exportable 1 devices
    usbip dbg: usbip.c: 164 (query_interface0) 1-2: unknown vendor : unkn
    own product (1516:8628)
    usbip dbg: usbip.c: 165 (query_interface0) : /sys/devices/pci0000:
    00/0000:00:0f.2/usb1/1-2
    usbip dbg: usbip.c: 166 (query_interface0) : (Defined at Interface
    level) (00/00/00)
    usbip dbg: usbip.c: 186 (query_interface0) : 0 – unknown class /
    unknown subclass / unknown protocol (08/06/50)
    usbip dbg: usbip.c: 189 (query_interface0)
    usbip dbg: usbip_network.c: 229 (tcp_connect ) trying 192.168.50.80 port 3240

    usbip dbg: usbip_network.c: 249 (tcp_connect ) connected to 192.168.50.80:3240
    usbip err: usbip_vbus_ui.c: 49 (usbip_vbus_dev_node_name) usbvbus interface is
    not registered

    usbip err: usbip.c: 205 (import_device) open vbus driver
    usbip err: usbip.c: 309 (attach_device) query

    —————————————————-

    et rien ne se passe.
    Normalement, c’est une clé USB.
    le serveur est sur ubuntu 9.1

    qu’en pensez vous ?

  • zeebra

    Bonjour,
    alors ces tutos je les trouves en peu partout casi identiques, bon pas grave, mais je me demande si vous avez tous testé la version windows et si oui sous quelle version de windows ?? car elle ne semble pas fonctionnner (win7 , xp) meme sur le forum officiel aucune reponse concrete!

    impossible de monter l’usb avec un client windows et bisarrement tout le monde a les memes problemes.

  • zeebra

    nico , cela fait 2 jours que je suis dessus, et je pense que nombreux qui mettent des totus ne l’ont pas testé eu meme ou partiellement. meme sur le forum officiel:
    http://sourceforge.net/projects/usbip/forums

    a moins que notre ami Emilien donne une reponse.

  • zeebra

    au fait, j’ai exactement le meme probleme que toi et tout les autres aussi que j’ai pu croiser sur la toile.

  • Oscar

    Bonjour,

    J’ai suivi à la lettre le tutorial mais j’obtiens le message ci-dessous.
    Avant que je finisse par aller dans le code source pour comprendre, auriez-vous une idée de ce qui peut clocher?

    Merci.

    root@ubuntu:~# usbip_bind_driver -usbip 2-1

    ** (process:7500): WARNING **: read config and ninf value, removed?

    ** (process:7500): WARNING **: unbind drivers of sbip, failed
    root@ubuntu:~#

  • Sam

    Salut Oscar
    Une chite erreur s’est glissée dans le tuto. Pour connecter ton periphérique il faut taper usbip_bind_driver –usbip 2-1 au lieu de usbip_bind_driver -usbip 2-1
    il faut 2 moins.Je me suis fais avoir aussi.
    Cela dit question plus terre à terre. Comment qu’on fait pour monter le perif une fois qu’il est mappé.
    Aux bonnes âmes qui passent par là : d’avance merci

  • Fehmi Ben Njima

    bonjour , je voudrait utilisé cette solution pour partagé un dongle de protection sur le resaux afn que je ne soit pas obligé de metre le dongle dans le pc des etudiant , des cas de vol de dongle on eté fait dans le passé j’aimerais savoir s’il est possible que 2 ou plusieur pc puisse monter le dongle usb en meme temp , puisque c’est un peripherique en lecture seulle il ne devrai pas y avoir de probleme pour que plusieur pc puisse acedé au meme peripherique en meme temp , je cherhce juste un moyen pour que usb puisse acepté de partagé le meme peripherique plusieur fois
    sur le resaux

  • Binome Teknocif

    Idem que Fehmi … j’ai quelques soucis à utiliser des dongles HASP (aladin v3 ou v4 par exemple) .. Je cherche, modifie le code mais rien ny fait…. @Fehmi, avez vous réussi à utiliser vos dongles sur un seul client ?