Я пользователь Ubuntu 10.04, который ищет способ, например, сделать так, чтобы мой компьютер набирал символ «+», когда я удерживал клавишу Windows kbd> (я думаю, что она называется < kbd> Super kbd> в мире Linux) и нажмите клавишу K kbd>. Мне это нужно для работы во всех приложениях. (Я человек с нарушениями ввода текста, и мне нужно адаптировать Ubuntu к моим потребностям.) Спасибо!
Так как Вы хотите повторно отобразить ключи для всех приложений, наилучший вариант состоит в том, чтобы использовать xmodmap. Это гибко и очень мощно, но вовлекает ввод в несколько команд в терминал.
X-сервер управляет клавиатурой и всеми ключевыми событиями и переводит это в коды клавиши для всех приложений.
Подход должен был бы отобразить модифицирующую клавишу (как Супер или Правильная клавиша Alt) как ключ "переключателя режимов" и сказать X-серверу генерировать различные коды в зависимости от того, нажата ли клавиша с удерживаемым ключом Режима или нет.
По умолчанию нет никакого определенного ключа переключателя режимов, и также все ключи настроены, чтобы сгенерировать тот же код, когда они нажимаются с или без переключателя режимов. Это хорошо, так как это означает за исключением ключей, Вы не переопределяете явно никакие другие ключи, будет вести себя по-другому или нуждаться в дополнительной конфигурации.
Однако я хотел бы, чтобы Вы рассмотрели использование Правильной клавиши Alt как переключателя режимов особенно, если Вы также используете compiz, так как некоторые compiz плагины отображают супер ключевые ярлыки (например, средство выбора окна, переключатель сдвига и т.д.). Если Вы не увлечены управлением compiz через клавиатуру, затем Супер очень хорошо.
К xmodmap супер ключи идентифицируются как Super_L или Super_R. Необходимо выбрать для использования в качестве ключа переключателя режимов. С другой стороны, правильная клавиша Alt является Alt_R. Можно подтвердить их путем выполнения xev и нажатия необходимых клавиш на клавиатуре. См. это сообщение для шагов.
Откройте терминал (Applications -> Accesories -> Terminal
) и выполненный следующая команда для создания файла с текущими привязками клавиш. Мы будем использовать это в качестве начальной точки.
xmodmap -pke > curkeys.map
xmodmap -pm >> curkeys.map
Откройте это в своем любимом текстовом редакторе. 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)
Удалите строку, запускающуюся с "xmodmap: до 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
Повторно отобразите физический ключ переключателя режимов. Добавьте строка как это в конце (Замените Super_L Super_R или Alt_R при необходимости).
keysym Super_L = Mode_switch
Удалите keyname (Super_L) из любого определения модификатора. Для Super_L это означает удалять его из mod4 строки.
add mod4 = Super_R Hyper_L
Теперь правильный "Супер" ключ будет все еще действовать как нормальный супер ключ, тогда как левый ключ будет иметь специальные свойства.
Теперь мы должны повторно отобразить ключи для создания различных кодов, нажимаются ли они в то время как удержание 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 записи неповрежденными для сохранения нормального поведения нажатия клавиши.
Сохраните файл и выйдите из редактора.
Установите контурную карту путем выполнения следующих команд в терминале. Первый настраивает его для этой сессии, второе делает это постоянным для будущих сессий.
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
Можно сразу протестировать это путем нажатия измененных клавиш (Super_L + k, например).
После того как измененная карта установлена, легко добавить новые ключи.
Используйте xev для нахождения кодов клавиши и keysyms
протестируйте его путем выполнения этой команды для отображения ключа:
xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
Объекты замены в угловых скобках (как <code>
<base>
и т.д.) с соответствующими значениями.
Скопируйте curkeys.map
файл.
curkeys.map
и отредактируйте строку для соответствующего кода клавиши.Повторно применяйтесь с ниже команд (сначала, каждый не необходим, если Вы сделали шаг 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 доступна здесь.