regras do udev destinadas a todos os dispositivos USB

5

Estou tentando executar um script sempre que um USB é conectado. O que eu tenho atualmente é um script de demonstração em /usr/local/test.sh :

#!/bin/bash

touch /home/kfir/test.txt

Eu também tenho um arquivo de regras que tenta combinar QUALQUER USB em /etc/udev/rules.d/100-usb.rules :

ACTION=="add", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/test.sh"

O problema é que o arquivo test.txt nunca está sendo criado. Eu também recebo o seguinte erro:

Não tenho a menor ideia do que fazer agora. O que eu quero alcançar é bastante simples, quando há um dispositivo de armazenamento USB sendo conectado, execute um script simples (criando um arquivo test.txt neste caso).

P.S. o arquivo test.sh está funcionando bem. Quando eu o executei manualmente, ele cria o arquivo test.txt .

    
por kfirba 04.09.2015 / 16:06

2 respostas

4

Todo dispositivo USB? Use esta linha simples em /etc/udev/rules.d/100-usb.rules

ACTION=="add", RUN+="/bin/mkdir /tmp/folder1"

e reinicie o udev

sudo service udev restart

Isso é dispensável

ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", 
    
por A.B. 04.09.2015 / 18:46
4
  • Esses ATTRS{idVendor}=="****", ATTRS{idProduct}=="****" segmentam qualquer coisa, você pode descartá-los da regra.

  • No entanto, dessa forma, ele será acionado para muitos nós de árvores e para todos os dispositivos, mesmo que não sejam USB.

    Experimente esta regra que segmenta um único nó e apenas dispositivos USB:

    ACTION=="add", SUBSYSTEM=="usb", DRIVER=="usb", RUN+="/usr/local/test.sh"
    
  • Como consegui isso:

    1. Executar udevadm monitor -u
    2. Conecte uma unidade flash, a saída é a mesma que esta:

      UDEV  [13394.985946] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3 (usb)                                                                        
      UDEV  [13394.991173] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0 (usb)                                                                
      UDEV  [13394.992509] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9 (scsi)                                                         
      UDEV  [13394.993436] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9/scsi_host/host9 (scsi_host)                                    
      UDEV  [13395.978250] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9/target9:0:0 (scsi)                                             
      UDEV  [13395.979665] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9/target9:0:0/9:0:0:0 (scsi)                                     
      UDEV  [13395.980363] add      /devices/virtual/bdi/8:32 (bdi)                                                                                        
      UDEV  [13395.981822] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9/target9:0:0/9:0:0:0/scsi_disk/9:0:0:0 (scsi_disk)              
      UDEV  [13395.982998] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9/target9:0:0/9:0:0:0/bsg/9:0:0:0 (bsg)                          
      UDEV  [13395.983447] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9/target9:0:0/9:0:0:0/scsi_device/9:0:0:0 (scsi_device)          
      UDEV  [13395.983970] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9/target9:0:0/9:0:0:0/scsi_generic/sg4 (scsi_generic)            
      UDEV  [13396.473531] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9/target9:0:0/9:0:0:0/block/sdc (block)                          
      UDEV  [13396.528471] add      /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/host9/target9:0:0/9:0:0:0/block/sdc/sdc1 (block)
      
    3. Pegue o nó principal para verificar seus atributos usando:

      udevadm info -a --path=/sys/devices/pci0000:00/0000:00:14.0/usb1/1-3
      

      Saída:

      Udevadm info starts with the device specified by the devpath and then
      walks up the chain of parent devices. It prints for every device
      found, all possible attributes in the udev rules key format.
      A rule to match, can be composed by the attributes of the device
      and the attributes from one single parent device.
      
        looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-3':
          KERNEL=="1-3"
          SUBSYSTEM=="usb"
          DRIVER=="usb"
          ATTR{bDeviceSubClass}=="00"
          ATTR{bDeviceProtocol}=="00"
          ATTR{devpath}=="3"
          ATTR{idVendor}=="125f"
          ATTR{speed}=="480"
          ATTR{bNumInterfaces}==" 1"
          ATTR{bConfigurationValue}=="1"
          ATTR{bMaxPacketSize0}=="64"
          ATTR{busnum}=="1"
          ATTR{devnum}=="5"
          ATTR{configuration}==""
          ATTR{bMaxPower}=="98mA"
          ATTR{authorized}=="1"
          ATTR{bmAttributes}=="80"
          ATTR{bNumConfigurations}=="1"
          ATTR{maxchild}=="0"
          ATTR{bcdDevice}=="0100"
          ATTR{avoid_reset_quirk}=="0"
          ATTR{quirks}=="0x0"
          ATTR{serial}=="2b712383811292"
          ATTR{version}==" 2.00"
          ATTR{urbnum}=="673"
          ATTR{ltm_capable}=="no"
          ATTR{manufacturer}=="ADATA"
          ATTR{removable}=="unknown"
          ATTR{idProduct}=="c96a"
          ATTR{bDeviceClass}=="00"
          ATTR{product}=="ADATA USB Flash Drive"
      
    4. Agora, verificamos apenas 1 dispositivo, se verificarmos mais dispositivos: telefone, mouse ... descobriremos que SUBSYSTEM=="usb" e DRIVER=="usb" são os mesmos para todos os dispositivos USB. Assim, eles podem ser usados para correspondência de regras.

por user.dz 06.09.2015 / 02:18