代码之家  ›  专栏  ›  技术社区  ›  ewall

为什么pyusb/libusb在Linux上需要root(sudo)权限?

  •  10
  • ewall  · 技术社区  · 14 年前

    我一直在玩弄 PyUSB 最近,发现它在Linux上运行得很好(Ubuntu已经 libusb 0.1和1.0,以及 OpenUSB )但仅当我以根权限运行程序时(使用 sudo 当然。

    有人能告诉我为什么它需要提升的权限吗?更重要的是,如果我能以某种方式更改权限,使其适用于普通用户帐户,那我还能告诉我为什么它需要提升的权限吗?

    3 回复  |  直到 7 年前
        1
  •  5
  •   Jörg W Mittag    14 年前

    libusb 允许您以任意方式操作任意USB设备。例如,您可以格式化外部USB硬盘。

    一般来说,所有直接硬件访问都需要 root 特权,尽管我猜实际上已经满了 不需要特权,您可以 CAP_SYS_RAWIO .

        2
  •  11
  •   Ihor Kaharlichenko    9 年前

    您可以通过创建udev规则来更改USB设备节点的权限。 例如,我在 /etc/udev/rules.d/

    SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"
    

    这会将设备节点的所有者设置为 root:usbusers 而不是 root:root

    把自己加入 usbusers 组,我可以访问设备。

        3
  •  3
  •   Community CDub    7 年前

    看看我在这里给出的答案:
    How can I comunicate with this device using pyusb?

    即:
    为您希望普通用户能够访问的特定设备设置udev规则文件。这将定义供应商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

    三。 强制udev系统查看您的更改

    sudo udevadm control --reload (即减去重新加载)
    sudo udevadm trigger

    4。 拔下并重新插入设备 或 重新启动计算机

    最终结果应该是组plugdev的所有成员现在都能够访问设备。

    编辑: 请注意,在某些系统上, plugdev 可能不是您需要的组。也可以是团体 input 根据我的经验,这取决于你在插什么。