Вопрос или проблема
Я использую каждую клавишу на клавиатуре моего ноутбука, ни одна не остается без дела. Недавно я приобрел Thinkpad T14 gen 5, который имеет клавишу copilota вместо PrtSc. Я надеялся переназначить клавишу copilota на PrtSc (который я активно использую для изменения размера окон), или, по крайней мере, переназначить ее на что-то (F23?), что я мог бы перехватить с помощью моего менеджера окон для тех же целей.
К сожалению, когда я использую showkey -s
, нажатие клавиши copilota дает 0xe0 0x5b 0x2a
, а отпускание 0xaa 0xe0 0xdb
. Я проверил, что 0xe0 0x5b
/ 0xe0 0xdb
– это то, что я получаю при нажатии / отпускании левой клавиши Windows, а 0x2a
/ 0xaa
– это то, что я получаю при нажатии / отпускании левой клавиши Shift. Таким образом, похоже, что для клавиши copilota нет уникального кода сканирования.
Если я использую evtest
, я получаю следующие события от нажатия/отпускания copilota:
Событие: время 1733647696.413560, тип 4 (EV_MSC), код 4 (MSC_SCAN), значение db
Событие: время 1733647696.413560, тип 1 (EV_KEY), код 125 (KEY_LEFTMETA), значение 1
Событие: время 1733647696.413560, -------------- SYN_REPORT ------------
Событие: время 1733647696.413794, тип 4 (EV_MSC), код 4 (MSC_SCAN), значение 2a
Событие: время 1733647696.413794, тип 1 (EV_KEY), код 42 (KEY_LEFTSHIFT), значение 1
Событие: время 1733647696.413794, -------------- SYN_REPORT ------------
Событие: время 1733647696.413922, тип 4 (EV_MSC), код 4 (MSC_SCAN), значение 6e
Событие: время 1733647696.413922, -------------- SYN_REPORT ------------
Событие: время 1733647696.519973, тип 4 (EV_MSC), код 4 (MSC_SCAN), значение 6e
Событие: время 1733647696.519973, -------------- SYN_REPORT ------------
Событие: время 1733647696.520192, тип 4 (EV_MSC), код 4 (MSC_SCAN), значение 2a
Событие: время 1733647696.520192, тип 1 (EV_KEY), код 42 (KEY_LEFTSHIFT), значение 0
Событие: время 1733647696.520192, -------------- SYN_REPORT ------------
Событие: время 1733647696.520475, тип 4 (EV_MSC), код 4 (MSC_SCAN), значение db
Событие: время 1733647696.520475, тип 1 (EV_KEY), код 125 (KEY_LEFTMETA), значение 0
Таким образом, существует какое-то событие, уникальное для нажатия клавиши copilota (а именно MSC_SCAN 0x6e
), но это не дает соответствующего события keyscan, которое я мог бы использовать в клавиатурной карте для загрузки с помощью loadkeys. Если бы я мог сопоставить это событие 0x6e
с F23, я мог бы просто заставить свой менеджер окон выполнять эквивалент клавиши Print на Win-Shift-F23, но я не знаю, как это сделать.
Мои вопросы:
- Какова связь между значениями события EV_MSC, возвращаемыми evtest, и кодами сканирования, возвращаемыми
showkey -s
? - Существует ли способ заставить ядро генерировать событие клавиши из этого события
EV_MSC 6e
? Могу ли я сделать это с помощью карты клавиш иloadkeys
, или мне нужно сделать что-то более низкоуровневое? - Существуют ли другие способы перехватить клавишу copilota в моем менеджере окон для изменения размера окон?
Похоже, что код 6e, который я получаю от evtest
, является кодом сканирования, который можно сопоставить с кодом клавиши с помощью утилиты setkeycodes
, и я не понимаю, что на самом деле делает showkey -s
, но он не выводит коды сканирования в том смысле, в каком используются термины setkeycodes
/getkeycodes
. Запуск:
setkeycodes 6e 99
делает так, что клавиша copilota сопоставляется с PrtSc
, и даже позволяет выполнять команды SysRq. Например, если вы нажмете Alt+(copilot, s) [т.е. нажмите Alt, нажмите copilota, отпустите copilota, нажмите s, отпустите s, отпустите Alt], ядро синхронизирует диски.
Когда я пошел проверить, работает ли функциональность SysRq, оказалось, что journalctl -k
на самом деле содержал сообщения вроде “Непонятная клавиша заменена… Используйте ‘setkeycodes 6e ‘ чтобы сделать ее известной.” Вот вам и ответ.
Ответ или решение
Как использовать клавишу Copilot в оконном менеджере
Введение
Клавиша Copilot на вашем Thinkpad T14 Gen 5, заменяющая кнопку PrtSc, может быть полезным инструментом для оптимизации рабочего процесса, особенно если ваш ноутбук имеет ограниченное количество клавиш. Ваша цель — переназначить эту клавишу на функцию, аналогичную PrtSc, что позволит вам изменять размер окон с помощью оконного менеджера. В этом руководстве мы подробно разберем, как это сделать, а также ответим на возникшие у вас вопросы о взаимодействии с этой клавишей на уровне ядра Linux.
Взаимосвязь между значениям EV_MSC и скан-кодами
Чтобы понять, как обрабатывать клавишу Copilot, необходимо разобраться во взаимосвязи между событиями EV_MSC и скан-кодами, которые выводит showkey -s
. Значения, полученные с помощью evtest
, содержат уникальные события, такие как EV_MSC
, и могут указать на определенные действия, не соответствующие стандартным ключевым событиям.
Скан-коды представляют собой низкоуровневый механизм, который операционная система использует для интерпретации нажатий клавиш. В вашем случае, код MSC_SCAN 0x6e указывает на уникальное событие, связанное с клавишей Copilot. showkey -s
, в свою очередь, может не отображать значения в привычном виде, что и приводит к путанице при обработке.
Переназначение клавиши Copilot
Для переназначения клавиши Copilot на кнопку PrtSc вы можете воспользоваться утилитой setkeycodes
. Это позволяет связать уникальный код (в данном случае 0x6e) с кодом, который будет восприниматься системой как нажатие клавиши. Давайте посмотрим, как это сделать:
-
Запустите терминал и выполните следующую команду:
sudo setkeycodes 6e 99
Данный процесс регистрирует код 0x6e как ключ 99, который в большинстве случаев соответствует PrtSc.
-
Теперь, когда вы нажимаете клавишу Copilot, система будет воспринимать это как нажатие клавиши PrtSc, что позволит использовать его для изменения размера окон.
Обработка событий и SysRq
После переназначения клавиши, вы можете использовать ее в комбинации с другими клавишами, например, с Alt
для выполнения команд SysRq (например, Alt + (Copilot + S)
для синхронизации диска). Сообщение, полученное через journalctl -k
, подтвердит, что система распознает нажатие этой клавиши.
Альтернативные подходы
Если вы ищете другие способы интеграции клавиши Copilot в ваш рабочий процесс, вот несколько альтернативных идей:
-
Использование
xbindkeys
илиsxhkd
: Эти утилиты могут помочь вам создавать горячие клавиши для управления окнами. Вы можете зафиксировать ваше новое назначение клавиши Copilot, чтобы оно выполняло ваши команды для изменения размера окон. -
Настройки вашего оконного менеджера: Многие оконные менеджеры (например, i3, XMonad и др.) имеют свои конфигурационные файлы, где можно указать действия, выполняемы по нажатию определенных клавиш.
-
Управление клавиатурными макросами: Существуют программы, которые поддерживают макросы и могут помочь вам комбинировать нажатия клавиш для достижения желаемого результата, если вы не хотите переназначать клавищу.
Заключение
Переназначение клавиши Copilot на вашем Thinkpad T14 Gen 5 — это мощный инструмент, который может значительно улучшить ваш рабочий процесс. Используя setkeycodes
, вы можете связать эту клавишу с функцией Print Screen, а также использовать ее для выполнения команд SysRq. Не бойтесь экспериментировать с другими утилитами и настройками оконного менеджера для максимизации продуктивности.