Я хочу предоставить эксклюзивный доступ к входу, поступающему от считывателя штрих-кода LASER (тип точки и триггера) в программу Python 3.6; то есть никакая другая программа не должна получать ввод от читателя, независимо от фокуса пользовательского интерфейса (потому что программа python уже заявила о себе устройство только для себя.)
Мне удалось это прекрасно на машине с Linux, использующей Python 3.6 и библиотеку pyusb, но я не могу воспроизвести функциональность в macOS, я получаю сообщение об ошибке, указывающее, что у меня недостаточно разрешений.
Это на самом деле происходит и в Linux, но это легко обойти, добавив текущего пользователя в группу dialout
и создав файл правил udev в /etc/udev/rules.d/99-usb.rules
, предоставив разрешения пользователю или группе с этим правилом:
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)