【问题标题】:Can't read usb string descriptor with libusb because of permissions由于权限,无法使用 libusb 读取 USB 字符串描述符
【发布时间】:2013-09-09 09:34:08
【问题描述】:

我只是不能做一个简单的事情来读取字符串描述符。这是带有 pyusb 包装器的简单代码(只是为了简化代码),但即使使用 le libsub 原始库,问题仍然存在。

import usb.core
import usb.util
devs = usb.core.find(find_all=True)
for dev in devs:
    try:
        print usb.util.get_string(dev, 255, dev.iManufacturer)
    except usb.core.USBError:
        pass

如果我在没有 root 权限的情况下执行此操作,我将一无所获(所有循环迭代都会引发异常)。如果我以 root 权限执行,我会得到一些字符串描述符和一些异常。在这种情况下,我知道异常是正常的,因为管道错误意味着设备没有提供任何字符串描述符。

问题是:如何在没有 root 权限的情况下获取字符串描述符?命令lsusb 检索所有信息,并且在未启用 suid 位的情况下执行此操作。

【问题讨论】:

    标签: python libusb pyusb


    【解决方案1】:

    我也遇到过这个问题。似乎 pyusb 默认以读写方式打开设备,而lsusb 以只读方式打开它们,如$ strace lsusb 提取所示:

    ...
    open("/sys/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1:1.0/uevent", O_RDONLY|O_CLOEXEC) = 6
    ...
    

    我通过将所有 USB 设备设置为全球可读/可写解决了这个问题,但从安全角度(键盘记录器等)来看,这绝对不是最佳选择...

    【讨论】:

    • 请放纵我;我从事 Linux 编码的时间只有 17 年。您是否更改了 /sys/devices/something/usb/something 的权限?或 /dev/bus/usb ? (首选 Rasbian 答案,但可以处理任何事情。)
    • 我更改了实际设备的权限,即chmod a+rw /dev/bus/usb/*。我当时曲解了 lsusb 的踪迹,看来它根本不使用设备描述符,而是依赖于/sys pseudo-fs。
    • 发送!这可能对我在 Raspbian 上没有帮助,因为它让我无耻地“sudo”,所以无论如何我只把 USB 当作上帝,所以一切都是读写的。
    • aaand 我也遇到了同样的错误,因为我使用了 usb.util.get_string(dev, 255, dev.iManufacturer),就像你一样,而不是时髦的,with-it 和现代版本,usb.util.get_string(dev, dev.iManufacturer)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2011-10-02
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多