Привязать Super + I / J / K / L к клавишам со стрелками [dублировать]

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

Какие приложения я могу использовать для этого?

Индекс:

Xbindkeys Стандартная клавиатура и ярлыки по умолчанию (изнутри системных настроек) Xmodmap Xkeycaps Autokey xkb

Я все еще ищу ответы, используя dconf и любой другой метод.

110
задан 13 April 2017 в 15:25

92 ответа

Xev и xmodmap

Изменение привязок клавиш с использованием xev и xmodmap.

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

Xev "создает окно, а затем запрашивает X-сервер для отправки его событий всякий раз, когда что-либо происходит с окном (например, оно перемещается, изменяется, вводится, нажимается и т. д.). . xev man page

xmodmap - это программа "используется для редактирования и отображения карты модификатора клавиатуры и таблицы раскладки клавиатуры, которые используются клиентскими приложениями для преобразования кодов событий событий в keysyms. " xmodmap man page

Следующий пример переназначит ключ Caps_Lock на поведение клавиши Esc (многие пользователи vi / vim найти это полезное клавиатурное отображение).

Использование xev

Запустите приложение xev из окна терминала (Ctrl-Alt-t).

Приложение будет инициализироваться, отображать ряд строк и запускать пустое окно. Держите окно приложения xev в фокусе и нажмите клавишу, свойства / поведение которой вы хотите использовать.

  • Нажмите клавишу ESC

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

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

. На этот раз мы ищем код ключа, который использует 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) ""

Использование xmodmap

Теперь, когда мы получили информацию о ключах, которые мы хотим изменить с xev, мы будем использовать xmodmap для изменения раскладок. Из командного терминала (Ctrl + Alt + t) выполните следующие команды:

  • Эта команда модифицирует Caps Lock для использования того же поведения, что и Esc
    xmodmap -e "keycode 66 = Escape"
    
  • Этот параметр печатает таблицу раскладок в виде выражений в файле ~/.Xmodmap
    xmodmap -pke > ~/.Xmodmap
    

Активировать изменения (только для этого сеанса входа) с помощью следующей команды:

    xmodmap ~/.Xmodmap

Внесение изменений в перезагрузку:

  • Если этого не существует, создайте файл в домашней папке с именем .xinitrc.
    touch .xinitrc
    
    Поместите следующую строку в файл и сохраните файл:
    xmodmap ~/.Xmodmap
    

Изменение клавиш с различными режимами состояния

(например, Num Lock)

  • Получить таблицу клавиш клавиатуры для клавиш модификатора (вывод сокращенно здесь)
    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>"

Ресурс

80
ответ дан 16 August 2018 в 06:36
  • 1
    Возможно ли с помощью xbindkeys сопоставить Meta + C / V для копирования / вставки и Meta + Space для языкового переключения? – Sonique 14 May 2015 в 10:56
  • 2
    есть способ присоединения последовательности символов к одному ключу, например, attach "уравнение" к клавише увеличения громкости? – JPi 1 December 2015 в 18:16
  • 3
    +1! У меня есть корейская клавиатура atm без ключа alt-gr, и мне это нужно, поэтому ваш ответ был очень полезен, чтобы заставить его работать. Для справки в будущем и поскольку ключ alt-gr не является самым простым для установки, вот команда (я использовал ключ hanja, который имеет код 130): xmodmap -e & quot; keycode 130 = ISO_Level3_Shift Multi_key ISO_Level3_Shift Multi_key & quot; – Shautieh 23 February 2016 в 17:18

xbindkeys ..

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: firefox
  • Для Chromium: chromium-browser
  • Для Opera: 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 при нажатии средней кнопки мыши .

80
ответ дан 21 August 2018 в 05:15
  • 1
    Возможно ли с помощью xbindkeys сопоставить Meta + C / V для копирования / вставки и Meta + Space для языкового переключения? – Sonique 14 May 2015 в 10:56
  • 2
    есть способ присоединения последовательности символов к одному ключу, например, attach "уравнение" к клавише увеличения громкости? – JPi 1 December 2015 в 18:16

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

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