Оскільки ви хочете перезаписати ключі для всіх програм, найкращим варіантом є використання xmodmap. Він гнучкий і дуже потужний, але включає введення кількома командами в термінал.
Крок 0 - Підхід
X-сервер управляє клавіатурою та всіма ключовими подіями і переводить їх у кодові клавіш для всіх програм.
Підхід полягав би в тому, щоб відобразити модифікаційну клавішу (наприклад, клавішу Super або Right Alt) як клавішу "перемикання режимів" і сказати X-серверу генерувати різні коди залежно від того, натиснута чи клавіша Mode, утримувана чи ні.
За замовчуванням не визначена клавіша перемикання режимів, а також всі клавіші налаштовані для генерування одного і того ж коду при натисканні з перемикачем режиму або без нього. Це добре, оскільки це означає, за винятком ключів, які ви чітко переосмислюєте, жоден інший ключ не поводитиметься інакше або потребує додаткової конфігурації.
Однак я хотів би, щоб ви розглядали можливість використання клавіші Right Alt як перемикача режиму, особливо якщо ви також використовуєте compiz, оскільки деякі додатки compiz відображають супер клавіші швидкого доступу (наприклад, вибір вікон, перемикач переключень тощо). Якщо ви не прагнете контролювати compiz за допомогою клавіатури, то Super просто чудово.
Для xmodmap, супер клавіші ідентифікуються як Super_L або Super_R. Вам потрібно вибрати один, який буде використовуватись як клавіша перемикання режиму. Крім того, правою клавішею Alt є Alt_R. Ви можете підтвердити це, запустивши xev і натиснувши необхідні клавіші на клавіатурі. Дивіться цю публікацію щодо кроків.
Крок 1 - Налаштування карти модифікатора
Відкрийте термінал ( Applications -> Accesories -> Terminal
) і запустіть наступну команду, щоб створити файл із поточними вкладками клавіш. Ми будемо використовувати це як вихідну точку.
xmodmap -pke > curkeys.map
xmodmap -pm >> curkeys.map
Відкрийте це в улюбленому текстовому редакторі. gedit curkeys.map &
відкриває його в gedit. Під кінець файлу ви побачите такі рядки:
keycode 253 =
keycode 254 =
keycode 255 =
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Видаліть рядок, починаючи з "xmodmap: до 4 ..."
Відредагуйте карту модифікатора, щоб вона виглядала приблизно так. Покладіть слово "додати" на початку кожного рядка та вставте "=" після імені модифікатора. Потім видаліть коди в дужках і комах. Також зауважте, що я перейшов Mode_switch
від mod5
рядка до mod3
рядка, оскільки він був порожнім. Змінена таблиця повинна виглядати приблизно так - фактичний вміст у вашому випадку буде дещо відрізнятися від наведеного нижче (залежить від розкладки клавіатури).
add shift = Shift_L Shift_R
add lock = Caps_Lock
add control = Control_L Control_R
add mod1 = Alt_L Meta_L Alt_R
add mod2 = Num_Lock
add mod3 = Mode_switch
add mod4 = Super_L Super_R Super_L Hyper_L
add mod5 = ISO_Level3_Shift
Перейдіть клавішу перемикання фізичного режиму. Додайте такий рядок наприкінці (замініть Super_L на Super_R або Alt_R, якщо потрібно).
keysym Super_L = Mode_switch
Видаліть ім'я ключа (Super_L) з будь-якого визначення модифікатора. Для Super_L це означає вилучити його з рядка mod4.
add mod4 = Super_R Hyper_L
Тепер права клавіша "Супер" все ще працюватиме як звичайна супер клавіша, тоді як ліва клавіша матиме особливі властивості.
Тепер нам потрібно перезаписати клавіші, щоб створити різні коди, натискаючи вони, утримуючи Super_L чи ні. Кожен рядок у нашому файлі, який починається з keycode
4 клавіш для кожної згенерованих клавіш, залежно від того, чи натиснуті клавіші Mod1 (перемикач) та перемикач режимів. ( Посилання )
!...........................................................................
! Key Base Shift Mode Mode+Shift
!---------------------------------------------------------------------------
keycode 13 = 4 dollar 4 quotedbl
keycode 14 = 5 percent 5 colon
keycode 15 = 6 asciicircum 6 comma
keycode 16 = 7 ampersand 7 period
...
keycode 45 = k K k K
Якщо ми хочемо, щоб клавіша Super_L + k генерувала клавішу "+", тоді нам потрібно модифікувати її для читання
keycode 45 = k K plus plus
Остаточний плюс також відображає Shift + Super_L + k на плюс, але це може бути відображено на щось інше. Для кожної клавіші є рівно 1 рядок для зміни. Відредагуйте більше рядків, щоб перевстановити більше клавіш - перші 2 записи залиште недоторканими, щоб зберегти нормальну поведінку клавіші.
Збережіть файл та вийдіть із редактора.
Встановіть карту клавіш, виконавши наступні команди в терміналі. Перший встановлює його для цього сеансу, другий робить його постійним для майбутніх сесій.
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
Ви можете негайно перевірити це, натиснувши модифіковані клавіші (наприклад, Super_L + k).
Крок 3 - Додавання / перегляд карти
Після встановлення зміненої карти легко додати нові ключі.
Використовуйте xev для пошуку ключових кодів та ключів
протестуйте його, виконавши цю команду для відображення ключа:
xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
Замініть елементи у кутових дужках (наприклад, <code>
<base>
тощо) відповідними значеннями.
Резервне копіювання curkeys.map
файлу.
- Відкрийте
curkeys.map
рядок та відредагуйте відповідний код клавіш.
Повторно застосуйте наведені нижче команди (перший не потрібен, якщо ви зробили крок 2)
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
Примітка: 1 : Зміни, зроблені в клавіатурних скороченнях (через, наприклад, System -> Preferences -> Keyboard Shortcuts
), впливають на карту модифікатора і, як правило, втрачаються при наступному вході. Тому, будь ласка, уникайте цього.
Примітка: 2 : Я іноді отримую подібні повідомлення про помилки під час використання цього методу. Я не знаю, що це означає, однак, вони, як правило, нешкідливі.
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 118 (X_SetModifierMapping)
Value in failed request: 0x17
Serial number of failed request: 263
Current serial number in output stream: 263
Детальну допомогу для xmodmap можна отримати тут .