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


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

то есть

Я бы хотел изменить вверх на страницу в Главная или PgDown в Конец,

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


211
2018-02-05 13:20


Источник


проверить мой ответ Вот, Не стоит копировать и вставлять один и тот же ответ. Возможно, это поможет вам. - virpara
Любые привязки, подобные Emacs, для CTRL-P / N для этапов установки? - Léo Léopold Hertz 준영
С некоторого времени xmodmap лишен! чтобы получить системную настройку, которую вы должны использовать xkb, Поэтому отредактируйте языковой файл в /usr/share/X11/xkb/symbols/ чтобы добавить туда свои изменения. Видеть askubuntu.com/a/898462/34298 - rubo77


Ответы:


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


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

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

  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, Это довольно просто.

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

     xmodmap -e "keycode 53 = backslash bar"
    

Дополнительная информация: Последовательность этих отображений ключ, 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 Foruns

Бонусы:

Если ключ, который вы переназначаете, имеет другое поведение в зависимости от состояния ( как ключи на цифровой клавиатуре зависят от 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,


231
2017-12-17 18:46



xev не может поймать Fn нажатие клавиш - om-nom-nom
Мне нравилось, как вы объясняли все, вместо того, чтобы просто размывать синтаксис с местами для замены - Programming Noob
Выбранный ответ не работал для переназначения ключа Caps-lock для меня на Ubuntu 12.10. Я смог сделать это, перейдя в «Настройки системы» -> «Клавиатура» -> «Настройки макета» -> «Параметры», в котором есть список ключей и альтернативных вариантов поведения. Работала безупречно в Единстве и терминале. - Allyl Isocyanate
Странно, я сделал все, но мои сопоставления клавиш все еще перезагружались после перезапуска. - Costa
Я не думаю, что у меня есть -event флаг в Ubuntu 12.04. Он выдает ошибку и не упоминает «событие» в man xev, - isomorphismes


Если вы пытаетесь переместить клавишу 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

18
2018-02-05 14:04



+1 Самый unix-y ответ от всех тех, которые были для модификатора (я уже делал это так, обращаясь к моему iBook 2, когда я хотел, чтобы клавиша ввода имела функцию Control_R, но забыла детали). - rbrito
Важный ответ для пользователей, использующих клавиатуры на ноутбуках Lenovo - Einar Ólafsson


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

ОБНОВИТЬ: моя «запоздалая мысль» подтверждена; (Я ответил на неправильный вопрос:) ... см. Ответ Wiki сообщества NES (принято выше).

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

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

Для методов «local to the program» иногда есть способ изменить ключевые привязки, предлагаемые самим приложением ... например.

Firefox имеет аддон, называемый keyconfig ... для некоторой информации см. это Сообщение 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


16
2018-01-27 03:04



+1, очень приятно! Предложение: вы должны интегрировать свои отличный ответ от другого вопроса в этот, возможно, также немного объясните конфигурационный формат xbindkeys. - Stefano Palazzo♦
Бит о назначении других ключей может быть обработан xdotool, проверьте man-страницу, я использовал ее для решения Эта проблема, - Stefano Palazzo♦
Недавно я нашел другой подход с помощью инструмента xmodmap в сочетании с инструментом xev. Я не знаю, каковы различия между xmodmap и xbindkeys, но это работает очень хорошо для меня. некоторые советы с инструментом, чтобы предпочесть названные два? Вот очень полезное пошаговое руководство, в котором описываются xmodmap и xev ubuntuforums.org/showpost.php?p=7675138&postcount=2 - NES
@NES .. Кажется, я обратился к неправильной точке. Кажется, вы хотите на самом деле переназначить, как конкретный ключ интерпретируется ОС, т. Е. Нестандартная интерпретация клавиатуры, тогда как я ссылаюсь на стандартная интерпретация клавиатуры и просто перегрузка заданий по умолчанию по умолчанию. (Я думаю, что вы за ним похожи на замену левой и правой кнопок мыши) .. Ну, кажется, мой ответ был хорош для неправильной вещи :) - Peter.O
да, но проблем нет. ответ тоже интересен. пошаговое руководство, которое я разместил выше, было правильным. поэтому я отправлю короткий ответ с помощью решения, которое у других пользователей будет хорошим руководством. спасибо fred - NES


Вот как я попытался переключить отображение ВОЙТИ ключ к СДВИГ ключ (и наоборот):

$ 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: False

KeyRelease 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: False

PRESS 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: False

KeyRelease 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

Основная проблема заключалась в том, что разворот НЕ работал. ВОЙТИ ключ был сопоставлен с SHIFT_R ключ; но SHIFT_R ключ не был привязан к ВОЙТИ ключ. Идите фигуру.


8
2018-01-20 05:30





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

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

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

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  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 (keycode 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

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


6
2017-07-28 12:15





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

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

Я тогда попытался xbindkeys с xmacro, Такие работы, но xbindkeys не может фиксировать некоторые комбинации клавиш в моей системе, такие как Alt + ___,

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

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


3





Для меня AutoKey из Software Center работал лучше всего. Он имеет интуитивно понятный графический интерфейс, для добавления нового привязки нажмите «Создать» -> «Фраза» и

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

0