Lubuntu 16.04.3 LTSでHIDAPIを使用して、カスタムUSB HIDデバイスとそれに対応するデスクトップアプリを作成しています。ここでは、myapp
と呼びます。
どうやら、$ ./myapp
を実行すると、LIBUSB_ERROR_ACCESS
でlibusb_open()
が失敗します。 (私のデバッガーでは-3
として表示されます;列挙型があまりうまく文書化されていないようであるため、それを理解するのに時間がかかりました)
しかし、$ Sudo ./myapp
を実行すると成功します。myapp
にroot権限を与えたくないので、USB機器なしでUSBデバイスと通信するにはどうすればよいですか?
私は答えを求めていました here ですが、まさにこの時点で放棄されたようです。それはユーザーの許可について何かを言っていますが、私のシステムでそれを見つけることができないようです。自分で追加できるusb
またはlibusb
というグループが見つかるかもしれないと思ったが、そのような運はなかった。
別のSEサイトに関するこの質問 には、いくつかの厳格なテキストファイルを使用して、グローバルに(おそらく悪いアイデア)または特定のデバイスに対するアクセス許可を変更する回答がありますが、
myapp
を壊さないようにするにはどうすればよいのでしょうか?myapp
はユーザー権限でまだUSBと通信できません。私が本当に探しているのはまだ「マグルの微調整」ではありませんが、少なくともこれは機能します:
どうやらudevには2つのディレクトリがあります(理由はわかりません):
/etc/udev/rules.d
/lib/udev/rules.d
私は/lib
の1つをいじり、どこにも行かなかった。 /etc
one here が見つかりましたが、動作します:
SUBSYSTEM=="usb", ATTRS{idVendor}=="VID", ATTRS{idProduct}=="PID", MODE="0666"
を入れる
VID
は、問題のデバイスの SB-IFが割り当てたベンダーID です*PID
は、問題のデバイスのベンダーが割り当てた製品IDです*0666
は、この行に一致するすべてのものへの普遍的な読み取り/書き込みアクセスを提供します
* $ lsusb
は、接続されているすべてのUSBデバイスとそのIDを表示します。
/etc/udev/rules.d/xx-my-rule.rules
(root/Sudo権限が必要な場合があります)
xx
は50を超える任意の数値です(デフォルトは50であり、数値が大きいほど優先されます)my-rule
はあなたがそれを呼びたいものです.rules
で終わる必要があります次にudevadm control --reload-rules
(root/Sudo権限も必要になる場合があります)、その特定のVID/PIDペアに対して「機能する」だけです。
パーミッションをもう少し厳しくする別のオプションは、TAG+="uaccess"
の代わりにMODE="0666"
を使用することです。これにより、すべてのユーザーではなく、現在ログインしている(物理)ユーザーへのアクセスが制限されます。ありがとう@Lekensteyn!
これに苦労している他の人のために-Ubuntu 18.04でudevルールにGROUP = "plugdev"を追加して機能させる必要がありました。
bTD-400アダプターの場合、ファイル/ etc/udev/rules.d/51-usb-device.rulesは次のようになります。
SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="21e8", GROUP="plugdev", TAG+="uaccess"