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

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

т.е.

Я хотел бы изменить PgUp для Размещения или PgDown для Окончания.

Встроенное управляет, или инструмент существуют, повторно присваивают ключи в Ubuntu/GNOME?

268
задан 14 August 2014 в 12:53

9 ответов

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


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

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

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

     состояние 0x10, код клавиши 110 (keysym 0xff55, Prior), same_screen YES,
     

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

     состояние 0x10, код клавиши 115 (keysym 0xff56, Next), same_screen ДА,
     

    Здесь снова нас интересует код 115 и Далее - название поведения.

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

      xmodmap -e "код клавиши 110 = Далее"
     

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

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

      xmodmap -e "keycode 53 = backslash bar"
     

Дополнительная информация: Последовательность этих сопоставлений: Клавиша , Shift + клавиша , 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 = behavior behavior_with_modifier"

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

xmodmap -e "keycode 91 mod2 = KP_Delete period"

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

274
ответ дан 14 August 2014 в 12:53

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

 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
21
ответ дан 14 August 2014 в 12:53

Hei ass wéi ech probéiert hunn d'Mapping vun der ENTER ze wiesselen. Schlëssel fir de SHIFT Schlëssel (a vice versa):

$ uname -a

RAPPORTER:

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

$ which xmodmap

RAPPORTER:

/usr/bin/xmodmap

$ which xev

RAPPORTER:

/usr/bin/xev

$ xev

(ignoréiert déi nächst fofzeg Zeilen oder sou)

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

Wat wichteg ass déi drëtt Zeil vun all Tastendrock:

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

REVERSE D'KARTUNGUNG:

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

SPART D'RESULTATEN:

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

Füügt Bäi

 xmodmap ~/.Xmodmap

$ sudo reboot

Den Haaptprobleem war datt de Réckgang NET funktionnéiert. De ENTER Schlëssel gouf op de SHIFT_R Schlëssel mappéiert; awer de SHIFT_R Schlëssel war net op de ENTER Schlëssel. Gitt Figur.

11
ответ дан 14 August 2014 в 12:53

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

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

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

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

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

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

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

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

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

16
ответ дан 14 August 2014 в 12:53

Чтобы выполнить глобальное переназначение независимо от X, вы можете вместо этого использовать console-setup (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...)

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

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

и console-setup необходимо перенастроить (пропуская вопросы с низким приоритетом with -phigh )

sudo dpkg-reconfigure console-setup -phigh

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

8
ответ дан 14 August 2014 в 12:53

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

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

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

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

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

3
ответ дан 14 August 2014 в 12:53

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

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

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

Я бы хотел изменить ] PgUp до Home или PgDown до End .

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

Enable=1
MapK112=K110
MapK117=K115
0
ответ дан 14 August 2014 в 12:53

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

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

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

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

1
ответ дан 5 January 2021 в 23:56

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

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