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

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

то есть.

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

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

210 голосов | спросил NES 5 FebruaryEurope/MoscowbSat, 05 Feb 2011 16:20:44 +0300000000pmSat, 05 Feb 2011 16:20:44 +030011 2011, 16:20:44

7 ответов


231

Примечание: Начиная с 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 в.

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

ответил Sergiy Kolodyazhnyy 17 MarpmFri, 17 Mar 2017 18:58:51 +03002017-03-17T18:58:51+03:0006 2017, 18:58:51
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 MonEurope/Moscow2012-12-17T22:46:18+04:00Europe/Moscow12bEurope/MoscowMon, 17 Dec 2012 22:46:18 +0400 2012, 22:46:18
16

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

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

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

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

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

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

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

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

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

ответил Peter.O 5 FebruaryEurope/MoscowbSat, 05 Feb 2011 17:04:34 +0300000000pmSat, 05 Feb 2011 17:04:34 +030011 2011, 17:04:34
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 Jam1000000amFri, 27 Jan 2012 07:04:29 +040012 2012, 07:04:29
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'

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

sudo dpkg-reconfigure console-setup -phigh

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

ответил Bill Davis 27 Jam1000000amFri, 27 Jan 2012 07:04:29 +040012 2012, 07:04:29
3

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

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

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

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

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

ответил HRJ 20 Jam1000000amMon, 20 Jan 2014 09:30:13 +040014 2014, 09:30:13
0

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

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

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132