【发布时间】:2019-01-11 16:27:49
【问题描述】:
我想为 Python 3.6 程序提供对来自 LASER 条形码(点和触发类型)阅读器的输入的独占访问权限;也就是说,无论 UI 焦点如何,其他程序都不应该从阅读器那里获得输入(因为 python 程序已经只为自己声明了设备。)
我已经能够在使用 Python 3.6 和 pyusb 库的 Linux 机器上很好地做到这一点,但是我无法在 macOS 中复制该功能,我收到一条错误消息,指出我没有足够的权限。
这实际上也发生在 Linux 中,但很容易通过将当前用户添加到 dialout 组并在 /etc/udev/rules.d/99-usb.rules 中创建 udev 规则文件来授予具有此规则的用户或组权限:
SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", GROUP="dialout", MODE="0666"
如何在 macOS 上授予同等权限?
示例代码在 Linux 上完全符合我的要求,但在 macOS 上完全失败:
import usb.core
import usb.util
device = usb.core.find(idVendor=0x0519, idProduct=0x2017)
if device.is_kernel_driver_active(0):
device.detach_kernel_driver(0)
print("Kernel driver detached")
else:
print("Kernel driver already detached")
try:
device.set_configuration()
device.reset()
usb.util.claim_interface(device, 0) # error happens here
print("Claimed device")
except Exception as e:
print("Error when claiming device", e)
sys.exit(1)
根据我在网上找到的信息,macOS 似乎没有授予此访问权限的等效机制。
macOS 上的错误:
[Errno 13] Access denied (insufficient permissions)
【问题讨论】:
-
如果你使用
sudo YourScript运行? -
既然是HID设备,就要采取内核相关的措施,如果改成串口设备,会不会自动变成独享设备?
-
我忘了提到它必须作为人们无法直接访问的服务运行,因此 sudo 或以 root 身份运行并不是一个真正的选择。
-
@kunif 如何将其从 HID 转换为串行端口设备?我愿意尝试不同的方法来访问阅读器,只是需要更多的指针。
-
@Jonathan Acosta,对于大多数扫描仪,设置条形码以更改模式在用户手册等中都有所写。请使用它来从键盘输入模式更改为串口模式。
标签: macos barcode-scanner pyusb