ソフトウェアが USB デバイスにアクセスできるようにするにはどうすればよいですか?

ソフトウェアが USB デバイスにアクセスできるようにするにはどうすればよいですか?

権限がないため、新しくインストールした Ubuntu で USB デバイスを開くことができない libusb ベースのプログラムがあります。

この解決策おそらく私の場合はうまくいくでしょうが、各デバイスを手動で指定する必要があります。そして、私はかなりの数のデバイスを持っています。そこで、これを試しました (ファイル内/etc/udev/rules.d/41-cvs-permissions.rules):

SUBSYSTEM=="usb", MODE:="0666"

VID と PID を省略して、すべてのデバイスにルールが適用されることを期待しました。確かに効果はありますが、その効果はかなり奇妙です。開くことができない 5 つのデバイスを検出する代わりに、libusb は 2 つのデバイスのみを検出します。どちらも USB ホスト コントローラーであり、実際のデバイスではありません。

望むものを達成するにはどうすればいいでしょうか?

答え1

USB デバイスを扱う方法は、特定のグループにすべてのデバイスへのアクセス権を与えることです。

ルートとして:

echo 'SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"' > /etc/udev/rules.d/00-usb-permissions.rules
udevadm control --reload-rules

基本的に、これは plugdev グループのメンバーに任意の USB デバイスの読み取りおよび書き込みアクセスを許可します。

答え2

VID/PID を使用してルールを一致させることは確実な解決策ではないことに同意します。ただし、あなたが行ったようにすべての USB デバイスを盲目的にターゲットにすることなく、同じルールで複数のデバイスを処理できます。最小限の正規表現 ( 、)を使用しても、DRIVER名前 ( usb-storage、、usbhid..) またはKERNEL名前 ( tty*、、sd*..)を使用する例。sd[a-z][0-9]*usb*

それぞれの属性の類似点を探す必要があります。

  1. すべてのデバイスを削除
  2. 現在のデバイスリストを保存する/dev

    ls /dev > /tmp/dev_list0.txt
    
  3. 対象デバイスの1つを接続します

  4. デバイスのリストを別のファイルに保存する

    ls /dev > /tmp/dev_list.txt
    
  5. ファイルの比較、>追加されたデバイス、<削除されたデバイス

    $ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt
    85a86,87
    > sdc
    > serial
    89a92,93
    > sg4
    > sg5
    93a98
    > sr1
    194a200,201
    > ttyUSB0
    > ttyUSB1
    

    これは3Gモデムです。

  6. 必要なすべてのインターフェースの属性を確認します。例:

    udevadm info --attribute-walk --name=/dev/ttyUSB0
    

必要なすべてのデバイスに対して同じ操作を実行します。方法がわからない場合は、udevadm info --attribute-walk --name=...出力をアップロードして質問にリンクしてください。

すべてのUSBデバイスが にノードを作成するわけではないことに注意してください/dev。 SYSFSツリーでそれらを探す必要があります/sys。 次に、次の方法でそれらの属性を確認します。--path

udevadm info --attribute-walk --path=...

udev上記と同じ手順を使用して、イベントの監視によって作成されたデバイス ノードを確認できます。

udevadm monitor

答え3

ハードウェアへのアクセスをロック解除する最も簡単な解決策は次のとおりです。

sudo chmod -R 777 /dev/bus/usb/

関連情報