Accéder à un périphérique USB à l’autre bout du monde…

Accéder à un périphérique USB à l’autre bout du monde…

    Parfois il peut arriver que vous ayez un périphérique USB qui soit connecté sur un ordinateur, mais vous aimeriez bien le partager pour l’exploiter sur un autre ordinateur.

    Et bien, sachez que cela est tout à fait possible !!!
    Il existe plusieurs solutions permettant cela, majoritairement payantes, mais certaines comme le projet « USBip » disponible sous Linux et Windows, permettent ce genre de partage.

    La description suivante est proposée pour partager un périphérique USB Bluetooth entre deux machines Linux; la machine serveur aura le périphérique USB connecté sur son connecteur USB tandis que le client accèdera virtuellement au périphérique au travers le réseau qui les relie.

    Références :

    • https://usbip.sourceforge.net/
    • https://sourceforge.net/p/usbip/git-windows/ci/master/tree/trunk/userspace/README
    • https://bbs.archlinux.org/viewtopic.php?id=233424
    • https://github.com/dorssel/usbipd-win

    La solution USBip est à l’origine le projet d’un japonnais et s’appuie sur l’architecture suivante :

    Installation et configuration coté SERVEUR

    La documentation disponible sur le site du projet n’est pas tout à fait à jour; je reprend le descriptif d’installation tout en commentant la méthode d’installation et son utilisation.

    Commencer par installer le paquet « USB IP » :

    Maintenant que le paquet applicatif est installé, il faut activer le service…. sauf que le paquet n’apporte aucun système de démarrage. Comme nous sommes actuellement en plein « SystemD », je vous propose de démarrer le service en créant le fichier « /etc/systemd/system/usbip.service » avec votre éditeur de texte préféré :

    Une fois le fichier créé, il est possible de lancer le service sur SERVEUR :

    La commande « systemctl status usbip.service » permet de voir ainsi que le binaire est bien lancé, mais qu’en plus, il écoute sur le port 3240. C’est en effet le port TCP quis era utilisé par le service pour faire communiquer les machines et ainsi partager, les périphériques USB.

    Faites donc attention à vos Firewall, ils doivent laisser passer ce port TCP sous peine d’avoir des problèmes de laisons avec le client par la suite…

    Avant d’aller plus loin :

    • Vérifier que vos périphériques USB sont bien connectés sur votre SERVEUR
    • Vérifier que votre machine SERVEUR est sur la même plage d’adresse IP que votre machine CLIENTE (normalement le cas pour une utilisation sur réseau local)
    • Lancer les commandes suivantes pour s’assurer que les modules kernel sont correctement installés et chargés :

    Il ne reste plus qu’à regarder comment son vu les périphérique USB par « USBip » sur le SERVEUR :

    En utilisant la commande standard Linux « lsusb« , on trouve ainsi tous les périphériques et Hub USB connectés à la machine : dans mon cas, je n’ai qu’un seul périphérique USB connecté, un dongle USB Bluetooth… Mais on pourrait trouver un clavier, une sourie, un disque dur, un lecteur de carte ou de DVD, etc… Et tout cela aurait pu être « exportable » !!!

    Remarquez bien le résultat de la commande « usbip list -l » : elle renvoie l’ID du bus qui détermine le périphérique USB que nous souhaitons partager; ici, l’ID est : 3-1.7
    Il ne nous reste plus qu’à indiquer que nous partageons ce périphérique sur le réseau :

    Si vous rencontrez un message du type « usbip: error: device on busid 3-1.7 is already bound to usbip-host » cela signifie que vous avez déjà partagé le périphérique USB; il faut alors le supprimer de la liste des périphériques partagés :

    Installation et configuration coté CLIENT

    L’installation du service est presque pareil, mais cette fois, nous ne sommes pas « serveur » et nous n’aurons pas à créer un service SystemD pour lancer un démon « USBip »…

    Installons et recherchons les périphériques partagés :

    Comme on peut le voir, on retrouve notre ID (3-1.7) du périphérique USB partagé – le dongle Bluetooth.

    Maintenant que l’on sait qu’il est accessible, il ne reste plus qu’à le faire reconnaitre par la machine cliente; pour cela, on va attacher l’ID du périphérique à la machine :

    Parfait !
    Notre périphérique est maintenant monté sur la machine CLIENTE… Vous n’avez plus qu’à l’exploiter 😉

    Vérifications et problèmes / résolutions

    Parmi tous les problèmes que j’ai pu rencontrer dans mon environement (un peu spécial !), on peut compter sur :

    • Sécurité SELinux
    • Firewall
    • Oublie d’import des modules Kernel

    Sur le client, pour valider que le périphérique est bien monté, vous pouvez également lancer la commande qui valide votre configuration :

    Comments

    No comments yet. Why don’t you start the discussion?

    Laisser un commentaire

    Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.