Dlaczego moje wiązania xmodmap obejmujące AltGr działają tylko na niektórych kluczach?


12

Chcę zmienić mapowanie AltGR + Right_Windows, ale nie wiem, jak to zrobić. Bez względu na to, co spróbuję, naciśnięcie prawego klawisza Windows powoduje wyświetlenie klawisza nazwy po naciśnięciu prawego klawisza Alt lub nie.

Oto zawartość testowanego przeze mnie pliku xmodmap. Na mojej klawiaturze 38 to kod „a”, 48 to kod dla aportrophe / doublequote, a 134 to kod dla prawego klawisza 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

Kiedy naciskam Right_Alt + apostrof, wyświetla 5, ale Right_Alt + a i Right_Alt + Right_Windows dają 1 (zarówno gdy wciśnięty jest prawy Alt, jak i kiedy nie jest), co nie jest tym, czego chciałem.

Mój obecny układ klawiatury jest us(alt-intl)i prawy alt jest najwyraźniej skonfigurowany do działania jako AltGr / Iso_Level3_Shift. Dane wyjściowe xmodmap -pmsą następujące:

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)

Nie mam pojęcia, co się właściwie dzieje, ale jeśli jeszcze tego nie zrobiłeś, możesz uruchomić xevi nacisnąć różne kombinacje klawiszy, aby sprawdzić, czy sprzęt i do poziomu Xwindows zaczynają się wyróżniać.
Joe

Mam ten sam problem. Chciałem zmodyfikować przecinek i kropkę, aby obsługiwały także drukowanie czeskich i angielskich podwójnych cudzysłowów („/„ / ”), które w przeciwnym razie muszę pisać, używając klawisza Compose. Używam us(cz_sk_de)układu klawiatury i xmodmap.
Pavel Šimerda,

Co teraz? Nie jest praktyczne marnowanie kolejnej nagrody ani rozpoczęcie nowego pytania, kiedy to całkiem dobrze opisuje problem. Wygląda na błąd w Xorg, ale nie znalazłem żadnych referencji. Istniejąca odpowiedź jest wyraźnie błędna, mimo że została automatycznie przyznana.
Pavel Šimerda

Skończyłem się poddawać i używać różnych skrótów klawiszowych, które znam: / Zgadzam się, że to wygląda na błąd, ale nie wiem z jakim systemem jest związany i gdzie go zgłosić ...
hugomg

Odpowiedzi:


7

Używanie xmodmap do konfigurowania indywidualnych mapowań kluczy

Czas zapisać wyniki własnych badań.

Pomyślałem, że musiałem coś przeoczyć w Xmodmap i że jest to po prostu niezbyt dobrze udokumentowane i ludzie są zdezorientowani. Okazało się jednak, że projekt X.Org dotyczący XKB i xmodmap jest po prostu głupi.

Epicka porażka: xmodmap

Możesz użyć xmodmap do przedefiniowania istniejących mapowań, o ile mapowania faktycznie istnieją w oryginalnym układzie klawiatury. W przypadku opisanym w pytaniu nie można rozszerzyć działania żadnego klucza na AltGr. Możesz zmieniać tylko klawisze AltGr dla kodów, które już używają AltGr.

Zobacz także: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

Obejście: Przełącznik trybu

To obejście jest opisane w odpowiedzi przez @ Ned64. Możesz zmienić przypisanie AltGrod ISO_Level3_Shiftdo Mode_switch.

Z powodzeniem użyłem następującego wiersza polecenia do mapowania AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

Wadą jest to, że xmodmapzepsuje twój obecny układ klawiatury, ale możesz odtworzyć wszystkie mapowania jeden po drugim, używając już wspomnianego @ Ned64.

Obejście: Zmodyfikowany układ klawiatury

Używam us(cz_sk_de)jako układu klawiatury i próbowałem go zmodyfikować, dodając konfigurację klawiszy, które chciałem rozszerzyć.

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

(W przekroju xkb_symbols "cz_sk_de"z /usr/share/X11/xkb/symbols/us)

Wystarczy zresetować układ klawiatury, aby użyć zmodyfikowanej wersji.

setxkbmap 'us(cz_sk_de)'

Teraz możesz (1) typ czeskim i angielskim cudzysłowy i elipsy za pomocą kombinacji ,, ., Shiftoraz AltGrklucze i / lub (2) przemapować te klucze używając xmodmapteraz, że są one zdefiniowane.

Główną wadą jest to, że setxkbmapwydaje się, że nie obsługuje dowolnych lokalizacji dla układów klawiatury i dlatego musisz pisać w konfiguracji systemu zamiast w katalogu domowym.

Wniosek

Wydaje się, że jest to przykład nadinżynieryjnej i złej konstrukcji X.Org, w której nawet tak banalna sprawa jak mapowanie kodu klucza i kombinacja modyfikatorów w symbol okazuje się być problemem. Narzędzia wydają się nie zapewniać rozsądnego sposobu zmiany indywidualnych mapowań kluczy w konfiguracji użytkownika bez żadnych skutków ubocznych.


„nie można przedłużyć działania żadnych klawiszy, aby korzystać z AltGr” - wygląda na to, że to był cały problem! Dzięki.
hugomg

5

Krok pierwszy: Spraw, aby AltGr był użyteczny

Dowiedziałem się, że klawisze zmodyfikowane AltGr działają tylko w moim systemie, jeśli ponownie mapuję klawisz AltGr na Mode_switch:

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

Jeśli masz inną klawiaturę, może być konieczne zastąpienie jej 108kodem, sprawdź, wpisując

xmodmap -pke | grep Alt_R

następnie użyj tego numeru. (Klucz zwykle wywoływany jest Alt_Rw systemach, które znam.)

Alternatywnie może to również działać, jeśli Alt_R nie jest jeszcze przypisany do czegoś innego:

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

Twój modyfikator AltGr będzie teraz obsługiwał pozycję 3 (z Shift: 4) na liście modyfikatorów.

Krok drugi: Przypisz klucze zgodnie z wymaganiami

Możesz przypisać warianty AltGr do dowolnego klawisza klawiatury, który chcesz. Jeśli masz inne klucze, które nie odpowiadają teraz żądanemu kodowi, musisz je ponownie przypisać, tak jak inne klucze (te, które testowałeś).

Krok trzeci: Przekształć to w skrypt

Teraz po prostu weź swoje xmodmappolecenia i napisz wszystkie (ale tylko) modyfikacje domyślnej klawiatury do pliku - to jest szybsze niż ładowanie pełnej mapy klawiszy. Uruchom ten skrypt raz po każdym logowaniu i za każdym razem, gdy mapa klawiszy zostanie zresetowana przez jakiś proces.

Przez wiele lat eksperymentowałem z tym w systemach Solaris, IRIX i Linux i, o ile wiem, jest to jedyne rozwiązanie, dzięki któremu AltGr działa - i działa dobrze dla mnie od ponad 20 lat.


1
Dzięki temu prawy klawisz okna zaczął działać jako „3” zamiast „1”. Jednak teraz wszystkie istniejące modyfikatory AltGr przestał działać (Chyba byłoby to potrzebne, aby być „5” zamiast „3” dla nich do pracy?)
hugomg

Dzięki za próbę tego. Proszę pisać xmodmap -pmi xmodmap -pke | grep -w SOMECHANGEDKEYw tej sytuacji, za pomocą klucza, który już nie działa.
Ned64,

(wtedy będziemy musieli dodać nowy modyfikator używając xmodmapzgodnie z twoimi danymi wyjściowymi)
Ned64

xmodmap -pke | grep Alt_Rnie zwraca żadnych wyników w moim systemie. Mój system to Lenovo ThinkPad X230 ze stabilną wersją Gentoo. Próbowałem też grep -ibezskutecznie.
Pavel Šimerda,

Próbowałem i problem polega na tym, że litery akcentowane us(cz_sk_de)przestały działać dla mnie. Dlatego ta odpowiedź nie działa dla mnie i nie będzie działać dla wielu innych.
Pavel Šimerda,

1

Najwyraźniej xmodmap nie odczytuje domyślnego AltGR tak, jak powinien, może być ograniczony do określonych układów klawiatury, być może wszystkie układy są poza USA, tak czy inaczej, prawdziwym problemem jest to, że możesz zastąpić układ klawiatury, niektóre osoby mogą tak naprawdę nie chcą tego robić, ponieważ muszą używać znaków specjalnych w układzie, do którego są przyzwyczajeni (jak skandynawskie układy klawiatury, które mają znaki takie jak ðþæöáúíóóåů itd.), co byłoby utrudnieniem w konfiguracji dla innych układów klawiatury.

Możesz biegać

xmodmap -e "keycode 108 = Mode_switch"

Aby ponownie powiązać AltGR z czymś, z czym może współpracować xmodmap, i rzeczywiście, po naciśnięciu AltGR zostanie wyświetlone trzecie przypisanie klucza, jednak całkowicie zepsuje oryginalny układ klawiatury, ponieważ żadne skróty klawiszowe AltGR nie będą działać z klawiszem AltGR.

Znalazłem dwa obejścia, które nie psują mojego istniejącego układu klawiatury i nie wymagają przełączania układów , jednym z nich jest powiązanie przełącznika trybu z innym klawiszem.

Idealnym kluczem do tego jest Super_R, który znajduje się tuż obok AltGR, jego kod to 134. Jednak nie wszystkie klawiatury je mają, aw moim przypadku na laptopie też ich nie mam, więc postanowiłem powiązać go z ostatnim pozostały klucz, którego praktycznie nigdy nie używam, Right Control.

xmodmap -e "keycode 105 = Mode_switch"

Mam amerykański układ klawiatury fizycznej, ale europejską konfigurację układu i brakuje klawisza mniej / większy / pasek (znany również jako ISO_Backslash, chociaż nie jest to rozpoznawane przez samą xmodmap), zwykle obok Z na takich klawiaturach. Związałem to z Menu (135), ale mogłoby to służyć jako alternatywa dla R_Ctrl i Super_R

To chyba brudna poprawka.

Drugie obejście tego problemu zajęło nieco więcej czasu. Korzystanie z sxhkd (alternatywa xbindkeys)

Jeśli dodasz to do ~ / .config / sxhkd / sxhkdrc :

~ISO_Level3_Shift
    xdotool key Mode_switch

Twój AltGR będzie działał normalnie, ale po jego naciśnięciu przełącza się Mode_switch (trochę jak Caps Lock, ale dla Mode_switch), a wszelkie klawisze xmodmap, które go używają, zostaną zablokowane w trybie AltGR, dopóki nie naciśniesz AltGR ponownie, aby go wyłączyć. Stworzenie skryptu do automatycznego wyłączania go po zwolnieniu klucza powinno być prostą sprawą, ale moje próby zrobienia tego były dość mylące, delikatnie mówiąc.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.