如何允許軟體存取任何 USB 裝置?

如何允許軟體存取任何 USB 裝置?

我有一個基於 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*)。

您應該尋找它們屬性的相似之處。

  1. 刪除所有這些設備
  2. 將目前設備清單保存在/dev

    ls /dev > /tmp/dev_list0.txt
    
  3. 插入目標裝置之一

  4. 將設備清單儲存在另一個檔案中

    ls /dev > /tmp/dev_list.txt
    
  5. 比較檔案、>新增設備、<刪除設備

    $ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt
    85a86,87
    > sdc
    > serial
    89a92,93
    > sg4
    > sg5
    93a98
    > sr1
    194a200,201
    > ttyUSB0
    > ttyUSB1
    

    這是 3G 數據機。

  6. 檢查您需要的所有介面的屬性,例如:

    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/

相關內容