Перевзначте клавіші Ctrl та Alt - помилка xmodmap 'BadValue'


13

Я намагаюся перевстановити клавіатуру, щоб зробити emacs зручним. Моя ергономічна клавіатура кладе свою єдину клавішу управління в ізольований 4-клавішний острівний шлях вліво.

ОС - це Debian видавлювання.

Ось рядки, до яких я намагаюся подати xmodmap, я розміщую їх у файлі ~ / .Xmodmap:

чіткий контроль
чіткий Mod1
! Клавіші Alt на моїй клавіатурі мають позначку "Опція",
! за допомогою xev показує, що вони надсилають Alt_L та Alt_R ключі відповідно
keyym Alt_L = Control_L
keyym Alt_R = Control_R
! Клавіші Super_L і Super_R - це клавіші Windows
клавіша Super_L = Alt_L
keyym Super_R = Alt_R
додати Control = Control_L Control_R
додати Mod1 = Alt_L Alt_R

Моя мета - змусити мої Altклавіші Option (ака ) поводитись як клавіші управління, а також змусити мої клавіші Windows (aka Super) вести себе так Alt.

Ось ключові коди та ключі, що виводяться xev для цих клавіш. Зауважте, моя клавіатура (ергономічна клавіатура Goldtouch) має лише одну клавішу управління.

клавішний код 37 (keyym 0xffe3, Control_L)
клавішний код 64 (keyym 0xffe9, Alt_L)
клавішний код 133 (keyym 0xffeb, Super_L)
клавіш 134 (keyym 0xffec, Super_R)
клавішний код 108 (keyym 0xffea, Alt_R)

Ось що відображається xev під час роботи xmodmap .Xmodmap

MappingNotify event, serial 34, синтетичний NO, вікно 0x0,
    запит MappingKeyboard, first_keycode 204, count 1

MappingNotify event, serial 34, синтетичний NO, вікно 0x0,
    запит MappingKeyboard, first_keycode 64, count 1

MappingNotify event, serial 34, синтетичний NO, вікно 0x0,
    запит MappingKeyboard, first_keycode 108, count 1

MappingNotify event, serial 34, синтетичний NO, вікно 0x0,
    запит MappingKeyboard, first_keycode 206, count 1

MappingNotify event, serial 34, синтетичний NO, вікно 0x0,
    запит MappingKeyboard, first_keycode 133, count 1

MappingNotify event, serial 34, синтетичний NO, вікно 0x0,
    запит MappingKeyboard, first_keycode 134, count 1

І ось помилка, яку повертає xmodmap:

X Помилка невдалого запиту: BadValue (цілий параметр поза діапазоном для роботи)
Основний опкод невдалого запиту: 118 (X_SetModifierMapping)
Значення в невдалому запиті: 0x17
Серійний номер невдалого запиту: 17
Поточний серійний номер у вихідному потоці: 17

якісь пропозиції щодо того, як я можу це вирішити?


На якій операційній системі та версії? Який тип клавіатури (PC / Mac / Sun / ...)? Спробуйте запустити xevв терміналі, а потім xmodmapв іншому терміналі. Ви повинні побачити деякі MappingNotifyстрофи xev, додати їх до свого питання. Крім того, у xevвікні натисніть на різні клавіші, які використовуються, і скажіть, якому коду клавіш і ключів вони відповідають (частина «keycode 37 (keysym 0xffe3, Control_L)» у виводі xev).
Жил 'ТАК - перестань бути злим'

Відповіді:


6

Про це вже повідомлялося про помилку Debian # 564327 , помилку Debian # 565279 , помилку Ubuntu # 524774 та помилку FreeDesktop 20145 . До дискусії про помилки FreeDesktop додається виправлення джерела. Є кілька пропозицій тимчасового рішення про помилку обговоренні Ubuntu, зокрема , в .Xmodmapобхідному шляху .


7

Дивлячись на вирішення проблеми, пов’язаного Джайлсом, це для мене спрацювало:

clear Mod1
clear Mod4

keycode 204 = NoSymbol NoSymbol NoSymbol NoSymbol
keycode 206 = NoSymbol NoSymbol NoSymbol NoSymbol

keycode 64 = Control_L Control_L Control_L Control_L
keycode 133 = Alt_L Alt_L Alt_L Alt_L
keycode 134 = Alt_R Alt_R Alt_R Alt_R
keycode 108 = Control_R Control_R Control_R Control_R

add Control = Control_L Control_R
add Mod1 = Alt_L Alt_R

Тепер мої клавіші Option функціонують як клавіші управління, а мої клавіші Windows, як клавіші Alt.


3

Проблема виникає при спробі додати ключ-ключ до модифікатора, який уже доданий до іншого ключа модифікатора. Важливо знати, що якщо ви додасте keyym до модифікатора, всі інші клавіші, які супроводжують keyym на випадок, також додаються до цього модифікатора.

Наприклад:

clear mod5
add mod5    = ISO_Level3_Shift Mode_switch

може призвести до

mod5        backslash (0x33),  Caps_Lock (0x42),  ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

тому що у вас є щось подібне

keycode  66 = Caps_Lock NoSymbol ISO_Level3_Shift

у вашій ~ / .Xmodmap (Перегляд поточного коду ключа для відображення на клавіші через xmodmap -pke)

що призведе до помилки BadValue, коли ви також намагаєтесь зробити щось подібне

add lock    = Caps_Lock

тому що Caps_Lock вже доданий до модифікатора mod5.


2

Це ще одне рішення вашої проблеми, хоча воно насправді не відповідає на ваше запитання. Відредагуйте xorg.conf, вставивши в розділ "InputDevice":

 Option "XkbOptions" "ctrl:swapcaps"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.