Amélioration du VirtualHub pour Linux

Amélioration du VirtualHub pour Linux

Linux est un OS qui est beaucoup utilisé dans l'IoT, malheureusement pour les utilisateurs qui découvrent cet OS, il peut être assez déroutant. Par exemple, par défaut, Linux bloque les accès en écriture aux périphériques USB pour les utilisateurs "non-root". Il n’est pas très facile de configurer une application pour qu'elle démarre automatiquement au boot. Cette semaine, nous allons parler de deux petites améliorations qui vont faciliter la vie des utilisateurs de Linux.



Nous avons ajouté deux options au VirtuaHub qui permettent de modifier la configuration de Linux. L'une permet à tous les utilisateurs de communiquer avec les modules Yoctopuce, et l'autre permet d'installer le VirtualHub comme un service.

Les règles UDEV


Comme nous l'avons dit, par défaut Linux empêche les utilisateurs "standard" de communiquer avec les périphériques USB. Cette vérification est effectuée par le service UDEV qui est responsable de gérer les périphériques du PC.

Pour autoriser touts les utilisateurs à communiquer avec les modules Yoctopuce, il faut ajouter une règle UDEV et redémarrer la machine. Cette procédure est décrite dans la documentation des modules Yoctopuce et nous avons aussi un article sur le sujet.

Toutefois, nous avons décidé de simplifier la vie des utilisateurs en ajoutant une option de démarrage au VirtualHub afin qu'il enregistre automatiquement une règle qui autorise tous les utilisateurs à communiquer avec les modules Yoctopuce. Notez que cette règle modifie uniquement les accès aux modules Yoctopuce branchés sur les ports USB. Les autres périphériques ne sont pas touchés par cette règle.

Le VirtualHub


Dorénavant, pour autoriser le VirtualHub à communiquer avec les modules Yoctopuce, il suffit de le lancer une fois avec l'option --install_udev_rule pour créer la règle UDEV. Comme il s'agit d'une modification du système, il faudra l’exécuter avec les droits superviseur à l'aide de la commande sudo

yocto@laptop-linux:~$ sudo VirtualHub --install_udev_rule VirtualHub: UDEV rule added YOU NEED TO REBOOT THE SYSTEM BEFORE THIS RULE IS APPLIED. yocto@laptop-linux:~$



Attention, comme indiqué par le VirtualHub, il est nécessaire de redémarrer la machine afin que la règle UDEV soit appliquée.

Une fois la machine redémarrée, le VirtualHub peut utiliser les modules branchés sur les ports USB sans sudo.

yocto@laptop-linux:~$ VirtualHub [2021-02-23 12:02:20] (01) Yoctopuce VirtualHub debug (Feb 23 2021 09:17:48) [2021-02-23 12:02:20] (01) Serial is VIRTHUB0-317e8cd34f [2021-02-23 12:02:20] (01) NetworkName is VIRTHUB0-317e8c [2021-02-23 12:02:20] (01) LogicalName is not set [2021-02-23 12:02:21] (01) [1]ystream: 2314: Device YHUBETH1-96D1F plugged [2021-02-23 12:02:21] (01) HTTP server is listening port 4444 [2021-02-23 12:02:21] (01) VXI-11 server is listening port 4445 [2021-02-23 12:02:23] (01) Close open HTTP request ...



Les librairies de programmation


Comme nous nous sommes dit que cette fonctionnalité pouvait aussi être utile dans vos applications, nous avons ajouté une nouvelle méthode YAPI.AddLinuxUdevRule() aux librairies de programmation Yoctopuce. Il s'agit du même code qui est utilisé par l'option --install_udev_rule du VirtualHub.

Concrètement, cette méthode crée un fichier /etc/udev/rules.d/51-yoctopuce.rules avec le contenu suivant:

# udev rules to allow write access to all users for Yoctopuce USB devices SUBSYSTEM=="usb", ATTR{idVendor}=="24e0", MODE="0666"



Cette méthode utilise un paramètre force qui permet d'overwriter le fichier s’il était déjà présent. Quand tout se passe correctement, une chaîne de caractère vide est retournée. En cas d'erreur, une chaîne qui commence par "error:" puis le message d'erreur est retournée.

Voici par exemple son utilisation en Python:

# do not forget to reboot after that
res = YAPI.AddUdevRule(True)
if res.startswith("error:"):
    print("Unable to register UDEV rules.")
    sys.exit(res)



Attention, cette commande ne fait qu'ajouter la règle UDEV au système, pour qu'elle soit active, il faut redémarrer le PC pour que le service UDEV redémarre et que cette règle soit appliquée. Notez que cette fonction retourne une erreur si cette fonction est appelée sous Windows, OSX ou Android.


Démarrage du VirtualHub au boot


Nous avons aussi facilité l'installation du VirtualHub en service pour les distributions qui utilise systemd (Debian, Ubuntu, Raspberry Pi OS, etc.). Il n'est plus nécessaire d'installer manuellement le script de démarrage. Nous avons ajouté deux options qui permettent d'ajouter et d’enlever le VirtualHub dans la liste de services à démarrer lors du boot.

L'option -i ajoute le VirtualHub aux services et le démarre. Ainsi, le VirtualHub est disponible en permanence, même si la machine redémarre. Par défaut, les settings du service VirtualHub sont stockés dans le fichier /etc/vhub.byn. Notez que les autres options passées lors de cette commande seront utilisées lors du démarrage du service.


Par exemple la commande suivante

yocto@laptop-linux:~$ sudo VirtualHub -i -c /my_configfiles/vhub.byn -p 1234


enregistre un service qui démarre le VirtualHub avec les options -c /my_configfiles/vhub.byn -p 1234. C'est-à-dire que le VirtualHub sauvera ses paramètres dans le fichier /my_configfiles/vhub.byn et utilisera le port TCP 1234.

Notez que nous avons utilisé la commande sudo afin d'octroyer temporairement les droits superviseur au VirtualHub afin qu'il puisse enregistrer le script de démarrage.

L'option -u, quant à elle, désinstalle le VirtualHub de la liste des services.

Conclusion


Ces nouvelles options devraient faciliter l'utilisation du VirtualHub, particulièrement si vous avez installé le VirtualHub à l'aide d'apt-get. La règle UDEV et le script de démarrage que le VirtualHub génère devraient convenir à la plupart de scénarios. Si vous avez des besoins plus spécifiques, vous pouvez toujours vous référer à nos deux précédents articles qui expliquent comment créer une règle UDEV et comment démarrer une application au boot.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.