web-dev-qa-db-ja.com

Android電話が指定/選択されたUSBポートに接続されている場合にスクリプトを実行する

udevルールに問題があります。現時点では、Android電話がコンピューターのUSBポートに接続されるたびにスクリプトを実行するためにudevルールをセットアップしました。しかし、すべてからスクリプトを実行したくない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
Deep_Horizons

一般に、接続されたデバイスは、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(root hub)、Port:4(external usb port)、Config:1(plugged device)、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にシリアルポートを作成します。差し込まれた新しいデバイスについては、 SBデバイスへのソフトウェアアクセスを許可する方法?

    udevadm info -a /dev/ttyACM0
    
  • 別の方法として、ポートを取得するにはdmesgまたは:

    tail -f /var/log/kernel.log
    

次に、KERNELS=="2-1.4"またはKERNELS=="2-1.4:1.[0-9]*"にポート番号を使用します

参照:

1
user.dz