Warum funktionieren meine xmodmap-Bindungen mit AltGr nur für einige Schlüssel?

12

Ich möchte mein AltGR + Right_Windows neu zuordnen, kann aber nicht herausfinden, wie. Egal was ich versuche, das Drücken der rechten Windows-Taste gibt den Namen Keysym aus, wenn die rechte Alt-Taste gedrückt wird oder nicht.

Dies ist der Inhalt der xmodmap-Datei, die ich gerade teste. In meiner Tastatur ist 38 der Schlüsselcode für "a", 48 der Schlüsselcode für aportrophe / doublequote und 134 der Schlüsselcode für die rechte Windows-Taste.

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

Wenn ich Right_Alt + Apostroph drücke, werden 5 ausgegeben, aber Right_Alt + a und Right_Alt + Right_Windows geben 1 (sowohl wenn die rechte Alt-Taste gedrückt wird als auch wenn nicht), was nicht das ist, was ich wollte.

Mein aktuelles Tastaturlayout ist us(alt-intl)und das richtige Alt ist anscheinend so eingerichtet, dass es als AltGr / Iso_Level3_Shift fungiert. Die Ausgabe von xmodmap -pmist die folgende:

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)
Hugomg
quelle
Keine Ahnung, was genau los ist, aber wenn Sie dies noch nicht getan haben, möchten Sie möglicherweise xevdie verschiedenen Tastenkombinationen ausführen und drücken, um zu sehen, ob die Hardware und bis zur Xwindows-Ebene zunächst unterscheidbare Tastendrücke erhalten.
Joe
Ich habe das gleiche Problem. Ich wollte Komma und Punkt ändern, um auch das Drucken von tschechischen und englischen doppelten Anführungszeichen („/“ / ”) zu unterstützen, die ich ansonsten mit dem Compose-Schlüssel schreiben muss. Ich verwende us(cz_sk_de)Tastaturlayout und xmodmap.
Pavel Šimerda
So was nun? Es ist nicht praktisch, ein weiteres Kopfgeld zu verschwenden oder eine neue Frage zu stellen, wenn diese das Problem ziemlich gut beschreibt. Es sieht aus wie ein Fehler in xorg, aber ich habe keine Referenzen gefunden. Die vorhandene Antwort ist eindeutig falsch, obwohl sie automatisch vergeben wird.
Pavel Šimerda
Ich habe aufgegeben und verschiedene Tastenkombinationen verwendet, von denen ich weiß, dass sie funktionieren: / Ich stimme zu, dass dies wie ein Fehler aussieht, aber ich weiß nicht, mit welchem ​​System es zusammenhängt und wo ich es melden soll ...
hugomg
Ich habe hier einige Informationen gefunden ... blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html
Pavel Šimerda

Antworten:

7

Verwenden von xmodmap zum Konfigurieren einzelner Schlüsselzuordnungen

Es ist Zeit, Ergebnisse meiner eigenen Forschung aufzuschreiben.

Ich dachte, dass ich etwas in xmodmap verpasst haben muss und dass es einfach nicht sehr gut dokumentiert ist und die Leute verwirrt sind. Es stellte sich jedoch heraus, dass das X.Org-Design in Bezug auf XKB und xmodmap einfach nur dumm ist.

Epischer Fehler: xmodmap

Mit xmodmap können Sie vorhandene Zuordnungen neu definieren, solange diese Zuordnungen tatsächlich in Ihrem ursprünglichen Tastaturlayout vorhanden sind. In dem in der Frage beschriebenen Fall können Sie das Verhalten von Schlüsseln nicht erweitern, um AltGr zu verwenden. Sie können die AltGr-Schlüsselsymbole nur für Schlüsselcodes ändern, die bereits AltGr verwenden.

Siehe auch: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

Problemumgehung: Mode_switch

Diese Problemumgehung wird in der Antwort von @ Ned64 beschrieben. Sie können AltGrvon ISO_Level3_Shiftzu neu zuordnen Mode_switch.

Ich habe die folgende Befehlszeile erfolgreich zum Neuzuordnen verwendet AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

Der Nachteil ist, dass dadurch Ihr aktuelles Tastaturlayout xmodmapbeschädigt wird. Sie können jedoch alle Zuordnungen nacheinander neu erstellen, indem Sie wie bereits erwähnt @ Ned64 verwenden.

Problemumgehung: Geändertes Tastaturlayout

Ich verwende es us(cz_sk_de)als Tastaturlayout und habe versucht, es zu ändern, indem ich die Konfiguration für die Tasten hinzufügte, die ich erweitern wollte.

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

(Im Abschnitt xkb_symbols "cz_sk_de"von /usr/share/X11/xkb/symbols/us)

Setzen Sie einfach das Tastaturlayout zurück, um die geänderte Version zu verwenden.

setxkbmap 'us(cz_sk_de)'

Jetzt können Sie (1) Typ tschechischen und englischen Anführungszeichen und Ellipsen Kombinationen mit ,, ., Shiftund AltGrTasten und / oder (2) neu zuordnen diese Schlüssel verwenden xmodmapjetzt , dass sie definiert sind.

Der Hauptnachteil besteht darin, dass setxkbmapscheinbar keine beliebigen Speicherorte für Tastaturlayouts unterstützt werden. Daher müssen Sie anstelle Ihres Home-Verzeichnisses in die Systemkonfiguration schreiben.

Fazit

Dies scheint ein Beispiel für ein überentwickeltes und schlechtes Design von X.Org zu sein, bei dem sich selbst eine triviale Sache wie das Zuordnen eines Schlüsselcodes und einer Kombination von Modifikatoren zu einem Symbol als Problem herausstellt. Die Tools scheinen keine vernünftige Möglichkeit zu bieten, einzelne Tastenzuordnungen in der Benutzerkonfiguration ohne Nebenwirkungen zu ändern.

Pavel Šimerda
quelle
"Sie können das Verhalten von Schlüsseln nicht erweitern, um AltGr zu verwenden" - anscheinend war dies die ganze Zeit das Problem! Vielen Dank.
Hugomg
5

Schritt eins: Machen Sie AltGr nutzbar

Ich habe herausgefunden, dass AltGr-modifizierte Schlüssel auf meinem System nur funktionieren, wenn ich auch den AltGr-Schlüssel Mode_switchwie folgt neu zuordne :

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

Wenn Sie eine andere Tastatur haben, müssen Sie diese möglicherweise durch 108Ihren Code ersetzen. Überprüfen Sie dies durch Eingabe

xmodmap -pke | grep Alt_R

dann benutze diese Nummer. (Der Schlüssel wird normalerweise Alt_Rauf Systemen aufgerufen , die ich kenne.)

Alternativ kann dies auch funktionieren, wenn Alt_R noch keinem anderen Element zugewiesen ist:

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

Ihr AltGr-Modifikator belegt jetzt Position 3 (mit Umschalttaste: 4) in Ihrer Modifikatorliste.

Schritt zwei: Weisen Sie die Schlüssel nach Bedarf zu

Sie können jeder gewünschten Taste Ihrer Tastatur AltGr-Varianten zuweisen. Wenn Sie andere Schlüssel haben, die jetzt nicht dem gewünschten Code entsprechen, müssen Sie diese genau wie Ihre anderen Schlüssel (die von Ihnen getesteten) neu zuweisen.

Schritt drei: Konvertieren Sie dies in ein Skript

Nehmen Sie jetzt einfach Ihre xmodmapBefehle und schreiben Sie alle (aber nur) Änderungen an Ihrer Standardtastatur in eine Datei - das ist schneller als das Laden einer vollständigen Keymap. Starten Sie dieses Skript einmal nach jeder Anmeldung und immer dann, wenn die Keymap durch einen Prozess zurückgesetzt wird.

Ich habe im Laufe der Jahre unter Solaris, IRIX und Linux viel damit experimentiert, und meines Wissens ist dies die einzige Lösung, um AltGr zum Laufen zu bringen - und es funktioniert seit mehr als 20 Jahren gut für mich.

Ned64
quelle
1
Damit wurde die rechte Fenstertaste als "3" anstelle von "1" angezeigt. Jetzt funktionierten jedoch alle vorhandenen Altgr-Modifikatoren nicht mehr (ich denke, es hätte eine "5" anstelle einer "3" sein müssen, damit sie funktionieren?)
Hugomg
Danke, dass du es versucht hast. Bitte posten Sie xmodmap -pmund xmodmap -pke | grep -w SOMECHANGEDKEYin dieser Situation für einen Schlüssel, der nicht mehr funktioniert.
Ned64
(Dann müssen wir den neuen Modifikator xmodmapentsprechend Ihrer Ausgabe hinzufügen )
Ned64
xmodmap -pke | grep Alt_Rgibt auf meinem System keine Ergebnisse zurück. Mein System ist Lenovo ThinkPad X230 mit Gentoo stabil. Ich habe es auch grep -iohne Erfolg versucht .
Pavel Šimerda
Ich habe es versucht und das Problem ist, dass akzentuierte Briefe von us(cz_sk_de)für mich nicht mehr funktionieren. Daher funktioniert diese Antwort bei mir nicht und wird bei vielen anderen nicht funktionieren.
Pavel Šimerda
1

Anscheinend liest xmodmap das Standard-AltGR nicht so, wie es sollte. Möglicherweise ist es auf bestimmte Tastaturlayouts beschränkt. Möglicherweise handelt es sich nur um Layouts außerhalb der USA. In beiden Fällen besteht das eigentliche Problem darin, dass Sie Ihr Tastaturlayout ersetzen können Ich möchte das nicht wirklich tun, da sie spezielle Zeichen für das Layout verwenden müssen, an das sie gewöhnt sind (wie skandinavische Tastaturlayouts mit Zeichen wie ðþæöáúíóåů usw.), deren Konfiguration für andere Tastaturlayouts schwierig wäre.

Du kannst rennen

xmodmap -e "keycode 108 = Mode_switch"

Um AltGR wieder an etwas zu binden, mit dem xmodmap arbeiten kann, wird die dritte Zuweisung eines Tastenfelds ausgegeben, wenn Sie jetzt AltGR drücken. Das ursprüngliche Tastaturlayout wird jedoch vollständig beschädigt, da mit der AltGR-Taste keine AltGR-Tastenkombinationen mehr funktionieren.

Ich habe zwei Problemumgehungen gefunden, die mein vorhandenes Tastaturlayout nicht beschädigen und das Wechseln von Layouts nicht beinhalten . Eine besteht darin, Mode_switch an eine andere Taste zu binden.

Der ideale Schlüssel dafür ist Super_R, direkt neben AltGR, der Schlüsselcode dafür ist 134. Allerdings haben nicht alle Tastaturen diese und in meinem Fall auf einem Laptop habe ich sie auch nicht, also habe ich beschlossen, sie an die letzte zu binden verbleibender Schlüssel, den ich praktisch nie benutze, Right Control.

xmodmap -e "keycode 105 = Mode_switch"

Ich habe ein amerikanisches physisches Tastaturlayout, aber die europäische Layoutkonfiguration und die Taste weniger / größer / Balken (auch als ISO_Backslash bekannt, obwohl dies von xmodmap selbst nicht erkannt wird) fehlen normalerweise neben Z auf solchen Tastaturen. Ich habe das an Menu (135) gebunden, aber es könnte als Alternative zu R_Ctrl und Super_R dienen

Dies ist eine schmutzige Lösung, nehme ich an.

Die zweite Problemumgehung dauerte etwas länger. Verwenden von sxhkd (Alternative zu xbindkeys)

Wenn Sie dies zu ~ / .config / sxhkd / sxhkdrc hinzufügen :

~ISO_Level3_Shift
    xdotool key Mode_switch

Ihr AltGR funktioniert wie gewohnt, aber wenn es gedrückt wird, wird Mode_switch umgeschaltet (ähnlich wie Feststelltaste, aber für Mode_switch) und alle xmodmap-Tasten, die es verwenden, werden im AltGR-Modus gesperrt, bis Sie AltGR erneut drücken, um es zu deaktivieren. Es sollte eine einfache Sache sein, ein Skript zu erstellen, um es automatisch zu deaktivieren, wenn der Schlüssel losgelassen wird, aber meine Versuche, dies zu tun, waren, gelinde gesagt, ziemlich fehlerhaft.

Cestarian
quelle