Проблема получения PS/2 "Keyboard" для работы под Linux Mint

В чем проблема ?.

Это не фиксированная дата, это отличие от последнего изменения. 99999 дней означают около 273 лет непрерывного использования после последнего раза пароль был изменен (или установлен изначально).

Последнее изменение пароля связано со временем UNIX. 32-битное значение секунд со знаком со знаком с 1 января 1970 г. . Теперь это счетчик по умолчанию для времени UNIX. Таким образом, время UNIX необходимо будет изменить, прежде чем оно выйдет за пределы (примерно) 2038 года (~ 19 января 2038 года). Поскольку OpenBSD, NetBSD и x32 ABI для Linux уже используют 64-битный time_t , разумно ожидать, что к 2038 году 64-битный знак будет счетчиком по умолчанию. . Это позволит вести подсчет еще около 292 гига лет, или, как объяснено в части NTP:

64-битного значения секунды достаточно, чтобы обеспечить однозначное представление времени до тех пор, пока Вселенная не потускнеет.

«Последний раз, когда был изменен пароль» - это время UNIX, разделенное на 24 часа, 60 минут и 60 секунд. Сегодня это будет:

$ echo $(( $(date +%s) / 24 / 60 / 60 ))
16837

Это сокращение примерно на 16 бит (2 ^ 16 = 65536) по сравнению со временем UNIX.

Короче говоря, дайте вашему приложению возможность использовать 64-битный счетчик UNIX, и так:

  What is the problem?

2
19.01.2019, 20:33
1 ответ

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

Поскольку он работает в BIOS и аппаратное обеспечение i8042 распознается, нижние слои стека драйверов должны быть в порядке. Поверх i8042 находится модуль ядра serio, исходный код в drivers/input/serio. Возможно, это ожидает «настоящую» клавиатуру и не распознает сканер.

Однако вы также можете использовать прямой доступ к порту PS/2 с помощью serio_raw. Делай

echo -n "serio_raw" > /sys/bus/serio/devices/serio0/drvctl

и вы должны получить /dev/psauxустройство (часы dmesg, также для ошибок ). hexdump -C /dev/psauxи посмотрите, получите ли вы что-нибудь при использовании считывателя штрих-кода (имейте в виду, что он буферизует строки, или измените команду для отдельных байтов в строке ).

Если это сработает, вы можете либо использовать его с необработанным протоколом (для декодирования самостоятельно ), либо попытаться просмотреть исходный код serioи попытаться выяснить, почему он не работает. Вам нравится ваш считыватель штрих-кода (с помощью протокола, который вы видели в serio_raw).

Если это не сработает, мы еще больше сузили точку отказа, но я не уверен, что делать в этом случае.

И для тех, кто читает это с работающим драйвером serioи хочет поиграть с serio_raw,вы можете снова подключить драйвер serioс помощью

echo -n "rescan" > /sys/bus/serio/devices/serio0/drvctl

Редактировать

Это коды сканирования «создать» (нажатие клавиши )и «разорвать» (отпускание клавиши ). Например, 1e 9eявляется ключом A .

Обратите внимание, что они назначаются самим клавишам, а Shift и т. д. также имеют коды включения и отключения. Таким образом, вы получаете «поддельные» коды для них, если сканер штрих-кода считывает символы верхнего -и нижнего регистра и т. д.

.

См., например,. здесь или здесь для подробностей.

Обычно модуль atkbdобрабатывает их и перенаправляет на уровень ввода ядра, где они отображаются в узле устройства /dev/input/eventX. Глядя на подпрограмму atkbd_probe, она считывает идентификатор клавиатуры и, если это не удается, пытается сбросить светодиоды. Если это также не удается, он решает, что это не клавиатура. Точно так же, если идентификатор не соответствует известным идентификаторам клавиатуры, он также решает, что это не клавиатура.

Итак, я думаю, сканер штрих-кода не проходит эти тесты. Вы можете убедиться в этом, отправив свои собственные команды на устройство raw Serio.

2
27.01.2020, 22:08

Теги

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