
我有一個基於 libusb 的程序,無法在新安裝的 Ubuntu 上開啟 USB 設備,因為它缺乏權限。
這個解決方案可能對我有用,但它需要手動指定每個設備 - 而且我有很多設備。所以我嘗試了這個(在文件中/etc/udev/rules.d/41-cvs-permissions.rules
):
SUBSYSTEM=="usb", MODE:="0666"
我省略了 VID 和 PID,希望它能簡單地將規則套用到所有裝置。它肯定有一些效果,但效果相當奇怪:libusb 現在只檢測到 2 個,而不是檢測到 5 個無法打開的設備 - 兩者都是 USB 主機控制器,而不是實際設備。
如何實現我想要的?
答案1
我處理 USB 裝置的方式是授予特定群組對所有這些裝置的存取權。
作為根用戶:
echo 'SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"' > /etc/udev/rules.d/00-usb-permissions.rules
udevadm control --reload-rules
本質上,它的作用是向 Plugdev 群組的成員授予任何 USB 裝置的讀寫存取權。
答案2
我同意使用 VID/PID 進行規則配對並不是一個確定的解決方案。但是,您可以在同一個規則中使用多個設備,而不必像以前那樣盲目地針對所有 USB 設備。使用DRIVER
名稱 ( usb-storage
, usbhid
,..) 或KERNEL
名稱 ( tty*
, ,..)的範例sd*
,甚至使用最小正規表示式 ( sd[a-z][0-9]*
, usb*
)。
您應該尋找它們屬性的相似之處。
- 刪除所有這些設備
將目前設備清單保存在
/dev
ls /dev > /tmp/dev_list0.txt
插入目標裝置之一
將設備清單儲存在另一個檔案中
ls /dev > /tmp/dev_list.txt
比較檔案、
>
新增設備、<
刪除設備$ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt 85a86,87 > sdc > serial 89a92,93 > sg4 > sg5 93a98 > sr1 194a200,201 > ttyUSB0 > ttyUSB1
這是 3G 數據機。
檢查您需要的所有介面的屬性,例如:
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
答案3
以下是解鎖硬體存取權限的最簡單解決方案:
sudo chmod -R 777 /dev/bus/usb/