Выполнить скрипт, когда телефон Android подключен к указанному / выбранному порту USB

У меня возникли проблемы с правилом udev. На данный момент я настроил правило udev для выполнения сценария, когда телефон Android подключен к любому USB-порту компьютера. Но я не хочу, чтобы скрипт выполнялся с каждого USB-порта. Я просто хочу, чтобы скрипт выполнялся, например, когда телефон подключен к 4-му USB-порту, и ничего не должно происходить, когда он подключен к 1-му, 2-му или 3-му USB-порту.

Как мне этого добиться и как определить, например, 4-й порт USB?

Буду очень признателен за вашу помощь.

Мое текущее правило 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}"
3
задан 5 June 2015 в 21:36

1 ответ

В целом, любое включенное устройство получают некоторые соответствующие узлы в SYSFS /sys, некоторые включают другие узлы /dev.

  • Используя sysfs:

    1. Следите за развитием udev событий

      sudo udevadm monitor
      
    2. Включите свое устройство и наблюдайте за предыдущим выводом команды, примером

      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)
      

      Таким образом в формате bus-port.port:config.interface посмотрите ссылку: Bus:2, Port:1 (базируются концентратор), Port:4 (внешний USB-порт), Config:1 (включенное устройство), Interface:0

      Полное имя USB-порта 2-1.4.

    3. Проверять его атрибуты:

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

      Или устройство (что порт является родительским узлом его),

      udevadm info -a /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0
      
  • Используя /dev:

    Телефон на базе Android как модем, это создает последовательный порт в /dev. Для знания нового включенного устройства Посмотрите, Как предоставить доступ программного обеспечения к каким-либо USB-устройствам?

    udevadm info -a /dev/ttyACM0
    
  • Иначе, для получения порта dmesg или:

    tail -f /var/log/kernel.log
    

Затем используйте номер порта для KERNELS=="2-1.4" или KERNELS=="2-1.4:1.[0-9]*"

Ссылки:

1
ответ дан 5 June 2015 в 21:36

Другие вопросы по тегам:

Похожие вопросы: