как назначить другой модификатор клавише Alt для X11?

Цель:

Я хотел бы назначить Alt для CapsLock-ключа и мета-ключа Alt. Но таким образом Alt-ключ больше не будет распознаваться как Alt, а ключ CapsLock больше не будет распознан как CapsLock.

openSUSE 11.4

Ранее:

openSUSE 11.1 – поскольку я являюсь единственным пользователем моего компьютера, я «просто» редактировал файл / usr / share / X11 / xkb / keycodes / xfree86, и он работал без проблем. Ключи были подключены к их символам на самом низком уровне.

Проблемы:

  1. ХКВ

    Я создал вариант польского макета (pl_ext), который (для теста) состоит из таких записей:

    key <CAPS> { [ Alt_L ] }; modifier_map Mod1 { Alt_L, Alt_R }; 

    Однако это ничего не значит, ключ CapsLock в xev распознается (символ) как Alt_L, но когда я нажимаю клавишу CapsLock, он ведет себя как CapsLock (например, если вы используете файл в меню, Alt + F должен открыть это меню, это не ).

    Вопрос. Как определить файл макета для установки CapsLock-ключа как Alt и Alt-key как Meta?

    Изменить: Половина успеха здесь! Теперь у меня есть такие записи:

     key <CAPS> { [ Alt_L ] }; modifier_map Mod1 { <CAPS> }; // this is a difference 

    и это работает по желанию. Это не означает:

     key <LALT> { [ Meta_L ] } ; key <RALT> { [ Meta_R ] } ; modifier_map Mod5 { <LALT>,<RALT> }; 

    Alt-ключи распознаются как мета с помощью xev, но я все еще могу открыть меню с помощью Alt + F, окна переключения, и я не должен. И, с другой стороны, я не могу ввести какой-либо национальный характер, и я должен.

  2. xfree86

    Но теперь это не сработает, я думаю, что вместо xfree86 считывается другая таблица файлов.

    Вопрос: Как узнать, какой файл таблицы ключей используется системой (X / Gnome)?

    Изменить: лучший вариант для меня – редактирование таблиц кодов клавиш – был решен ответом macias !

  3. Xmodmap

    Половина успеха здесь. Эта часть работает по желанию:

    удалить Lock = Caps_Lock keysym Caps_Lock = Alt_L

    Теперь у меня есть trully CapsLock-ключ, который сопоставляется с Alt. Но это:

    keysym Alt_L = Meta_L

    … странно. xev показывает, что Alt-ключ сопоставлен с Meta, но когда я нажимаю Alt + F (это должно отображаться на Meta + F -> ничего не делать), открывается меню File. Более того, когда я нажимаю Alt + Tab, я получаю оконный переключатель (я не должен – Alt – Meta сейчас).

    Вопрос: Как «удалить» старое поведение для Alt-ключа?

    Редактировать: эта часть решена путем ответа Жиля .

Резюме:

Ответ на любой вопрос (надеюсь) решит мою проблему, однако я предпочитаю использовать xkb целиком, потому что я мог бы затем упаковать все файлы для xkb и сменить макет в одном месте. Спасибо заранее за любую помощь!

(Этот ответ касается только xmodmap. Я уверен, что это можно сделать с XKB, я просто не знаю, как это сделать.)

Модификаторы и keysyms назначаются независимо. Но вы получаете странные эффекты, если вы не ставите их последовательно. Я думаю, что вам не хватает команды add для назначения модификатора Meta_L , хотя вам также может понадобиться очистить и переназначить ключи модификатора. Вы можете заменить Mod1 и Mod2 Mod3 , Mod4 и Mod5 : они взаимозаменяемы, просто убедитесь, что вы не используете их для двух разных целей.

 clear Mod1 clear Mod2 remove Lock = Caps_Lock keysym Caps_Lock = Alt_L keysym Alt_L = Meta_L add Mod1 = Alt_L Alt_R add Mod2 = Meta_L Meta_R 

Редактирование подходов кодов клавиш

Я нашел ответ на польском форуме Ubuntu. Теперь никто не редактирует файл «xfree86», а файл «evdev». Таким образом, вы можете делать постоянные изменения, которые работают для всех макетов.

Пример (по запросу Gilles) – войдите в систему с правами root, перейдите к

 /usr/share/X11/xkb/keycodes 

сделайте резервную копию файла «evdev», а затем отредактируйте его. Измените коды по своему вкусу, например, в моем случае:

 <LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt <LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code) 

Вы можете найти коды, выполнив команду «xev», но вы можете просто посмотреть исходный файл «evdev».

Выйдите из системы, войдите в систему, наслаждайтесь новой клавиатурой :-).

попробуй это:

  key <CAPS> { [ Alt_L, Alt_L ] }; key <LALT> { [ Meta_L, Meta_L ] }; modifier_map Mod1 { Alt_L, Alt_R }; modifier_map Mod5 { Meta_L, Meta_R }; 

обратите внимание на два определения уровня. Это связано с тем, что значением по умолчанию для LALT является [Alt_L, Meta_L]; если вы не переопределите второй, он останется Meta_L.

Посмотрите на этот ответ на xkb, чтобы переопределить некоторые ключи без необходимости редактировать основные файлы по умолчанию (таким образом, не нужно быть root). В этом случае в файле локальных символов вам понадобится небольшой раздел:

 partial modifier_keys xkb_symbols "capsasalt_altasmeta" { replace key <CAPS> { [ Alt_L, Alt_L ] }; replace key <LALT> { [ Meta_L, Meta_L ] }; modifier_map Mod1 { Alt_L, Alt_R }; modifier_map Mod5 { Meta_L, Meta_R }; };