Executar script quando o Android Phone estiver conectado à porta USB especificada / selecionada

3

Estou com alguns problemas com a regra udev . No momento, eu tinha minha configuração de regra do udev para executar um script sempre que um telefone Android estivesse conectado a qualquer porta USB no computador. Mas eu não quero que o script seja executado em todas as portas USB. Eu só quero que o script seja executado no exemplo quando o telefone estiver conectado à 4ª porta USB e nada deve acontecer quando estiver conectado à 1ª, 2ª ou 3ª porta USB.

Como posso conseguir isso e como posso determinar, por exemplo, a quarta porta USB?

Eu apreciaria muito sua ajuda.

Minha regra atual do udev:

KERNELS="1-2:1.1", ACTION=="add", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}!="1d6b", ATTRS{idVendor}!="203a", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/bin/tmp.sh $attr{serial}"
    
por Deep_Horizons 03.06.2015 / 12:34

1 resposta

1

Em geral, qualquer dispositivo conectado obtém alguns nós correspondentes em SYSFS /sys , alguns adicionam outros nós em /dev .

  • Usando o sysfs:

    1. Monitore os eventos do udev

      sudo udevadm monitor
      
    2. Conecte seu dispositivo e observe a saída de comando anterior, por exemplo

      monitor will print the received events for:
      UDEV - the event which udev sends out after rule processing
      KERNEL - the kernel uevent
      
      KERNEL[5797.642807] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4 (usb)
      KERNEL[5797.643604] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0 (usb)
      UDEV  [5797.659463] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4 (usb)
      UDEV  [5798.753894] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0 (usb)
      

      Portanto, no formato bus-port.port:config.interface , consulte referência : ônibus: 2, porta 1 ( hub raiz), Porta: 4 (porta usb externa), Config: 1 (dispositivo conectado), Interface: 0

      O nome completo da porta USB é 2-1.4 .

    3. Para verificar seus atributos:

      udevadm info -a /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4
      

      Ou o dispositivo (essa porta é o nó pai dele)

      udevadm info -a /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0
      
  • Usando /dev :

    Telefone Android como um modem, cria uma porta serial em /dev . Para conhecer o novo dispositivo conectado, consulte Como permitir o acesso de software a qualquer dispositivo USB?

    udevadm info -a /dev/ttyACM0
    
  • Outra maneira de obter port é dmesg ou:

    tail -f /var/log/kernel.log
    

Em seguida, use o número da porta para KERNELS=="2-1.4" ou KERNELS=="2-1.4:1.[0-9]*"

Referências:

por user.dz 05.06.2015 / 22:02