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

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

12
задан 3 November 2011 в 00:39

1 ответ

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

Шаг 0 - подход

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

Подход должен был бы отобразить модифицирующую клавишу (как Супер или Правильная клавиша Alt) как ключ "переключателя режимов" и сказать X-серверу генерировать различные коды в зависимости от того, нажата ли клавиша с удерживаемым ключом Режима или нет.

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

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

К 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 & открывает его в gedit. К концу файла Вы будете видеть некоторые строки как это:

    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. Удалите keyname (Super_L) из любого определения модификатора. Для Super_L это означает удалять его из mod4 строки.

    add mod4    =    Super_R Hyper_L 
    

    Теперь правильный "Супер" ключ будет все еще действовать как нормальный супер ключ, тогда как левый ключ будет иметь специальные свойства.

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

    !...........................................................................
    !        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 для нахождения кодов клавиши и keysyms

  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 доступна здесь.

15
ответ дан 3 November 2011 в 00:39

Другие вопросы по тегам:

Похожие вопросы: