====== Udev ======
===== Recharger les règles (sans rebooter) =====
udevadm control --reload-rules
===== Règle d'attache automatique d'un device USB à une VM via libvirt =====
* Récupérer les ID Vendeur et Modèle de votre device USB : lsub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 011 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 010 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 009 Device 005: ID 08e6:3438 Gemplus GemPC Key SmartCard Reader
Bus 009 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
* Créer le fichier XML de déclaration du device dans /etc/libvirt/[VM]-[device].xml :
* A l'aide du script suivant, identifier le device USB correspondant : VENDOR=08e6
MODEL=3438
for X in /sys/bus/usb/devices/*; do
if [ "$VENDOR" == "$(cat "$X/idVendor" 2>/dev/null)" -a "$MODEL" == "$(cat "$X/idProduct" 2>/dev/null)" ]
then
echo "$X"
fi
done
* Afficher toutes les informations du device vue par UDEV : udevadm info -q all -a --path=/sys/bus/usb/devices/9-1
looking at device '/devices/pci0000:00/0000:00:13.0/usb9/9-1':
KERNEL=="9-1"
SUBSYSTEM=="usb"
DRIVER=="usb"
[...]
ATTR{idVendor}=="08e6"
[...]
ATTR{idProduct}=="3438"
[...]
* Construire la règle équivalente UDEV correspondante dans le fichier ///etc/udev/rules.d/90-libvirt-usb.rules// : # [VM] - [Device]
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="08e6", ATTR{idProduct}=="3438", RUN+="/usr/bin/virsh attach-device [VM] /etc/libvirt/[VM]-[Device].xml"
ACTION=="remove", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="08e6", ENV{ID_MODEL_ID}=="3438", RUN+="/usr/bin/virsh detach-device [VM] /etc/libvirt/[VM]-[Device].xml"
* Recharger les règles UDEV : udevadm control --reload-rules
* Tester l'ajout et la suppression du device : # udevadm test --action='add' /sys/bus/usb/devices/9-1
run_command: calling: test
adm_test: version 175
This program is for debugging only, it does not run any program,
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
parse_file: reading '/lib/udev/rules.d/42-qemu-usb.rules' as rules file
[...]
parse_file: reading '/etc/udev/rules.d/90-libvirt-usb.rules' as rules file
[...]
ACTION=add
[...]
DRIVER=usb
ID_BUS=usb
[...]
ID_MODEL_ID=3438
[...]
ID_VENDOR=Gemplus
ID_VENDOR_ENC=Gemplus
ID_VENDOR_ID=08e6
[...]
PRODUCT=8e6/3438/100
SUBSYSTEM=usb
[...]
run: '/usr/bin/virsh attach-device [VM] /etc/libvirt/[VM]-[Device].xml'
# udevadm test --action='remove' /sys/bus/usb/devices/9-1
[...]
run: '/usr/bin/virsh detach-device [VM] /etc/libvirt/[VM]-[Device].xml'
Si vous avez bien la ligne ''run:'' dans les deux cas à la fin, c'est que c'est bon.