web-dev-qa-db-ja.com

USBデバイスへのソフトウェアアクセスを許可する方法

新しくインストールしたUbuntuでUSBデバイスを開くことができないlibusbベースのプログラムがあります。これはアクセス許可がないためです。

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

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

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

私が望むものを達成するには?

3
Violet Giraffe

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

ルートとして:

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

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

1
Justin Buser

VID/PIDを使用してルールを一致させることは明確な解決策ではないことに同意します。しかし、すべてのUSBデバイスを盲目的にターゲットにすることなく、同じルールで複数のデバイスを使用できます。 DRIVER name(usb-storageusbhid、..)またはKERNEL name(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
1
user.dz