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

215

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

то есть.

Я хотел бы изменить PgUp на Главная или PgDown на Конец .

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

    
задан NES 05.02.2011 в 14:20
источник

7 ответов

236

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

Для переназначения определенных ключей вам понадобятся два инструмента. Сначала xev (инструмент командной строки) и второй 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 отображался на обратную косую черту в обычном порядке, а на символ штриха при использовании со сдвигом, вы можете сделать:

     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 in.

Теперь вы можете изменить .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 .

    
ответ дан NES 08.02.2015 в 11:17
источник
18

Если вы пытаетесь переместить клавишу 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
    
ответ дан cmcginty 17.12.2012 в 19:46
16

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

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

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

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

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

Firefox имеет аддон под названием keyconfig ... для некоторых сведений см. этот Сообщение MozillZine

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

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

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

    
ответ дан Peter.O 05.02.2011 в 15:04
8

Вот как я попытался переключить отображение клавиши 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: 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

ADD

 xmodmap ~/.Xmodmap

$ sudo reboot

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

    
ответ дан Bill Davis 27.01.2012 в 04:04
6

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

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

Сначала я использовал dumpkeys (1) , чтобы получить шаблон для сопоставления, в случае ключа D , интересным битом является сопоставление для кодового ключа 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 (код клавиатуры 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'

и настройка консоли необходимо переконфигурировать (пропустить вопросы с низким приоритетом с% co_de%)

sudo dpkg-reconfigure console-setup -phigh

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

    
ответ дан arand 09.01.2014 в 13:09
3

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

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

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

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

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

    
ответ дан HRJ 20.01.2014 в 06:30
0

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

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