どのデバイスでもUSBが接続されていることを検出しようとしています。例:携帯電話、バッテリーパック、バイオメトリックシステムなどは、Linuxで認識または認識されない場合があります(ドライバがないか、「運転/実行」がありません)。おそらくLinuxはUSB接続(デバイスとは無関係)を検出し、認識されたデバイスでのみ登録および操作を続行します。たとえば、/dev/bus/usb/などで認識されているUSBデバイスの詳細が一覧表示されます。代わりにUSBスロットに接続されているすべてをキャプチャ/処理したいと思います。これは、おそらく認識されたデバイスでのみ起動されるため、udevadmのようなものに頼ることができないことを意味します。これはまた、曲線の最初に挿入イベントを捕捉しなければならないことを意味する。どうすればいいですか?
答え1
@meuhのコメントに記載されている愚かなデバイスを使用してこれを行うことができるとは思いません。ここで。。実際の通信を使用するデバイスはudevadm monitor
正常に動作します。以下は、Android携帯電話を接続して切断する例です(電源オン)。
$ udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[115749.498687] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
KERNEL[115749.499591] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
UDEV [115749.511659] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
UDEV [115749.516846] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
KERNEL[115767.515839] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
KERNEL[115767.516143] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
UDEV [115767.517088] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
UDEV [115767.522116] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
フラッシュドライブは似ていますが、より詳細な結果を生成します。この情報を使用していくつかのアクションをトリガーするには、出力をファイルにリダイレクトし、それを使用してそのファイルtail
内の新しいアクティビティを監視できます。
Android携帯(オフですが充電中)でテストした結果、出力に変化はlsusb -v |grep Power
ありませんでした。
機器をテストする別の簡単な方法愚かではない基準情報を保存し、現在の情報をその情報と比較します。これを行う方法はいくつかあります。udevadm
考えられる簡単な代替手段は、計測しようとしているデバイスを接続せずにシステムの基準データを簡単に収集することです。例:基準データ収集:lsusb > baseline.txt
現在のデータを確認して比較する:
本当ですが、lsusb> Compare.txt;を実行します。
毎秒現在のUSB接続をベースラインと比較します。
検出時にスクリプトが基準データを更新する場合は、この方法でデバイスの削除を検出することもできます。
答え2
USBのすべてのトラフィックをキャプチャする1つの方法は、usbmonカーネルモジュールを接続した後にWiresharkを使用することです。詳細は以下に示す。
それはあなたが得ることができる「曲線の初期」に関するものです。しかし、私はあなたの意図がある種のプログラム的なトリガー(イベントなど)を使って興味深いことをすることを前提としています。したがって、 "lsusb -t"を実行すると、接続されたUSBデバイスとそのドライバプログラムの静的リストが提供されます(存在する場合)、cronジョブを作成してlsusbを実行し、古いバージョンと比較して接続されたドライバがなくても新しいデバイスが接続されていることを確認します。できます。
この単純な解決策の欠点は、cronが挿入と検出の間に大きな遅延を生じることです。