Почему один Yubico отображается как несколько устройств, в чем разница между hid-generic и input?

Это зависит: этот вопрос получит различные мнения. Мой опыт показывает, что следование тестированию Debian требует частого вмешательства, чтобы обновления не были заблокированы. Также (нередко) случаются поломки из-за обновлений, включая постоянные проблемы с NFS и обновлениями ядра.

В целом, обновления системы работают лучше, когда у вас есть время на восстановление после случайных сбоев.

1
28.04.2019, 02:41
1 ответ

Частичный ответ:

Уровень ядра inputпредставляет собой абстракцию для всех возможных устройств ввода посредством всех возможных транспортных технологий. Клавиатуры PS/2, мыши с последовательным интерфейсом, USB-клавиатуры, кнопки USB-камеры и т. д. — все они в конечном итоге отображаются как устройства ввода. События на этих устройствах доступны через /dev/input/event*, и вы можете использовать evtest, чтобы показать их. Добавьте слой поверх этого (, например, X через evdevили Wayland через libinput), затем выберите эти события и сделайте их доступными для (графических приложений ).

На другой стороне иерархии большинство этих устройств также имеют файлы устройств, связанные с конкретным транспортом. Важным классом является HID (= Human Interface Device ), это устройства (часто USB ), которые поставляются со стандартизированным дескриптором («дескриптор HID» )для возможностей устройства. Таким образом, само устройство сообщает ядру, является ли оно клавиатурой, мышью, джойстиком и т. д.; какие клавиши или события движения он генерирует, в какой-то степени как его можно настроить и т. д.

HID-устройства также всегда получают /dev/hidraw*файл, в котором при необходимости можно прочитать необработанное HID-событие (). Обычно, если ядро ​​может понять дескриптор HID, эти события обрабатываются ядром, а затем становятся доступными как события входного уровня -.

Итак, вам нужно читать такие записи системного журнала:

input: Yubico YubiKey OTP+FIDO+CCID as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1050:0407.006A/input/input93
hid-generic 0003:1050:0407.006A: input,hidraw0: USB HID v1.10 Keyboard [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input0

"Есть интерфейс USB HID класса клавиатура. Ядро понимает этот класс,он получит файл устройства hidraw0и файл устройства /dev/input/eventX(, вероятно, X=93 ). Модуль ядра hid-genericобнаружил это и вызвал inputуровень ядра." ​​

hid-generic 0003:1050:0407.006B: hiddev0,hidraw1: USB HID v1.10 Device [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input

«Существует интерфейс USB HID с классом, который не понимается ядром. Поскольку его нельзя перенаправить на входной уровень, он получит hiddev0файл устройства для общих событий HID, а также получить файл устройства hidraw1для необработанных событий HID. Модуль hid-genericобнаружил это».

Таким образом, в зависимости от того, как вы считаете, у вас есть не три, а два интерфейса HID, каждый с двумя связанными файлами устройств, всего четыре файла устройств, из которых автоматически используется только файл устройства входного -слоя.

Что касается , почему Юбикей делает это именно так, знает только Юбикей. Разумно предположить, что они предоставляют один общий интерфейс, который может быть использован любой ОС (, HID клавиатуры )и один интерфейс для специальной настройки Yubikey, который будет понят только специальным программным обеспечением Yubikey -.

2
27.01.2020, 23:41

Теги

Похожие вопросы