2016-11-14 21 views
0

僅在Kubuntu 16.04 64位上進行測試。我有一個應用程序來源不受我控制。它使用了一些libusb的調用,在e.g結束:使用udev-rules不帶sudo的libusb調用

libusb: error [_get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/001/031: Permission denied 
libusb: error [_get_usbfs_fd] libusb requires write access to USB device nodes.         

當運行上述應用程序的根,它按預期工作。 當我改變有關文件一樣的權限:

sudo chmod a+w /dev/bus/usb/001/031 

則應用程序將使用標準用戶權限運行(直到我斷開/重新連接USB設備)。

現在我正在尋找一種方式,例如每次插入特定的USB設備時自動執行chmod a+w。 編寫特定的udev規則可能會有這種可能嗎?

也許其他的解決方案要求的libusb沒有root權限?

解決方案:根據David Grayson的回答,我現在在我的規則文件中增加了一行SUBSYSTEM=="usb"。我的規則文件現在終於看起來像這樣:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666" 
SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666" 

回答

2

我建議你添加在/etc/udev/rules.d一個新的文件名爲usb.rules。它應該有以下內容:

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

這將使所有的USB設備可讀寫所有用戶。

您還可以使用Ignacio的答案中提到的idVendoridProduct屬性將其縮小到特定的USB設備。

+0

我明白了,'MODE ='只是改變了'的/ dev/ttyACM ...'文件的權限,但不是那些條目位於'/ dev /巴士/ USB/...' – Joe

+0

在Unix世界中, 「模式」是通用術語,它指的是文件權限。它不涉及ACM設備。我以前使用libusb成功地使用過這樣的規則。你有沒有嘗試我的規則? –

+0

是的,'SUBSYSTEM ==「usb」'是對'/ dev/bus/usb/...'進行如下'MODE = ...'和'GROUP = ...'影響的技巧。直到之前,我剛剛使用了'SUBSYSTEM ==「tty」'。 – Joe

1

假設的Kubuntu 16.04使用PolicyKit的,把下面的文件中/etc/udev/rules.d,將其命名爲類似於已經存在那裏的文件:

更換兩組「xxxx」分別與設備的廠商ID和產品ID。

+0

將無法​​正常工作,相同的行爲 – Joe

+0

你重新插入設備? –

+0

是的,als還添加了一個'RUN + =「...」'以確保規則將被執行。順便說一句:恕我直言'ID_MM_DEVICE_IGNORE'不再需要在16.04,不是嗎(我知道14.04這樣的調制解調器管理器的麻煩)? – Joe