На macOS возможно ли зарезервировать ввод из HID для программы на Python? - PullRequest
0 голосов
/ 11 января 2019

Я хочу предоставить эксклюзивный доступ к входу, поступающему от считывателя штрих-кода 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)

1 Ответ

0 голосов
/ 11 марта 2019

Из того, что я узнал с момента публикации этого вопроса, вы можете зарезервировать вход с любого устройства USB, если оно поддерживает «последовательный режим», если ваше устройство можно переключить в этот режим. тогда ОС может обращаться с ним по-другому от режима HID по умолчанию, и вы сможете захватить его ввод, даже исключительно.

Отказ от ответственности:

У меня не было возможности полностью проверить это на момент публикации этого ответа. Просто хотел дать быстрое обновление любому заинтересованному.

...