USB-TMC en non root

De knowledge
Aller à la navigation Aller à la recherche

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.