Чому мої прив'язки xmodmap за участю AltGr працюють лише на деяких клавішах?


12

Я хочу переробити AltGR + Right_Windows, але не можу зрозуміти, як це зробити. Незалежно від того, що я намагаюся, натискання правої клавіші Windows видає ім'я клавіші, якщо натиснути правий альт чи ні.

Це вміст файлу xmodmap, який я зараз тестую. У моїй клавіатурі 38 - це код клавіші для "a", 48 - код для aportrophe / doublequote, а 134 - код клавіші для правої клавіші Windows.

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

Коли я натискаю Right_Alt + апостроф, він виводить 5, але Right_Alt + a і Right_Alt + Right_Windows дають 1 (як при натисканні правої клавіші Alt, так і тоді, коли її немає), що не є тим, що я хотів.

Моя поточна розкладка клавіатури є, us(alt-intl)а правий альт, мабуть, налаштований як AltGr / Iso_Level3_Shift. Результатом xmodmap -pmє наступне:

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),  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)

Поняття не має, що саме відбувається, але якщо ви цього ще не зробили, можливо, ви захочете запустити xevта натиснути різні комбінації клавіш, щоб побачити, чи не починає апаратне забезпечення та рівень Xwindows відрізняти натискання клавіш.
Джо

Я переживаю те саме питання. Я хотів змінити кому і крапку, щоб також підтримувати друк подвійних цитат чеської та англійської мов („/“ / ”), які я повинен писати, використовуючи клавішу compose в іншому випадку. Я використовую us(cz_sk_de)розкладку клавіатури та xmodmap.
Павло Шимерда

І що тепер? Не витрачатися на ще одну винагороду і не починати нове питання, коли це досить добре описує проблему. Це схоже на помилку в xorg, але я не знайшов жодних посилань. Існуюча відповідь явно неправильна, незважаючи на те, що вона автоматично присуджується.
Павло Шімерда

Я закінчила відмову і використовую різні прив'язки клавіш, які знаю, що я працюю: / Я погоджуюся, що це схоже на помилку, але я не знаю, з якою системою вона пов’язана і де її повідомити ...
hugomg

Я знайшов тут трохи інформації ... blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html
Павло Шімерда

Відповіді:


7

Використання xmodmap для налаштування окремих відображень ключів

Настав час записати результати власного дослідження.

Я думав, що, мабуть, щось пропустив у xmodmap і що це не дуже добре задокументовано, і люди плутаються. Але виявилося, що дизайн X.Org щодо XKB та xmodmap - просто дурний.

Епічний збій: xmodmap

Ви можете використовувати xmodmap для перевизначення існуючих відображень до тих пір, поки вони відображаються в оригінальній розкладці клавіатури. У випадку, описаному у запитанні, ви не можете продовжувати поведінку жодної клавіші для використання AltGr. Ви можете змінити ключі AltGr лише для клавішів, які вже використовують AltGr.

Дивіться також: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

Обхід: Mode_switch

Це вирішення описано у відповіді @ Ned64. Ви можете зробити перезавантаження AltGrз ISO_Level3_Shiftдо Mode_switch.

Наступний командний рядок я успішно використав для перезавантаження AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

Недоліком є ​​те, що він порушить ваш поточний xmodmapрозклад клавіатури, але ви зможете відтворити всі відображення по одному, використовуючи вже згадуваний @ Ned64.

Обхід: Модифікована розкладка клавіатури

Я використовую us(cz_sk_de)як макет клавіатури, і я спробував змінити її, додавши конфігурацію для клавіш, які я хотів розширити.

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(У розділі xkb_symbols "cz_sk_de"про /usr/share/X11/xkb/symbols/us)

Просто скиньте розкладку клавіатури, щоб використовувати модифіковану версію.

setxkbmap 'us(cz_sk_de)'

Тепер ви можете (1) типу чеські та англійські лапки і три крапки з використанням комбінацій ,, ., Shiftі AltGrключі і / або (2) перепризначити ці ключі , використовуючи xmodmapтепер, коли вони визначені.

Основний недолік полягає в тому, що setxkbmap, здається, не підтримуються довільні місця розташування клавіатури, і тому вам потрібно записатись у конфігурацію системи замість домашнього каталогу.

Висновок

Це, мабуть, є прикладом переосмисленого та поганого дизайну X.Org, де навіть така тривіальна річ, як відображення ключового коду та комбінація модифікаторів у символ, виявляється проблемою. Здається, інструменти не забезпечують розумного способу просто змінити окремі відображення ключів у конфігурації користувача без побічних ефектів.


"Ви не можете продовжувати поведінку жодних клавіш для використання AltGr" - схоже, ця проблема була протягом усього часу! Спасибі.
хугомг

5

Крок перший: Зробіть AltGr корисним

Я дізнався, що модифіковані AltGr ключі працюють лише в моїй системі, якщо я також перезавантажую AltGr-ключ Mode_switch, як це:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

Якщо у вас інша клавіатура, можливо, вам доведеться замінити 108свій код, перевірте, ввівши

xmodmap -pke | grep Alt_R

потім використовуйте це число. (Ключ зазвичай викликається Alt_Rв системах, яких я знаю.)

Крім того, це може також працювати, якщо Alt_R ще не призначений для чогось іншого:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

Ваш модифікатор AltGr тепер буде займати позицію 3 (із Shift: 4) у вашому списку модифікаторів.

Крок другий: Призначте ключі за потребою

Ви можете призначити AltGr-варіанти будь-якій клавіші клавіатури, яку ви бажаєте. Якщо у вас є інші ключі, які зараз не відповідають бажаному коду, вам потрібно перепризначити їх так само, як і інші ваші ключі (ті, які ви протестували).

Крок третій: Перетворіть це в сценарій

Тепер просто візьміть ваші xmodmapкоманди і запишіть усі (але тільки) модифікації на клавіатурі за замовчуванням у файл - це швидше, ніж завантаження цілої карти клавіш. Запускайте цей скрипт один раз після кожного входу та кожного разу, коли ключова карта буде скинута деяким процесом.

Я багато років експериментував з цим впродовж багатьох років у Solaris, IRIX та Linux, і наскільки мені відомо, це єдине рішення для роботи AltGr - і це працює добре для мене більше 20 років.


1
За допомогою цього клавіша правого вікна почала діяти як "3" замість "1". Однак тепер усі існуючі модифікатори altgr перестали працювати (я думаю, для роботи для цього знадобилося б "5" замість "3"?)
hugomg

Дякуємо, що спробували це. Будь ласка, напишіть xmodmap -pmі xmodmap -pke | grep -w SOMECHANGEDKEYв цій ситуації для ключа, який більше не працює.
Ned64

(тоді нам потрібно буде додати новий модифікатор, використовуючи xmodmapвідповідно до результатів)
Ned64,

xmodmap -pke | grep Alt_Rне повертає жодних результатів у моїй системі. Моя система Lenovo ThinkPad X230 зі стійкою Gentoo. Я також намагався grep -iбезрезультатно.
Павло Шимерда

Я спробував це, і проблема полягає в тому, що наголошені листи us(cz_sk_de)перестали працювати на мене. Тому ця відповідь не працює для мене і не працюватиме для багатьох інших.
Павло Шімерда

1

Мабуть, xmodmap не читає AltGR за замовчуванням як слід, він може бути обмежений певними розкладками клавіатури, можливо, це все, не макети США, в будь-якому випадку, справжня проблема - це капелюх, хоча ви можете замінити розкладку клавіатури, деякі люди можуть насправді не хочуть цього робити, оскільки їм потрібно використовувати спеціальні символи у макеті, до якого вони звикли (як скандинавські розкладки клавіатури, які мають такі символи, як ðþæöáúíóåů тощо), що буде неприємно налаштувати для інших розкладки клавіатури.

Можна бігати

xmodmap -e "keycode 108 = Mode_switch"

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

Я знайшов два обхідних шляхи, які не порушують існуючого розташування клавіатури і не передбачають перемикання макетів , один - прив’язати Mode_switch до іншої клавіші.

Ідеальний ключ для цього - Super_R, який знаходиться поруч з AltGR, кодовий код для нього - 134. Однак, не всі клавіатури мають їх, і в моєму випадку на ноутбуці у мене його також немає, тому я вирішив прив’язати його до останнього Залишився ключ, яким я практично ніколи не користуюся, Right Control.

xmodmap -e "keycode 105 = Mode_switch"

У мене американська фізична розкладка клавіатури, але європейська конфігурація макета, а менша / більша / смужка клавіш (також відома як ISO_Backslash, хоча це не розпізнається самим xmodmap) зазвичай поруч із Z на таких клавіатурах відсутня. Я прив’язав це до Меню (135), але він може слугувати альтернативою R_Ctrl та Super_R

Я думаю, це брудне виправлення.

Другий спосіб вирішення зайняв трохи більше часу. Використання sxhkd (альтернатива xbindkeys)

Якщо ви додаєте це до ~ / .config / sxhkd / sxhkdrc :

~ISO_Level3_Shift
    xdotool key Mode_switch

Ваш AltGR буде функціонувати як звичайний, але при його натисканні Mode_switch перемикається (начебто як блокування шапок, але для Mode_switch), а будь-які клавіші xmodmap, які використовують його, будуть заблоковані в режим AltGR, поки ви знову не натиснете AltGR, щоб переключити його. Сценарій повинен бути простим, щоб автоматично вмикати його, коли ключ відпускається, але, як мінімум, мої спроби були досить невмілими.

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