Cette semaine nous continuons notre série d'articles "Pour les débutants". Nous allons répondre aux deux questions de support qui reviennent le plus souvent au sujet de Linux: Pourquoi l'exécutable ne marche pas? Et, pourquoi j'ai le message d'erreur "the user has insufficient permissions to access USB devices".
Je lance l’exécutable et rien ne se passe
C'est probablement la question que l'on nous pose le plus souvent. Les utilisateurs téléchargent la libraire ligne de commande ou le VirtualHub, lancent l'exécutable mais Linux refuse de l’exécuter.
C'est simplement que vous exécutez la mauvaise version du binaire. Contrairement à Windows ou OSX, Linux peut être installé sur de nombreuses architectures qui sont incompatibles entre elle. C'est pour cette raison que nous fournissons plusieurs versions des binaires du VirtualHub et de la librairie ligne de commande.
Nous fournissons les exécutables pour les 6 architectures les plus répandues:
- Intel 32 bits dans le répertoire 32Bits
- Intel 64 bits dans le répertoire 64Bits
- ARM soft float dans le répertoire armel
- ARM hard float dans le répertoire armhf
- ARM 64 bits dans le répertoire aarch64
- MIPS big-endian dans le répertoire mips
- MIPS little-endian dans le répertoire mipsel
Si vous utilisez la mauvaise version de l'exécutable, parfois un message d'erreur indique que ce n'est pas un exécutable compatible, mais sur certaines distributions minimalistes, comme OpenWRT, le shell rend la main sans aucun message d'erreur, ce qui peut être déroutant.
Pour savoir quel binaire utiliser il faut savoir quel type de CPU votre système utilise, mais aussi dans quel mode il fonctionne. En effet les processeurs Intel peuvent fonctionner en 32 ou 64 bits, les processeurs ARM peuvent fonctionner en "soft float" ou en "hard float" et pour finir les processeurs MIPS peuvent être "little-endian" ou "bin-endian". En générale, il est facile de trouver le type de processeur en regardant sur le site du constructeur, ou à l'aide de la commande uname -m.
Pour le mode de fonctionnement c'est plus compliqué car cela dépend de comment à été compilé le kenel Linux qui est installé. Par exemple sur un Raspberry Pi la distribution officielle Raspbian utilise le mode "hard float" alors que la distribution ARCHLinux utilise le mode "soft float".
Malheureusement il n'y a pas de moyen universel pour déterminer dans quel mode fonctionne votre CPU. Si vous ne savez pas quelle est l'architecture de votre système, le plus simple est d'essayer tous les binaires jusqu'à ce qu'il y en ait un qui s'exécute, c'est pas très propre mais ça marche :-)
l’exécutable retourne le message d'erreur: "the user has insufficient permissions to access USB devices"
Par défaut Linux bloque les accès en écriture aux périphériques USB pour les utilisateurs "non-root". Cette vérification est effectuée par le gestionnaire de périphérique udev.
Pour contourner le problème, la solution la plus basique est de simplement lancer l’exécutable en tant que root à l'aide de la commande sudo.
pi@raspberrypi:~/Binaries/linux/armhf $ sudo ./YModule inventory LIGHTMK3-33FB1 YBUZZER2-345B9 pi@raspberrypi:~/Binaries/linux/armhf $
Cependant, pour plus de confort et de sécurité il est recommander d'ajouter une règle udev pour autoriser les utilisateurs ou un groupe d'utilisateur à accéder en écriture aux périphériques Yoctopuce.
Les règles udev sont stockées dans des fichiers placés dans le répertoire /etc/udev/rules.d. Le nom du fichier doit être auformat ##-nomArbitraire.rules. Lors du démarrage du système, udev va lire dans l'ordre alphabétique tous les fichiers avec l'extension ".rules" de ce répertoire et appliquer les réglés.
Écrire une règles udev est assez complexe, mais nous allons voir comment créer les deux règles qui devraient correspondre à 99% des utilisations. Si ce n'est pas le cas il faudra se tourner vers la documentation officiel pour écrire votre propre règle.
Autoriser tous les utilisateurs à utiliser les modules Yoctopuce
la règle suivante autorise tous les utilisateurs à accéder en lecture et en
écriture aux périphériques Yoctopuce USB. Les droits d'accès pour
tous les autres périphériques ne sont pas modifiés.
# udev rules to allow write access to all users for Yoctopuce USB devices SUBSYSTEM=="usb", ATTR{idVendor}=="24e0", MODE="0666"
Autoriser les utilisateurs d'un groupe à utiliser les modules Yoctopuce
Si vous avez besoin d'encore plus de contrôle il est possible de d'autoriser uniquement un groupe. Par exemple le avec la rêgle suivante seul les utilisateur membre du groupe "yoctogroup" peuvent accéder au modules Yoctopuce.
# udev rules to allow write access to all users of "yoctogroup" for Yoctopuce USB devices SUBSYSTEM=="usb", ATTR{idVendor}=="24e0", MODE="0664", GROUP="yoctogroup"
Pour utiliser une de ces règles il suffit de sauver la règle dans un fichier "51-yoctopuce.rules" et de le placer dans le répertoire "/etc/udev/rules.d" et de redémarrer votre système. Notez que pour ajouter une règle vous aurez besoin d'avoir un accès root sur le système.
Une fois la nouvelle règle installée les utilisateurs Peuvent utiliser les modules Yoctopuce.
pi@raspberrypi:~/Binaries/linux/armhf $ ./YModule inventory LIGHTMK3-33FB1 YBUZZER2-345B9 pi@raspberrypi:~/Binaries/linux/armhf $