====== 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.