Как правильно изменить отображение клавиатуры?

Я попытаюсь подробно описать проблему. Очень часто я использую внешнюю клавиатуру с моим нетбуком. Клавиатура – «TK Stealth»:


Нажмите, чтобы увеличить

Вы можете видеть, что numpad очень похож на классический numpad, но клавиши со стрелками фактически отображаются по-разному – как дополнительные клавиши со стрелками на широких клавиатурах.

Я хочу, чтобы они отображались как в numpad, то есть «8» == «Вверх», «2» == «Вниз», «4» == «Влево», «6» == «Вправо» и скоро.

Эти настройки должны работать только при подключении этого типа клавиатуры.

Я попытался сделать это, используя xmodmap /home/johnfound/TKStelth со следующим файлом карты «TKStelth»:

 keycode 79 = KP_Home KP_Home KP_Home KP_Home keycode 80 = KP_Up KP_Up KP_Up KP_Up keycode 81 = KP_Prior KP_Prior KP_Prior KP_Prior keycode 83 = KP_Left KP_Left KP_Left KP_Left keycode 84 = KP_Begin KP_Begin KP_Begin KP_Begin keycode 85 = KP_Right KP_Right KP_Right KP_Right keycode 87 = KP_End KP_End KP_End KP_End keycode 88 = KP_Down KP_Down KP_Down KP_Down keycode 89 = KP_Next KP_Next KP_Next KP_Next keycode 90 = KP_Insert KP_Insert KP_Insert KP_Insert keycode 91 = KP_Delete KP_Delete KP_Delete KP_Delete 

Он работает на самом деле, но есть уродливые побочные эффекты. Например, иногда макет восстанавливается по умолчанию, и я должен запустить указанный выше сценарий вручную. Включение скрипта в сценарии инициализации вызвало некоторые конфликты / блокировки, которые заставили ОС зависать в течение нескольких минут после возобновления с приостановки и изменения разрешения экрана. Таким образом, я был вынужден удалить скрипты из скриптов инициализации.

Я где-то читал, что xmodmap на самом деле является старым способом обработки раскладок клавиатуры.

Итак, вопрос: как настроить Linux для правильной работы с этой и только этой клавиатурой?

Дополнительная информация: Manjaro Linux с XFCE. Клавиатура настроена с двумя макетами – США и Болгарией, и они должны оставаться после изменения конфигурации.

  • Сделать ключевой акт в качестве модификатора в сочетании с другим ключом
  • One Solution collect form web for “Как правильно изменить отображение клавиатуры?”

    Пока я нашел правильное решение, я отвечу на свой вопрос.

    Существует программа с именем keyfuzz, которая может изменять карты клавиатуры, используемые ядром, на основе устройств ввода – то есть отдельно для каждой клавиатуры, подключенной к компьютеру.

    В этой программе есть две проблемы, которые не описаны в документации:

    1. Клавиатуры USB генерируют коды сканирования, отличные от кодов сканирования клавиатур, подключенных к порту ps / 2. Таким образом, если вам нужно переназначить USB-клавиатуру, вам понадобится способ узнать коды сканирования ключей. Инструмент «showkey», обычно рекомендуемый для тестирования scancode и keycode, не будет выполнять задание, поскольку он считывает форму /dev/console которая испускает «стандартные» коды сканирования, независимо от клавиатуры.

    Чтобы проверить коды сканирования клавиатуры на основе адреса /dev/input/KEYBOARD , вам необходимо использовать программу с именем getscancodes . Обратите внимание, что загруженный файл из приведенной выше ссылки неправильно сжат. Он называется getscancodes.tar.gz , но сжимается с помощью алгоритма ZIP. Пакет содержит исходный код, а также предварительно скомпилированные двоичные файлы.

    В моем случае файл конфигурации keyfuzz выглядит следующим образом:

     ### evdev 1.0.0., driver 'TK Stealth keyboard' ### Proper old-style numpad handling 0x70059 107 0x7005A 108 0x7005B 109 0x7005C 105 0x7005D 108 0x7005E 106 0x7005F 102 0x70060 103 0x70061 104 0x70062 110 0x70063 111 
    1. Программа «keyfuzz» запускается как служба во время загрузки, чтобы как можно раньше исправлять таблицы. К сожалению, клавиатура USB добавляется к устройствам позже, поэтому, когда запускается keyfuzz, нет никакой клавиатуры для исправления, даже если USB-клавиатура подключена во время загрузки.

    Решением является использование файлов правил udev и запуск keyfuzz при добавлении необходимой клавиатуры.

    Чтобы сделать это, вам нужно добавить файл /etc/udev/rules.d/mykeyboard.rules , содержащий (в моем случае):

     ACTION=="add", ATTRS{idVendor}=="2516", RUN+="/usr/lib/systemd/scripts/keyfuzz start" 

    Теперь, после подключения клавиатуры, начнется скрипт запуска keyfuzz и исправьте таблицы декодирования клавиатуры.

    Linux и Unix - лучшая ОС в мире.