Я хочу изменить привязки клавиш на некоторых клавишах на моей клавиатуре. Я хочу, чтобы некоторые команды запускали команды и другие, чтобы активировать разные ключи.
Какие приложения я могу использовать для этого?
Индекс:
Xbindkeys Стандартная клавиатура и ярлыки по умолчанию (изнутри системных настроек) Xmodmap Xkeycaps Autokey xkb Изменение привязок клавиш с использованием xev
и xmodmap
.
Оба приложения командной строки доступны по умолчанию, поэтому нет необходимости устанавливать дополнительное программное обеспечение .
Xev "создает окно, а затем запрашивает X-сервер для отправки его событий всякий раз, когда что-либо происходит с окном (например, оно перемещается, изменяется, вводится, нажимается и т. д.). . xev man page
xmodmap - это программа "используется для редактирования и отображения карты модификатора клавиатуры и таблицы раскладки клавиатуры, которые используются клиентскими приложениями для преобразования кодов событий событий в keysyms. " xmodmap man page
Следующий пример переназначит ключ Caps_Lock на поведение клавиши Esc (многие пользователи vi / vim найти это полезное клавиатурное отображение).
Запустите приложение xev
из окна терминала (Ctrl-Alt-t).
Приложение будет инициализироваться, отображать ряд строк и запускать пустое окно. Держите окно приложения xev
в фокусе и нажмите клавишу, свойства / поведение которой вы хотите использовать.
В окне терминала вы увидите несколько строк вывода. Обратите внимание на третью строку. Это будет содержать имя свойства, которое вы хотите переместить на другой ключ.
KeyPress event, serial 32, synthetic NO, window 0x3e00001,
root 0x256, subw 0x0, time 16245388, (616,73), root:(1487,535),
state 0x10, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
XLookupString gives 1 bytes: (1b) ""
В этом случае клавиша Esc (код 9) использует имя «Escape» .
. На этот раз мы ищем код ключа, который использует Caps Lock.
Снова обратите внимание на третью строку:
KeyRelease event, serial 32, synthetic NO, window 0x4c00001,
root 0x256, subw 0x0, time 94702774, (862,151), root:(1733,613),
state 0x10, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
XKeysymToKeycode returns keycode: 9
XLookupString gives 1 bytes: (1b) ""
Теперь, когда мы получили информацию о ключах, которые мы хотим изменить с xev
, мы будем использовать xmodmap
для изменения раскладок. Из командного терминала (Ctrl + Alt + t) выполните следующие команды:
xmodmap -e "keycode 66 = Escape"
~/.Xmodmap
xmodmap -pke > ~/.Xmodmap
Активировать изменения (только для этого сеанса входа) с помощью следующей команды:
xmodmap ~/.Xmodmap
Внесение изменений в перезагрузку:
.xinitrc
. touch .xinitrc
Поместите следующую строку в файл и сохраните файл: xmodmap ~/.Xmodmap
xmodmap -pm
shift Shift_L (0x32), Shift_R (0x3e)
mod2 Num_Lock (0x4d)
Если вы хотите изменить, например , поведение периода на клавише Del / Period на цифровой клавиатуре, в запятую, используйте следующую команду:
xmodmap -e "keycode 91 mod2 = KP_Delete comma"
Обратите внимание, что это использует mod2
раскладку клавиш, чтобы изменить поведение клавиши, когда модификатор Num Lock. Синтаксис для этого:
xmodmap -e "<KEYCODE> <MODIFIER> = <behaviour> <behaviour_with_modifier>"
sudo apt-get install xbindkeys
Xbindkeys - очень универсальная программа, которая позволяет легко переназначить ключи.
Для создания конфигурационного файла по умолчанию используется команда:
xbindkeys --defaults
Распечатывает файл конфигурации по умолчанию. Поэтому, если вы хотите создать файл, содержащий значения по умолчанию, которые вы использовали бы:
xbindkeys --defaults > $HOME/.xbindkeysrc
Что печатает значения по умолчанию в скрытый файл с именем .xbindkeysrc
, расположенный в доме ( ~
).
Теперь, чтобы на самом деле измените привязки клавиш, нам сначала нужно знать, что такое имя или keysym этих ключей. xbindkeys
позволяет нам использовать дескриптор -k
, чтобы найти имя ключа или комбинации клавиш. Run:
xbindkeys -k
И нажмите комбинацию клавиш или клавиш. На вашем выходе будет выглядеть что-то , подобное этому (при нажатии пробела):
"NoCommand"
m:0x10 + c:65
Mod2 + space
"No Command"
сообщает, что в настоящее время никакая команда не связана с пробелом.
m:0x10 + c:65
Mod2 + space
Является именем комбинации клавиш / клавиш.
Позволяет открыть файл конфигурации, который вы сделали ранее:
gedit .xbindkeysrc
Вот отрывок из файла конфигурации по умолчанию:
#
# A list of keys is in /usr/include/X11/keysym.h and in
# /usr/include/X11/keysymdef.h
# The XK_ is not needed.
#
# List of modifier:
# Release, Control, Shift, Mod1 (Alt), Mod2 (NumLock),
# Mod3 (CapsLock), Mod4, Mod5 (Scroll).
#
# The release modifier is not a standard X modifier, but you can
# use it if you want to catch release events instead of press events
# By defaults, xbindkeys does not pay attention with the modifiers
# NumLock, CapsLock and ScrollLock.
# Uncomment the lines above if you want to pay attention to them.
#keystate_numlock = enable
#keystate_capslock = enable
#keystate_scrolllock= enable
# Examples of commands:
"xbindkeys_show"
control+shift + q
Каждая строка, начинающаяся с #
, является комментарием и не будет считана или запущена xbindkeys
.
Пока единственная строка, которая не закомментирована:
"xbindkeys_show"
control+shift + q
В этой выдержке показан основной синтаксис команд xbindkeys
:
"Command to run (in quotes)"
key to associate with command (no quotes)
Итак, вы можете видеть:
"xbindkeys_show"
control+shift + q
Запускает команду xbindkeys_show
при нажатии Ctrl + Shift + q.
Теперь попробуйте привязать несколько ключей. Я рекомендую очистить весь файл по умолчанию, чтобы он был пустым. Он содержит предустановленные привязки клавиш, которые вы, вероятно, не хотите.
Теперь скажем, вы хотите использовать Ctrl + b, чтобы открыть браузер. Сначала вам нужно знать, что такое имя или keysym из Ctrl + b. Как упоминалось ранее, вы можете использовать xbindkeys -k
, чтобы найти имя ключа или ключей, но есть более простой способ. Для простых комбинаций, таких как Ctrl + b, вы можете просто использовать:
Control+b
Намного проще!
Теперь найдите команду для своего любимого браузера:
firefox
chromium-browser
opera
Запомнить синтаксис ранее? Команда xbindkeys
для запуска Firefox (или другого любимого браузера) при нажатии Ctrl + b:
"firefox"
Control+b
Теперь поместите это в свой файл конфигурации и сохраните его. Теперь вы можете заметить, что ваша команда еще не работает, потому что xbindkeys
не работает. Чтобы запустить его, просто запустите xbindkeys
с терминала. Теперь ваш Ctrl + b должен начать ваш браузер!
Если вы хотите, чтобы клавиша на клавиатуре вызывала другой ключ на клавиатуре, вы нужна дополнительная часть программного обеспечения, поскольку xbindkeys
не поддерживает это самостоятельно. Я знаю две программы, которые мы можем использовать, xdotool
и xte
. Я предпочитаю xte
, поэтому я буду использовать это.
Установите его:
sudo apt-get install xautomation
Синтаксис для xte
выглядит так:
xte 'command key/mousebutton/xyCoordinates'
Примеры:
xte 'key keyName'
xte 'keydown keyName' 'keydown secondKeyName' 'keyup keyName' 'keyup secondKeyName
xte 'mouseclick buttonNumber'
(Мы немного поговорим о том, чтобы найти номера кнопок) xte 'mousemove xCoordinate yCoordinate'
man xte
Теперь, когда вы знаете команду для имитации нажатия клавиш, вы можете вызвать ее из своего сценария xbindkeys
, например:
"xte 'key b'"
Control+b
As вы можете догадаться, это вызывает xte 'key b'
, когда мы нажимаем Ctrl + b, который вводит ab в любой документ, над которым вы в настоящее время работаете.
Следует отметить, однако, что xbindkeys
и xte
не всегда хорошо работают вместе. Иногда вам нужно нажимать клавиши ровно одновременно, чтобы получить выход, в других случаях он работает отлично. Это может быть связано или не связано с конфигурацией системы и / или аппаратным обеспечением. Я не уверен. См. Ответ maggotbrain для более надежного способа привязки ключей к другим клавишам.
Вы также можете использовать xbindkeys
привязать кнопки мыши к командам (и оттуда сочетания клавиш, см. выше). Основной формат кнопок мыши должен быть вам знаком теперь:
" [command to run] "
b:n
Где [command to run]
- это команда, которую вы хотите запустить, и n
номер кнопки мыши, которую вы хотите использовать для этого command.
Если вы не знаете номер своей кнопки мыши, вы можете использовать xev
, чтобы узнать, что это такое:
xev | grep button
Выход будет чем-то вроде это:
user@host:~$ xev | grep button
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
state 0x10, button 2, same_screen YES
state 0x210, button 2, same_screen YES
state 0x10, button 3, same_screen YES
state 0x410, button 3, same_screen YES
Когда я нажимаю каждую из кнопок мыши.
Например:
" firefox "
b:2
Запускает firefox при нажатии средней кнопки мыши .