USB-TMC en non root
Passer un périphérique USBTMC en accès non-root sous Linux
Cette page décrit la procédure permettant d'accéder à un instrument USBTMC (USB Test & Measurement Class) sans utiliser le compte root.
Cas rencontré avec un multimètre Multicomp Pro MP730027 (OWON XDM3041 rebrandé) apparaissant sous Linux comme :
/dev/usbtmc0
Symptôme
Le périphérique est créé avec les droits suivants :
$ ls -l /dev/usbtmc0 crw------- 1 root root 180, 176 Jul 25 23:03 /dev/usbtmc0
Seul l'utilisateur root peut alors accéder au périphérique.
Les programmes Python utilisant PyVISA ou l'accès direct à /dev/usbtmc0 doivent être exécutés avec :
sudo python3 programme.py
Ce n'est pas souhaitable.
Création d'un groupe dédié
Créer un groupe :
sudo groupadd usbtmc
Ajouter l'utilisateur au groupe :
sudo usermod -aG usbtmc admin
Remplacer admin par votre nom d'utilisateur si nécessaire.
Vérifier :
id
Le groupe doit apparaître dans la liste :
groups=1000(admin),...,1002(usbtmc)
Une reconnexion est généralement nécessaire pour prendre en compte l'appartenance au nouveau groupe.
Première tentative
On pourrait être tenté d'utiliser :
SUBSYSTEM=="usbtmc", GROUP="usbtmc", MODE="0660"
Cependant cette règle ne fonctionne pas sur certaines distributions Linux récentes.
Diagnostic avec udev
Identifier le périphérique :
udevadm info -q path -n /dev/usbtmc0
Afficher les attributs :
udevadm info -a -n /dev/usbtmc0
Dans notre cas :
looking at device ...
KERNEL=="usbtmc0"
SUBSYSTEM=="usbmisc"
Le périphérique n'appartient donc pas au sous-système usbtmc mais au sous-système usbmisc.
C'est la raison pour laquelle la première règle ne fonctionnait pas.
Création de la règle udev
Créer le fichier :
sudo vi /etc/udev/rules.d/99-usbtmc.rules
Avec le contenu :
SUBSYSTEM=="usbmisc", KERNEL=="usbtmc[0-9]*", GROUP="usbtmc", MODE="0660"
et
sudo vi /etc/udev/rules.d/99-owon-usb.rules
avec
SUBSYSTEM=="usb", ATTR{idVendor}=="5345", ATTR{idProduct}=="1234", GROUP="usbtmc", MODE="0660"
Rechargement des règles
Recharger la configuration :
sudo udevadm control --reload-rules
Débrancher puis rebrancher l'instrument USB.
Cette étape est importante : les nouvelles permissions sont appliquées lors de la création du périphérique.
Vérification
Après reconnexion du multimètre :
ls -l /dev/usbtmc0
Le résultat doit être similaire à :
crw-rw---- 1 root usbtmc 180, 176 Jul 25 23:15 /dev/usbtmc0
Le groupe est maintenant :
usbtmc
et les membres de ce groupe peuvent accéder au périphérique sans privilège root.
Test en Python
Exemple minimal :
import usbtmc
instr = usbtmc.Instrument(0x5345, 0x1234)
instr.write("*IDN?")
print(instr.read())
Sans utiliser sudo :
multicomp pro,MP730027,2210101,V3.1.0,1
Vérification de l'accès avec PyVISA
Installation :
pip install pyvisa pyvisa-py
Détection des instruments :
import pyvisa rm = pyvisa.ResourceManager() print(rm.list_resources())
Le multimètre doit maintenant être accessible sans exécuter Python en root.