Частичный ответ :Отображение xmodmap
на самом деле работает правильно. Как показывает xev
, вы получаете keysym 0xffbe
, что равно F1
, как и должно быть.
Итак, вопрос (1 ), почему он все еще меняет яркость и (2 ), почему он возвращает код клавиши 232 (дляKEY_BRIGHTNESSDOWN
)вместо кода для клавиши F1 (. ] 67 ).
Для (1 )я подозреваю, что Ubuntu запускает что-то по умолчанию, читая напрямую из /dev/input
вместо обработки событий X, и это обработка ключа независимо от того, что говорит xmodmap
. Вы не сказали, в какой среде рабочего стола вы используете (Gnome? ). Вы можете найти с помощью lsof
процесс, который напрямую считывает /dev/input/eventX
источник (вы получили число X из evtest
, числа могут меняться в разных ботинках ). Вы также можете проверить эту теорию, запустив evtest --grab /dev/input/eventX
:. Это сделает evtest
эксклюзивной программой для обработки событий, поэтому, когда вы нажимаете Fn+F1, она по-прежнему должна отображать KEY_BRIGHTNESSDOWN
, но яркость экрана вашего ПК/ноутбука должно остаться прежним.
Что касается (2 ), поиск в Google названия бренда показывает, что это Bluetooth-клавиатура. Это означает, что это, вероятно, HID-устройство. Вы можете выполнить отладку, просмотрев dmesg
, чтобы определить соответствующий файл устройства hidraw
и идентификатор Bluetooth. Затем выполните
mount -t debugfs none /sys/kernel/debug
как root, и посмотрите sys/kernel/debug/hid/*/rdesc
для правильного устройства (посмотрите доступные подкаталоги ).Если вы не можете понять это, поместите его в pastebin и отредактируйте вопрос со ссылкой. Кроме того, выгрузите необработанные события HID, используя hexdump -C /dev/hidrawX
, несколько раз нажав Fn и F1, F2 и т. д. Это должно дать вам представление о том, почему ядро переводит именно так.
Редактировать
Глядя на дамп hidraw, клавиатура правильно выдает скан-коды 3a
, 3b
и т. д. для функциональных клавиш, как описано в дескрипторе HID.
Таким образом, проблема должна быть в уровне преобразования ввода HID -в -.
Вы можете опросить этот уровень с помощью ioctl. Я не знаю общедоступного инструмента для этого, но я могу разместить его на github, когда он будет готов.
Единственный известный мне способ установить это сопоставление — через базу данных udev hwdb
, как описано, например. здесь .
Итак, я бы предположил, у кого установлен какой-то пакет, который предоставляет запись в базе данных для сопоставления F1 с регулировкой яркости, а также предоставляет программу, реагирующую на это путем прямого мониторинга /dev/input/event*
. Попробуйте посмотреть, сможете ли вы найти его в своей системе. lsof
может помочь.
Ctrl + M — это сочетание клавиш по умолчанию для скрытия/отображения строки меню