web-dev-qa-db-ja.com

libusbのudevルールとパーミッションを理解する

スキャナーに問題がありました。 Xsaneはrootとしてのみ機能しました。通常のユーザーとして使用すると、デバイスは見つかりませんでした。ユーザーをグループsanedまたはscannerに追加しても効果がありませんでした。

最後に私は変更することで問題を解決しました

# 'libusb' device nodes
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"

# 'libusb' device nodes
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"

/lib/udev/rules.d/50-udev-default.rules

しかし、なぜこれが機能するのか、そしてそれが何らかのマイナスの副作用を持っているのかどうかはわかりません。これにより、すべてのUSBデバイスのすべてのユーザーに書き込み権限が付与されると思いますが、これが正しいかどうか、なぜ正しいのか、なぜスキャナーの問題が解決されるのかはわかりません。

なぜこれが機能するのか、そして副作用があるかどうか誰でも詳細に説明できますか?.

私のシステムは:ubuntu 12.04、スキャナーはHP PSC 1200 all in oneデバイスhplipはリポジトリからインストールされます。

4
student

Udev(これは人間ですが)が接続されているときにUSBデバイスなどの動的デバイスを管理しているようです。その後、/ devのどこかにそれらをインスタンス化します。 (私の場合は/ dev/bus/usb/002のようです。)この/ devノードにはいくつかの権限が必要です。Udevは/lib/udev/rules.d/のファイルから権限を取得します。エントリへのデバイス。

この場合、タイプがusb_deviceのusbサブシステムからのすべてが、指定されたファイルモードを取得します。 (標準のアクセス許可、664はrw-rw-r-、666はrw-rw-rw-です。)したがって、すべてのUSBデバイスにすべておよびさまざまな書き込みアクセス許可を与えます。すべてのユーザーを信頼しない場合、これは良いことのように聞こえません。あなたが唯一のユーザーであれば、おそらく自分を信頼することができます。 Libusbは、USBデバイスノードに書き込み権限を要求して、そうでない場合は何も拒否します。私はデバイスから読み取ろうとしているだけなので、それはまったく正しくないように思えます。

アクセス許可を使用してより具体的にすることができます。USBベンダー(VID)や製品ID(PID)などのデバイスを指定できます。そのため、スキャナーだけで機能するファイルを作成し、他のすべてのUSBデバイスをデフォルトのアクセス許可のままにすることができます。 https://wiki.archlinux.org/index.php/udev にUdevに関するページがあります。 「60-my-usb-scanner.rules」のように大きな数字で始まるファイルを作成し(大きな数字が優先されます)、次のようなスキャナーをリストするルールがあるとします。

SUBSYSTEM=="usb", ATTRS{idVendor}=="F1E2", ATTRS{idProduct}=="1F2E", MODE="0666"

これは、指定されたデバイスのアクセス許可を設定するだけです(VID = 0xF1E2、PID = 0x1F2E)。次に、次のコマンドを実行して、Udevにこの変更を通知させます。

udevadm control --reload-rules
4
Barry

libusbは、USBデバイス用のユーザー空間ドライバーを許可するように設計されています。つまり、アプリケーションがコマンドを送信できるようにしますlibusb自体がデバイスに認識しません。

その結果、libusbはコンピューターからUSBデバイスに渡されるすべてのデータを書き込み操作として扱う必要があります。これには、スキャナーにスキャン機能を説明するコマンドを送信するなどの簡単な書き込みも含まれます。

libusbデバイスへの読み取り専用アクセスは、キーボードやマウスなど、コンピューターに自発的にデータを送信するデバイスでのみ機能します。

4
telcoM