私は最近PyUSBをいじってみましたが、Linux(Ubuntuにはlibusb 0.1と1.0、およびOpenUSBがあります)で美しく動作することがわかりました...ただし、root権限でプログラムを実行した場合に限ります(sudo
もちろん)。
昇格された特権が必要な理由、さらに重要なことに、通常のユーザーアカウントで機能するようにアクセス許可を変更できるかどうか、誰かに教えてもらえますか?
udevルールを作成することで、USBデバイスノードの権限を変更できます。たとえば、次の行をファイルに追加しました/etc/udev/rules.d/
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"
これにより、デバイスノードの所有者がではroot:usbusers
なくに設定されますroot:root
usbusers
グループに自分を追加した後、デバイスにアクセスできます。
私がここで与えた答えを参照してください:
pyusbを使用してこのデバイスと通信するにはどうすればよいですか?
つまり
、通常のユーザーがアクセスできるようにする特定のデバイスのudevルールファイルを設定します。これにより、ベンダーID、製品ID、およびグループが定義されます。
ベンダーと製品IDは、コマンドを使用して見つけることができますlsusb
。
1.udevルールファイルを作成します
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="171b", ATTRS{idProduct}=="2001", MODE="660", GROUP="plugdev"
これを(たとえば)/lib/udev/rules.d/50-YourSoftwareName.rulesというファイルに入れます(ファイルの命名規則についてはman udevを調べてください)
注:古い命名規則では/etc/udev/rules.dが使用されていました/filename.rules、変更されました。
2.ユーザー名をplugdevグループに追加します
adduser username plugdev
3.udevシステムに変更を強制的に表示させます
sudo udevadm control --reload
(つまり、マイナスマイナスリロード)
sudo udevadm trigger
4.デバイスを取り外して再接続するか、マシンを再起動します
最終的に、グループplugdevのすべてのメンバーがデバイスにアクセスできるようになります。
編集:一部のシステムでは、グループplugdev
が必要なグループではない場合があることに注意してください。input
プラグを差し込んでいるものによっては、私の経験ではグループになることもあります。
libusb
任意のUSBデバイスを任意の方法で操作できます。たとえば、外付けUSBハードディスクをフォーマットできます。
一般に、すべての直接ハードウェアアクセスにはroot
特権が必要ですが、実際には完全なroot
特権は必要ないと思いますが、。だけで問題ありませんCAP_SYS_RAWIO
。