Я пытаюсь превратить Minitel в компьютер с Raspberry Pi.
Это минител:
Поэтому я припаял матрицу клавиатуры Minitel к PCB-клавиатуре USB, вот так:
Все работает хорошо, я получаю некоторые ключи от моей пользовательской клавиатуры. Мне просто нужно правильно переназначить ключи.
Поэтому я пытаюсь создать программу, которая попросит меня нажать a
и перехватить соответствующий код клавиши, а затем со всеми клавишами моей пользовательской клавиатуры, чтобы окончательно создать файл xmodmap.
Единственная проблема, которую я имею, состоит в том, что я не могу понять, как я могу получить этот код (и только это!). Я пытался, xev
но слишком много данных отображается для фильтрации.
Я знаю, что могу отследить все коды клавиш вручную, но я преобразую 10 Минителей, поэтому я бы предпочел более быстрый способ!
источник
Ответы:
Я предполагаю, что вы пытаетесь сделать это в оболочке или аналогичной (иначе, вы бы просто использовали библиотеки X напрямую). Если это так, вам может быть
xinput --test «device-name»
гораздо проще разобрать.К сожалению, это действительно не дружественный к сценариям оболочки. Но вы можете заставить его работать
stdbuf
. Он работает до тех пор, пока вы его не убьете, но ваш сценарий оболочки может передать егоread
.Итак, вы можете сделать что-то вроде этого:
Вам нужно будет использовать правильное имя клавиатуры вместо «AT Translated Set 2 клавиатура». Вы можете найти это с
xinput list
:К сожалению, вы должны использовать определенное устройство - вы не можете использовать основную клавиатуру.
(Кроме того, вам нужно будет найти способ убить xinput из вышеприведенного или просто довольствоваться нажатием Control-C, когда вы ввели все ключи. И вы, вероятно, захотите перечислить больше ключей, чем qwerty. )
источник
id
клавиатуру вместо ее имени, потому что у меня были конфликты с 2 одинаковыми именами. Такxinput test 18
где 18 - это идентификатор моей клавиатуры.test.c
, похоже, что соответствующая функция естьprint_events
. Может быть, xorg взял бы патч, чтобы добавить флаг, чтобы остановить после n событий?xinput --query-state
дает текущее состояние и сразу выходит. Вы могли бы это сделать.