Как мне переназначить определенные ключи или устройства?

Я ищу способ переназначить определенные ключи в ubuntu.

т.е.

Я бы хотел измениться PgUp к Home или PgDown к End.

Существует ли встроенная команда или инструмент для переназначения ключей в Ubuntu / GNOME?

Уведомление: По состоянию на 2013 год Ubuntu и производные от него больше не используют xmodmap, но вместо этого используйте xkb. Для получения дополнительной информации см. этот ответ. Приведенный ниже ответ больше не относится к текущим выпускам.


Для переназначения определенных ключей вам понадобятся два инструмента. Первый ксев (инструмент командной строки) и второй xmodmap (также инструмент командной строки). Оба должны быть доступны в Ubuntu без дополнительной их установки.

  1. Запустите окно терминала и запустите xev. Теперь он активен и ждет, пока вы нажмете клавишу. Затем нажмите клавишу, поведение которой вы хотите изменить. т.е. PgUp.

  2. xev выведет некоторую информацию о нажатой клавише. Третья строка очень важна. Это должно выглядеть примерно так:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,

    в этом примере Prior это имя поведения, которому в данный момент присвоен ключ, цифровой код ключа - это внутренний идентификатор для распознавания ключа.Теперь сделайте это с помощью другого ключа, т.е. PgDown дайте этот результат

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,

    Здесь опять же интересная часть для нас заключается в следующем keycode 115 и Next - название поведения.

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

     xmodmap -e "keycode 110 = Next"

    Это изменит клавишу с кодом 110 на вашей клавиатуре на действие Next. Это довольно просто.

    Обратите внимание, что если сопоставляемый ключ должен иметь другое значение при использовании с Shift клавиша (например, для британских раскладок клавиатуры, Shift+2 заключает в кавычки), то вы можете просто перечислить вторичную команду после первой. Например, если вы хотите, чтобы клавиша с кодом 53 обычно отображалась на обратную косую черту, но на символ штриха при использовании с shift, вы можете сделать:

     xmodmap -e "keycode 53 = backslash bar"

Дополнительная информация: Последовательность этих отображений такова Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. Чтобы пропустить столбец, используйте NoSymbol. Более того, здесь это полный список всех ключевых символов.

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

xmodmap -pke >~/.Xmodmap

(он создает файл с именем .Xmodmap в вашем домашнем каталоге (~))

Затем вы должны создать файл с именем .xinitrc в вашем домашнем каталоге, куда вы помещаете команду xmodmap .Xmodmap в.

Теперь вы можете изменить .Xmodmap и бежать xmodmap .Xmodmap из консоли, чтобы сразу увидеть изменения. Изменения в .Xmodmap будет сохраняться.

источник: Ubuntu Для Android

Бонусные материалы:

Если переназначаемая клавиша ведет себя по-разному в зависимости от состояния (например, как клавиши на цифровой клавиатуре зависят от NumLock), вам просто нужно сделать xmodmap -pm чтобы получить список модификаторов, а затем выполнить:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

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

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2, потому что xmodmap -pm говорит нам, что mod2 является Num_Lock, другие имена получаются нажатием клавиш в xev.

Если вы пытаетесь переместить клавишу Shift, есть несколько дополнительных шагов:

 xmodmap -e "keycode 62 = Up" # Shift => Up xmodmap -e "keycode 111 = Shift_R" # Up => Shift xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting xset r 62 # Make the new Up key autorepeat xset -r 111 # Prevent the new Shift key from autorepeating

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

ОБНОВЛЕНИЕ: моя "запоздалая мысль" подтвердилась; (я ответил не на тот вопрос :) ... пожалуйста, ознакомьтесь с ответом сообщества NES Wiki (принятым выше).

Существует два основных способа переназначить повторная привязка ключа.

  • локально для конкретной программы
    (ключ может использоваться для разных целей в разных приложениях / окнах)
  • глобально для конкретного пользователя
    (клавиша выполняет одну и ту же функцию во всех окнах)

Для методов "local to a program" иногда есть способ изменить привязки клавиш, предлагаемые самим приложением ... например.

Firefox имеет аддон под названием настройка ключа ... для получения дополнительной информации смотрите Это Сообщение MozillZine

Большинство программ Ubuntu основаны на Gnome, и существует специальная утилита для изменения привязки клавиш для любого пункта меню этих приложений Gnome... Это называется Editable Menu Accelerator ... Это очень "чувствительный" инструмент, но довольно мощный.. Вы можете включить его, выполнив gconf-editor (через терминал или Alt+F2)... перейдите к desktop--gnome--interface и выберите can_change_accels .... Затем вы можете изменить пункты меню на виртуальные все, что вам нравится (для каждой программы / окна)... Я предлагаю вам отключить его, как только вы сделаете то, что вам нужно..

В противном случае вы можете настроить глобальные горячие клавиши. Я использую программу под названием xbindkeys Install xbindkeys, и есть также опция, доступная через главное меню - Настройки, называемая Keyboard Shortcuts

Если вы используете xbindkeys, вам нужно будет добавить его в свой раздел "Запуск приложений" (Главное меню - Настройки)... Кроме того (как предложил Стефано Палаццо), я ранее написал более подробное описание xbindkeys в ответе на этот вопрос страница askubuntu

Вот как я попытался переключить отображение ENTER ключ к SHIFT ключ (и наоборот):

$ uname -a

отчеты:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux$ which xmodmap

отчеты:

/usr/bin/xmodmap$ which xev

отчеты:

/usr/bin/xev$ xev

(игнорируйте следующие пятьдесят строк или около того)

PRESS THE ENTER KEY (notice the third line):KeyPress event, serial 33, synthetic NO, window 0x5600001,    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,    XLookupString gives 1 bytes: (0d)    XmbLookupString gives 1 bytes: (0d)    XFilterEvent returns: FalseKeyRelease event, serial 33, synthetic NO, window 0x5600001,    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,    XLookupString gives 1 bytes: (0d)    XFilterEvent returns: FalsePRESS THE SHIFT KEY (notice the third line):KeyPress event, serial 30, synthetic NO, window 0x5600001,    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,    XLookupString gives 0 bytes:    XmbLookupString gives 0 bytes:    XFilterEvent returns: FalseKeyRelease event, serial 33, synthetic NO, window 0x5600001,    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,    XLookupString gives 0 bytes:    XFilterEvent returns: False

Что важно, так это третья строка каждого нажатия клавиши:

FOR:state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,The name "Return" is the name of the behavior of the key pressed.The number of the key pressed is "36".state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,The name "Shift_R" is the name of the behavior of the key pressed.The number of the key pressed is "62".

ОБРАТНОЕ ОТОБРАЖЕНИЕ:

$ xmodmap -e "keycode 62 = Return"$ xmodmap -e "keycode 36 = Shift_R"

СОХРАНИТЕ РЕЗУЛЬТАТЫ:

$ xmodmap -pke > ~/.Xmodmap$ vi ~/.xinitrc

добавлять

 xmodmap ~/.Xmodmap$ sudo reboot

Главная проблема заключалась в том, что разворот НЕ сработал.То ENTER ключ был сопоставлен с SHIFT_R ключ; но тот SHIFT_R ключ не был сопоставлен с ENTER ключ. Поди разберись.

Чтобы выполнять глобальные переназначения независимо от X, вы можете использовать консоль-настройка(5) вместо.

В моем случае я хотел переназначить Caps Lock ключ к D, с тех пор как мой D-ключ сломан :)

Сначала я использовал дамп-ключи(1) чтобы получить шаблон для сопоставления, в случае D-ключ, интересный бит - это отображение для ключевого кода 32 (на моей клавиатуре); Обратите внимание, что в шаблоне grep есть два пробела!

$ sudo dumpkeys | grep "keycode  32" > tempfile$ cat tempfilekeycode  32 = +d    shift   keycode  32 = +D    altgr   keycode  32 = +eth    shift   altgr   keycode  32 = +ETH    control keycode  32 = Control_d    shift   control keycode  32 = Control_d    altgr   control keycode  32 = Control_d    shift   altgr   control keycode  32 = Control_d(121 lines total...)

Для того, чтобы изменить карту, чтобы применить к Caps Lock (ключевой код 58 на моей клавиатуре) вместо этого

sed 's/32/58/' -i tempfile

Теперь он гласит

keycode  58 = +d    shift   keycode  58 = +D    altgr   keycode  58 = +eth(etc...)

Чтобы добавить это переназначение к карте по умолчанию, его просто необходимо добавить к включаемому файлу переназначения для консоль-настройка

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

и консоль-настройка нуждается в перенастройке (пропуск вопросов с низким приоритетом с -phigh)

sudo dpkg-reconfigure console-setup -phigh

Теперь переназначение должно быть завершено и загружено автоматически при загрузке.

Я потратил целый день на то, чтобы создать ярлык для Ctrl+Pageup.

Я впервые попробовал xmodmap но это не может генерировать события-модификаторы. Таким образом, невозможно создать ярлык, который генерирует, например, Control событие.

Затем я попытался xbindkeys с xmacro. Это вроде как работает, но xbindkeys не удается захватить некоторые комбинации клавиш в моей системе, такие как Alt + ___.

>Итак, я, наконец, использовал собственные сочетания клавиш Unity - Пользовательские сочетания клавиш для настройки моего ярлыка.

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

Вы также могли бы попробовать https://github.com/sezanzeb/key-mapper

Он работает в фоновом режиме и активно вводит сопоставленные коды ключей.


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

Или напишите файл xkb "symbols" и используйте setxkbmap, но я бы не рекомендовал этого делать. setxkbmap также можно использовать для каждого устройства.

Написание конфигураций xkb или xmodmap вызвало у меня проблемы, хотя, если оба устройства сообщают один и тот же код ключа, даже если конфигурация сопоставляет их с разными символами при одновременном нажатии (что является основной причиной, по которой мне пришлось написать инструмент для инъекций для этого)

И недавно я наткнулся на это решение: https://www.reddit.com/r/linux_gaming/comments/k3h9qv/remapping_keys_using_hwdb_files/

>Для меня автоключ из Центра программного обеспечения работал лучше всего. Он имеет интуитивно понятный графический интерфейс, чтобы добавить новую привязку, нажмите Новую фразу и

  1. Добавьте имя, нажмите кнопку ОК
  2. В разделе "Настройки фразы" убедитесь, что для параметра вставить с помощью клавиатуры установлено значение клавиатура
  3. Добавьте горячую клавишу, которую вы хотите использовать
  4. Добавьте команду в текстовое поле, например, для эмуляции клавиши со стрелкой влево - это было бы <left> (список специальных ключей приведен здесь).

Непостоянное переназначение с помощью ярлыка на рабочем столе .

В моем случае я хотел переназначить десятичную точку клавиатуры на запятую, но только временно, поэтому xmodmap удовлетворяет этому требованию в моем случае

  • Узнайте, что такое ключевой код для конкретного ключа для переназначения и keysym Я тоже хочу составить карту.
    • :~$ xev | grep keycode
  • Нажимайте интересующие вас клавиши и следите за стандартным выводом
    state 0x10, keycode 91 (keysym 0xffae, KP_Decimal), same_screen YES,    XKeysymToKeycode returns keycode: 129    state 0x10, keycode 59 (keysym 0x2c, comma), same_screen YES,
  • 1-й я нажал клавишу, которую хочу переназначить, и 2-й я нажал клавишу, которую хочу сопоставить.

    • Ключевой код ключа, который я хочу переназначить : ..., keycode 91 (...
    • Keysym Я хочу, чтобы этот код ключа был сопоставлен с: ...(keysym 0x2c, comma),...
  • Узнайте, каково текущее сопоставление для переназначаемого ключевого кода:

    • :~$ xmodmap -pke | grep "keycode\s*91"
keycode  91 = KP_Delete KP_Decimal KP_Delete KP_Decimal

Как указано в справочной странице xmodmap: К ключу может быть прикреплено до восьми ключевых символов.. : 1 - й keysym используется, когда нет ключ-модификатор, 2 - й с Shift и т.д... Это не совсем соответствует тому, что происходило в моем случае, но метод проб и ошибок позволил мне обнаружить, что 2-й позиционный аргумент был тем, который я искал

  • Сопоставьте с новой конфигурацией.

    • :~$ xmodmap -e "keycode 91 = KP_Delete comma KP_Delete KP_Decimal"
  • Сопоставьте обратно с исходной конфигурацией.

    • :~$ xmodmap -e "keycode 91 = KP_Delete KP_Decimal KP_Delete KP_Decimal"
  • Я создал пару .desktop ярлыки в ~\.local\share\applications\ чтобы легко переключаться на ту или иную конфигурацию:

[Desktop Entry]Name=KeyPad commaExec=xmodmap -e "keycode 91 = KP_Delete comma KP_Delete KP_Decimal"Terminal=falseType=ApplicationIcon=/home/paui/.icons/KP_comma.png

Дополнительная информация:поле состояния выход из xev,

Поле состояния представляет собой "сумму" текущих активных модификаторов. Это те, которые я расшифровал.

    0x01 Shift    0x02 Caps    0x04 Control    0x08 Alt    0x10 NumLock    0x80 Alt Gr

Если вам нужно переназначить ключ только для определенной программы, я просто добавил эта функция для hax11.

Я бы хотел измениться PgUp к Home или PgDown к End.

Чтобы сделать это с помощью hax11, откройте файл конфигурации профиля программы в разделе ~/.config/hax11/profiles (например ~/.config/hax11/profiles/usr\lib\firefox\firefox), и добавить:

Enable=1MapK112=K110MapK117=K115

Какие-нибудь привязки, подобные Emacs, здесь для CTRL-P / N для единичных шагов?

проверьте мой ответ здесь. Не стоит копировать и вставлять один и тот же ответ. Возможно, это помогло бы вам.

С некоторых пор xmodmap устарел! чтобы получить общесистемную настройку, вы должны использовать xkb. Поэтому отредактируйте языковой файл в /usr/share/X11/xkb/symbols/, чтобы добавить туда свои изменения.

Видишь shortcut keys - Configure Caps Lock as AltGr and Arrows like in vim - Ask Ubuntu