Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== Udev ====== ===== Recharger les règles (sans rebooter) ===== <code>udevadm control --reload-rules</code> ===== 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 : <code bash>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</code> * Créer le fichier XML de déclaration du device dans /etc/libvirt/[VM]-[device].xml : <code xml><hostdev mode='subsystem' type='usb' managed='yes'> <source> <vendor id='0x08e6'/> <product id='0x3438'/> </source> <alias name='gemplus-key-smartcard'/> </hostdev></code> * A l'aide du script suivant, identifier le device USB correspondant : <code bash>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</code> * Afficher toutes les informations du device vue par UDEV : <code bash>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" [...]</code> * Construire la règle équivalente UDEV correspondante dans le fichier ///etc/udev/rules.d/90-libvirt-usb.rules// : <code># [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"</code> * Recharger les règles UDEV : <code bash>udevadm control --reload-rules</code> * Tester l'ajout et la suppression du device : <code bash># 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' </code> Si vous avez bien la ligne ''run:'' dans les deux cas à la fin, c'est que c'est bon.