Intereting Posts
Настройка Multiseat X с помощью одной видеокарты с двумя головками Как искать и заменять двойные символы одиночными символами Unicode в искаженном файле? Много отсутствующих файлов в выводе debsums Почему end-of-line $ anchor не работает с командой grep, даже если привязка front-of-line ^? Как отображать скрытые символы при вводе текста? Как очистить оперативную память, которая используется в качестве кэш-памяти? Как изменить версию Python по умолчанию в Debian 7.5? Выполняется карта Nvidia .. странно Поиск пустых каталогов рекурсивно Как хранить удаленную резервную копию Deja Dup удаленно Как сохранить закладки при перестановке страниц PDF-файла с помощью таких инструментов, как pdftk? Как я могу использовать sed для замены многострочной строки? Как проверить, существует ли $ date1 до $ date2 в оболочке? Sudo с паролем и добавляется в файл через SSH Что именно происходит, когда я выполняю apt-get upgrade?

Как узнать последовательность эвакуации, которую посылают мои клавиатуры на терминал?

Предположим, у нас есть общая клавиатура с некоторыми неизвестными ключами, которые могут отправлять escape-последовательности на терминал.

Клавиатура подключена к эмулятору терминала xterm, работающему на общем BSD / Linux.

Чтобы создать правильное сопоставление для неизвестных ключей, мы должны сначала знать, какие escape-последовательности они отправляют в xterm.

Но как узнать, какие escape-последовательности посылают ключи?

Ваша клавиатура не подключена к xterm . Он подключен к вашему ПК. Драйвер ядра знает, как декодировать нажатие и отключение клавиш, отправленное с клавиатуры, и сделать доступным для приложений через общий API в специальном файле устройства.

X-сервер – это такое приложение, которое использует этот API.

Он преобразует эти нажатия клавиш и релизы в события X «KeyPress» и «KeyRelease», которые несут с собой информацию о нажатом ключевом ключе как keycode и keysym. Это еще один API.

xterm – это приложение X. Он подключается к X-серверу и сообщает ему: меня интересуют все события KeyPress и KeyRelease . Когда он имеет фокус, и когда события KeyPress и KeyRelease не захвачены вашим диспетчером окон или другими приложениями, которые регистрируются для некоторых событий KeyPress во всем мире, xterm получит события KeyPress и KeyRelease .

xterm переводит keysym в событии KeyPress в последовательность символов, которые он отправляет на основную сторону псевдотерминального драйвера. Приложения, запущенные в вашем xterm , в конечном итоге будут считывать с подчиненной стороны этого псевдотерминального драйвера символы, отправленные xterm , но потенциально изменяемые псевдотерминальным драйвером (например, при некоторых условиях символы 0xd переводятся в 0xa, 0x3 приведет к отправке SIGINT …).

С этими разъяснениями в сторону. Чтобы узнать, какой keycode или keysym отправляется X-сервером при нажатии клавиши, вы можете использовать xev .

Чтобы узнать, какая последовательность символов (если таковая имеется) отправляется xterm , вам нужно указать псевдотерминальному драйверу, чтобы сначала не смешиваться с ними ( stty raw ), а затем вы можете использовать cat -vt или sed -nl или od чтобы увидеть их:

 { stty raw min 1 time 20 -echo dd count=1 2> /dev/null | od -vAn -tx1 stty sane } 

(над добавлением min 1 time 20 и использованием dd чтобы он вышел после одного нажатия клавиши, так как вы не смогли бы выйти с Ctrl-C в противном случае).