Ввод с использованием сочетаний клавиш?

12

Я пользователь Ubuntu 10.04, который ищет способ, например, сделать так, чтобы мой компьютер набирал символ «+», когда я удерживал Windowsклавишу (я думаю, это называется Superв мире Linux) и нажимал Kклавишу. Мне это нужно для работы во всех приложениях. (Я человек с нарушениями печати, и мне нужно адаптировать Ubuntu к своим потребностям.) Спасибо!

Крис Харпер
источник

Ответы:

15

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

Шаг 0 - Подход

X-сервер управляет клавиатурой и всеми событиями клавиш и переводит их в коды клавиш для всех приложений.

Подход заключается в том, чтобы назначить клавишу-модификатор (например, клавишу Super или Right Alt) в качестве клавиши «переключения режимов» и указать X-серверу генерировать разные коды в зависимости от того, нажата ли клавиша с нажатой клавишей Mode или нет.

По умолчанию не определена клавиша переключения режимов, а также все клавиши настроены на генерацию одного и того же кода при нажатии с переключателем режима или без него. Это хорошо, поскольку это означает, что кроме ключей, которые вы явно переопределяете, никакие другие ключи не будут вести себя по-другому или потребовать дополнительной настройки.

Однако я хотел бы, чтобы вы рассмотрели возможность использования правой клавиши Alt в качестве переключателя режимов, особенно если вы также используете compiz, поскольку некоторые плагины compiz отображают сочетания клавиш (например, средство выбора окон, переключатель смещения и т. Д.). Если вы не заинтересованы в управлении compiz с помощью клавиатуры, тогда Super просто в порядке.

Для xmodmap суперключи обозначаются как Super_L или Super_R. Вам нужно выбрать один для использования в качестве клавиши переключения режима. Альтернативно, правая клавиша alt - Alt_R. Вы можете подтвердить это, запустив xev и нажав необходимые клавиши на клавиатуре. Смотрите этот пост для шагов.

Шаг 1 - Настройка карты модификаторов

  1. Откройте терминал ( Applications -> Accesories -> Terminal) и выполните следующую команду, чтобы создать файл с текущими сочетаниями клавиш. Мы будем использовать это как отправную точку.

    xmodmap -pke > curkeys.map
    xmodmap -pm >> curkeys.map
    
  2. Откройте это в вашем любимом текстовом редакторе. gedit curkeys.map &открывает его в гедит. В конце файла вы увидите несколько таких строк:

    keycode 253 =
    keycode 254 =
    keycode 255 =
    xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
    
    shift       Shift_L (0x32),  Shift_R (0x3e)
    lock        Caps_Lock (0x42)
    control     Control_L (0x25),  Control_R (0x69)
    mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
    mod2        Num_Lock (0x4d)
    mod3      
    mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
    mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
    
  3. Удалить строку, начинающуюся с "xmodmap: до 4 ..."

  4. Отредактируйте карту модификатора так, чтобы она выглядела следующим образом. Поместите слово «добавить» в начале каждой строки и вставьте «=» после имени модификатора. Затем удалите коды в скобках и запятые. Также обратите внимание, что я перешел Mode_switchот mod5строки к mod3строке, так как она была пустой. Модифицированная таблица должна выглядеть следующим образом - фактическое содержимое в вашем случае будет немного отличаться от приведенного ниже (зависит от раскладки клавиатуры).

    add shift =      Shift_L  Shift_R
    add lock  =      Caps_Lock
    add control =    Control_L  Control_R
    add mod1    =    Alt_L Meta_L Alt_R 
    add mod2    =    Num_Lock
    add mod3    =    Mode_switch
    add mod4    =    Super_L Super_R Super_L Hyper_L 
    add mod5    =    ISO_Level3_Shift
    
  5. Переопределить физический ключ переключения режимов. В конце добавьте такую ​​строку (замените Super_L на Super_R или Alt_R, если требуется).

    keysym Super_L = Mode_switch
    
  6. Удалите имя ключа (Super_L) из любого определения модификатора. Для Super_L это означает удаление его из строки mod4.

    add mod4    =    Super_R Hyper_L 
    

    Теперь правая «супер» клавиша будет по-прежнему действовать как обычная супер-клавиша, тогда как левая клавиша будет иметь специальные свойства.

  7. Теперь нам нужно переназначить клавиши для создания разных кодов, независимо от того, нажаты они при удерживании Super_L или нет. Каждая строка в нашем файле, начинающаяся с, keycodeзадает 4 клавишных символа для каждой генерируемой клавиши в зависимости от того, нажаты ли клавиши Mod1 (клавиши Shift) и Mode (см. Ссылку ).

    !...........................................................................
    !        Key            Base              Shift           Mode    Mode+Shift
    !---------------------------------------------------------------------------
    keycode  13             = 4               dollar          4       quotedbl
    keycode  14             = 5               percent         5       colon
    keycode  15             = 6               asciicircum     6       comma
    keycode  16             = 7               ampersand       7       period
    ...
    keycode  45             = k               K               k       K
    

    Если мы хотим, чтобы нажатие клавиши Super_L + k генерировало клавишу «+», нам нужно изменить ее следующим образом:

    keycode  45 = k K plus plus
    

    Последний плюс также отображает Shift + Super_L + k на плюс, но это может быть сопоставлено с чем-то другим. Для каждого ключа есть ровно 1 строка для изменения. Отредактируйте больше строк, чтобы переназначить больше клавиш - оставьте первые 2 записи без изменений, чтобы сохранить нормальное поведение нажатия клавиш.

  8. Сохраните файл и выйдите из редактора.

  9. Установите раскладку клавиш, выполнив следующие команды в терминале. Первый устанавливает его для этой сессии, второй делает его постоянным для будущих сессий.

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    
  10. Вы можете сразу же проверить это, нажав измененные клавиши (например, Super_L + k).

Шаг 3 - Добавление / пересмотр карты

После установки модифицированной карты легко добавить новые ключи.

  1. Используйте xev для поиска кодов клавиш и клавиш

  2. проверьте это, выполнив эту команду для сопоставления ключа:

    xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
    

    Замените элементы в угловых скобках (например, и <code> <base>т. Д.) Соответствующими значениями.

  3. Сделайте резервную копию curkeys.mapфайла.

  4. Откройте curkeys.mapи измените строку для соответствующего кода ключа.
  5. Повторите действия с помощью приведенных ниже команд (первая не нужна, если вы выполнили шаг 2)

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    

Примечание: 1. Изменения, сделанные в сочетаниях клавиш (например, через System -> Preferences -> Keyboard Shortcuts), влияют на карту модификаторов и, как правило, будут потеряны при следующем входе в систему. Поэтому, пожалуйста, избегайте этого.

Примечание: 2 : я иногда получаю сообщения об ошибках как этот, используя этот метод. Я не знаю, что это значит, однако, как правило, они безвредны.

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  118 (X_SetModifierMapping)
Value in failed request:  0x17
Serial number of failed request:  263
Current serial number in output stream:  263

Подробная справка по xmodmap доступна здесь .

Koushik
источник
удачи с этим? Если это не поможет или каким-либо образом неясный комментарий, пожалуйста, я буду пересматривать и сделать его более полезным.
Кошик
1
Пожалуйста , обратите внимание, что в Linux Mint 17 Xfce (или , по крайней мере , там), это должно быть ~/.Xmodmap, ~/.xmodmapигнорируется.
ЗБРЫ
2
Не забудьте clearо ключах, которые сбрасываются в соответствии с unix.stackexchange.com/a/4526/2512
Энди