ドライバがUSBデバイスを特定のバスにバインドするのを防ぐにはどうすればよいですか?

ドライバがUSBデバイスを特定のバスにバインドするのを防ぐにはどうすればよいですか?

2つのLogitech Unifyingレシーバーがそれぞれキーボードに接続されている設定があります。受信機の1つはデバイスが接続されている物理マシンで使用され、もう1つはQEMU仮想マシンに転送する必要があります。

次の手順に従って、受信者を手動でバインド解除できます。Linuxカーネルドライバを使用してUSB-HIDデバイスインタフェースをバインド/バインド解除する方法は?。このアプローチにはいくつかの欠点がある。

  • dmesgを見て、デバイス識別子を手動で確認する必要があります。
  • バインド解除プロセスは、仮想マシンがシャットダウンするたびに再起動されるたびに繰り返す必要があります。

その後、USBドライバがバインドするのを防ぐカーネルモジュールオプションを見つけようとしました。quirksオプションusbhid。残念ながら、ベンダーとデバイスIDが同じ2つの同じ受信機があるため、このパラメーターは使用できません。

両方のデバイスは別々のバスで区別できます。つまり、lsusb次のようになります。

Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 002 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver

USBデバイスを特定のバスにバインドするのを防ぐhid-logitech-dj(または)方法はありますか?usbhid

ターゲットシステムは、Linux 3.9カーネルでArch Linux 64ビットを実行します。

答え1

UDEVでは、特定のバスを検索するルールを追加し、オプションを「ignore_device」に設定できます。カーネルのバージョンやオペレーティングシステムに言及しましたか?

答え2

まず見てください私の答えはここにあります- USBデバイスの接続方法を理解するために必要なすべての情報が必要です。

その後、実行中にデバイスを接続して、udevadm monitorどのイベントが開始され、udevadm test --action=<action> <path>どのタスクが実行されているかを確認できます。ウデブ現在服用中です。

システムルールが必要です。パッケージのアップグレードによって上書きされないように、パス内のルールを上書きする/lib/udev/rules.d可能性が高くなります。/etc/udev/rules.d2つのオプションがあります。

  1. /lib/udev/rules.d同じパス/名前にルールをコピーし/etc/udev/rules.dて編集します。デバイス/バスの組み合わせを除外するには、一致するフィルタを少し変更するだけで、最も簡単です。 Udevは一致するetcルールを持つシステムルールを実行しません。 Otoh udev管理者の変更は、私が手動で追加する必要があります。

  2. 後続のルールを作成する(高い後で実行するようにして、前のルールで実行した操作(削除または変更RUN操作など)をオーバーライドします。

上書きする既存のルールがない場合は、バインド解除/バインドコマンドの実行など、必要な追加操作を実行するルールを追加するだけです。

適切なルールフィルタを見つけるには、デバイスプロパティビューを使用できますusevadm info <path>-aスイッチですべてを得ることができますシステムファイルシステムデバイス属性およびすべての親ノード、一致にも使用できます(属性冗長の場合は最初の一致が使用されます)。

man udevルールの作成に関する詳細な手順については、(7)を参照してください。

関連情報