Добавьте строку отладки echo $ {hoption}
после ее считывания, чтобы убедиться, что она установлена правильно.
Также помещайте эхо в каждый случай, указывающий, что вы достигли этого случая.
В этом случае, поскольку вы ищете только один символ, я бы использовал чтение в этом способ:
read -r -n 1 hoption
Флаг -n 1
указывает чтению ждать только 1 символ и не ждать новой строки. флаг -r
отключает обработку специальных символов. В общем, вы всегда должны использовать -r
, если у вас нет явной причины не делать этого - иначе может возникнуть странное поведение.
Я протестировал сценарий, и похоже, что он получает значение hoption, по крайней мере, в моей среде (без каких-либо изменений). Если приведенное выше не решает вашу проблему, какое сообщение об ошибке вы получаете?
Я не знаю ни одного метода, использующего libinput
, но вы можете сделать эксклюзивный захват устройства /dev/input/event*
, которое соответствует Юбикей. Это работает на уровне ввода ядра с ioctl
и не позволяет любому другому приложению (например, Wayland, использующему libinput
) обрабатывать события с этого устройства.
Обычно любая программа, которая намеревается использовать функции Yubikey, должна выполнять захват, но вы можете проверить это с помощью evtest --grab
и выбора Yubikey, или evtest --grab / dev/input/eventX
, если вы знаете устройство или символическую ссылку на него.
ioctl
— это EVIOCGRAB
, определенный в /usr/include/linux/input.h
на случай, если вы захотите использовать его из программы. Также работает с Python и другими языками сценариев, которые могут выполнять iotctl
s.
Между прочим, свойство LIBINPUT_IGNORE_DEVICE
udev может быть назначено устройствам, которые следует игнорировать. Подробная документация здесь: