Як перезавантажити певні ключі чи пристрої?


236

Я шукаю спосіб перекомпонувати певні ключі в ubuntu.

тобто

Я хотів би змінити PgUpдо Homeабо PgDownдо End.

Чи існує вбудована команда чи інструмент переназначення ключів в Ubuntu / GNOME?


оформити мою відповідь тут . Не варто копіювати та вставляти однакову відповідь. Можливо, це допоможе тобі.
Рахул Вірпара

1
Будь-які Emacs-подібні прив’язки тут для CTRL-P / N для одиничних ступенів?
Лео Леопольд Герц 준영

Оскільки деякий час xmodmapоприлюднено! щоб отримати системне налаштування, яке ви повинні використовувати xkb. Тож відредагуйте мовний файл, /usr/share/X11/xkb/symbols/щоб додати там свої зміни. Дивіться askubuntu.com/a/898462/34298
rubo77

Відповіді:


249

Примітка: Станом на 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.


3
xevне в змозі спіймати Fnключові натискання
om-nom-nom

3
Вибрана відповідь не спрацювала для повторної перестановки для мене ключа Caps-lock на Ubuntu 12.10. Я зміг це зробити, перейшовши в Налаштування системи -> Клавіатура -> Налаштування макета -> Опції, де є список клавіш та альтернативної поведінки. Працювали бездоганно в Unity та терміналі.
Алліл Ізоціанат

1
Якщо у вас підключено кілька клавіатур, чи побачать ці інструменти різницю між тією ж клавішею на іншій клавіатурі?
stommestack

1
Як не дивно, я все зробив, але мої клавіші все одно скидаються після перезавантаження.
Коста

1
Я не думаю, що у мене є -eventпрапор в Ubuntu 12.04. Він видає помилку і не згадує "подію" в man xev.
ізоморфізми

20

Якщо ви намагаєтесь перемістити клавішу 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

+1 Найбільш unix-y відповідь з усіх модифікаторів (я вже зробив це так, зворотний шлях із моїм iBook 2, коли я хотів, щоб клавіша введення мала функцію Control_R, але забула деталі).
rbrito

2
Важлива відповідь для користувачів, які використовують клавіатури на ноутбуках Lenovo
Einar Ólafsson,

16

Я щойно задумався .. Я думаю, ви можете означати щось зовсім інше під "переоформленням" .. але я залишу свою відповідь такою, якою є ... (Я не знаю, як повторно призначити один ключ поводитись як інший)

ОНОВЛЕННЯ : мій "задум" підтверджено; (Я відповів на неправильне запитання:) ... дивіться відповідь Вікі спільноти NES (прийнято вище).

Існує два загальних способи перевстановити повторний зв'язок ключа.

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

Для методів "локальних програм" іноді існує спосіб змінити вкладки клавіш, запропоновані самим додатком ... наприклад.

Firefoxмає доповнення під назвою keyconfig ... для детальної інформації дивіться цей пост MozillZine

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

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

Якщо ви використовуєте xbindkeys, вам потрібно буде додати його до своїх «запуску програм» (головне меню - налаштування) ... Також (як запропонував Стефано Палаццо) я раніше писав більш детальний опис xbindkeys у відповідь на це сторінка askubuntu


+1, дуже приємно! Пропозиція: Вам слід інтегрувати свою чудову відповідь з іншого питання в цей, можливо, також трохи пояснити формат конфігурації xbindkeys.
Стефано Палацо

1
Трохи про присвоєння інших ключів можна впоратися xdotool, ознайомтеся з довідковою сторінкою, і я використовував її для вирішення цієї проблеми .
Стефано Палацо

Нещодавно я знайшов інший підхід із інструментом під назвою xmodmap у поєднанні з інструментом xev. я не знаю, в чому полягають відмінності між xmodmap та xbindkeys, але це для мене працює досить добре. кілька порад з інструментом, щоб віддати перевагу названим двом? Ось дуже корисний покроковий посібник, який описує xmodmap та xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES

@NES .. Схоже, я вирішив неправильну точку. Ви, здається, хочете фактично переробити спосіб інтерпретації певної клавіші ОС, тобто нестандартну інтерпретацію клавіатури, тоді як я зазначав стандартна інтерпретація клавіатури і просто перевантажувати типові призначення клавіш. (Я думаю, що ти
йдеш, схоже на зміну

так, але немає проблем. відповідь також цікава. покрокове керівництво я розмістив посилання вище було правильним шляхом. тож я опублікую коротку відповідь із рішенням, що інші користувачі мають хороший посібник. спасибі Фред
NES

9

Ось як я намагався переключити відображення 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

ДОДАТИ

 xmodmap ~/.Xmodmap

$ sudo reboot

Основна проблема полягала в тому, що розворот НЕ спрацював. ENTERКлюч був відображений на SHIFT_Rключ; але SHIFT_Rключ не відображався на ENTERключ. Піди розберися.


7

Для того, щоб робити глобальні перестановки незалежно від 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(клавішний код 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

Тепер перезапуск повинен бути завершений та завантажений автоматично під час завантаження.


3

Я провів цілий день, намагаючись створити ярлик для Ctrl+Pageup.

Я спершу спробував, xmodmapале це не може генерувати події модифікаторів. Тому неможливо створити ярлик, який генерує, наприклад, Controlподію.

Потім я спробував xbindkeysз xmacro. Цей вид працює, але xbindkeysне в змозі захопити деякі ключові комбінації в моїй системі, наприклад Alt + ___.

Тож я нарешті використав власні ярлики клавіатури Unity -> Спеціальні ярлики для налаштування свого ярлика.

І замість цього xmacroя зараз використовував xvkbdпрограму для генерації подій на клавіатурі, але це лише особисті переваги. І те xmacroй інше xvkbdпрацює майже однаково. Ще одна порада - додати параметр затримки xmacroабо xvkbdпереконатися, що події не втрачаються.


2

Для мене AutoKey з Software Center працював найкраще. Він має інтуїтивно зрозумілий графічний інтерфейс, щоб додати новий обов'язковий клік Нове -> Фраза та

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

Це працювало PERFEKT , щоб налаштувати Super+Cі Super+Vдо Ctrl+Cі Ctrl+V. Просто ідеальне рішення при використанні Ubuntu через VirtualBox на mac
Бен

Однак це не відключає інші команди, які слухають ці ярлики. Щоб відключити Super+V"показ списку сповіщень", перейдіть до Налаштування -> Пристрої -> Клавіатура та відключіть її там
Бен

@Ben yup, було б чудово, якби на ньому відображалися прив’язки інших додатків, але це швидше глазур на торті. Моя проблема полягає в тому, що перезаписати клавішу "Fn" неможливо. Я вирішив спробувати клавіатуру uhk - ця річ, програмована незалежно від OS, побачить, як це відбувається.
его

0

Якщо вам потрібно перезаписати ключ лише для певної програми, я щойно додав цю функцію до hax11.

Я хотів би змінити PgUpдо Homeабо PgDownдо End.

Для цього за допомогою hax11 відкрийте файл конфігураційного профілю програми під ~/.config/hax11/profiles(наприклад ~/.config/hax11/profiles/usr\lib\firefox\firefox) та додайте:

Enable=1
MapK112=K110
MapK117=K115
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.