Установка¶
Зависимости¶
Нужен Python 3.10 или новее.
Зависимости: pyusb для команды reset и PyYAML для команды apply.
Сам транспорт работает на fcntl-ioctl к /dev/hidraw* на Linux или через IOKit на macOS.
udev-правило¶
Без правила доступ к /dev/hidraw* есть только у root.
Файл 70-ganss-katana.rules даёт доступ группе plugdev и через uaccess:
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="8006", MODE="0660", GROUP="plugdev", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="8006", MODE="0660", GROUP="plugdev", TAG+="uaccess"
Первая строка открывает hidraw-узлы, вторая нужна только для команды reset.
sudo cp 70-ganss-katana.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
Не используйте pyusb для обмена
Отсоединение драйвера usbhid (detach_kernel_driver) оставляет клавиатуру без ввода.
Транспорт проекта — только hidraw-ioctl, а pyusb нужен исключительно команде reset.
После установки переподключите клавиатуру.
Если пользователь не входит в группу plugdev, выполните sudo usermod -aG plugdev $USER и перелогиньтесь.
Проверка: команда ./katana.py mode ... должна работать без sudo.
Проверка устройства¶
Проще всего проверить наличие клавиатуры по USB ID:
Ожидаемый вывод:
Подпись про камеру — норма.
ID 0c45:8006 принадлежит чипу Sonix SN32, который ставится и в вебкамеры, и в клавиатуры.
Реальный тип устройства виден по интерфейсам:
У клавиатуры должно быть два HID-интерфейса: boot keyboard и mouse/consumer.
macOS¶
Поддержка экспериментальная. Транспорт работает через IOKit напрямую, сторонние HID-библиотеки не обязательны, udev-правило не нужно.
Опционально можно установить hidapi (pip install hid): тогда интерфейс 0 ищется точнее, по registry entry ID.
macOS выдаёт доступ к HID-клавиатурам вручную:
- откройте «Системные настройки» → «Конфиденциальность и безопасность» → «Input Monitoring»;
- добавьте приложение, из которого запускается
katana.py(Terminal, iTerm2, VS Code); - включите разрешение и перезапустите приложение.
Без разрешения утилита выведет подсказку.
Утилиты, перехватывающие клавиатуры, открывают их монопольно.
Пока Karabiner-Elements работает, открыть устройство нельзя: возвращается kIOReturnExclusiveAccess.
Выйдите из Karabiner на время настройки или исключите клавиатуру в его настройках.
Проверить, кто мешает, можно диагностикой:
| Код | Значение |
|---|---|
0x00000000 |
права есть, проблема в программном обеспечении |
0xE00002C1 |
нет разрешения «Input Monitoring» |
0xE00002C5 |
устройство захвачено монопольно, обычно Karabiner |
Транспорт выбирается автоматически: на macOS — IOKit, на остальных системах — hidraw.
При выключенном Karabiner команды mode, paint, keys, remap, macro и reset проверены на железе.
Katana Studio на macOS записывать не может: node-hid получает от системы not permitted.
Решение проблем¶
- Сначала проверьте версию:
./katana.py version. Клавиатура для этой команды не нужна. - Если команда отклоняется со статусом
00илиff, сессия залипла. Повторите команду, затем выполните./katana.py reset. - Если
resetне помог, выключите и включите клавиатуру физически. - Полный список известных проблем — в разделе Транспорт и транзакции.
Для приложения нужно то же udev-правило. Как его ставит deb-пакет и что делать с AppImage, описано в разделе Katana Studio.