CapsLock als Modifikatorschlüssel für Anwendungs-Keymaps


11

Ich bin Entwickler und verwende derzeit Ubuntu Linux mit PyCharm IDE für die Entwicklung der Website. Um die Schreibleistung zu verbessern, sollte CapsLock in Hyper_L geändert und mit xmodmap mod3 zugewiesen werden. Danach möchte ich mod3 für 'i' Schlüssel 'Up' zuordnen. Bisher habe ich Folgendes getan:

xmodmap -e "keysym Caps_Lock = Hyper_L"

Ausgabe ist wie folgt:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  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)

dann entferne ich Hyper_L von mod4

xmodmap -e "remove Mod4 = Hyper_L"

Danach habe ich versucht, Mod3 Hyper_L zuzuweisen

xmodmap -e "add Mod3 = Hyper_L"

Ich habe jedoch folgende Fehlermeldung erhalten:

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

Also, was war das Problem hier? Wie kann ich es zum Laufen bringen? Ist mein Ansatz richtig? Oder sollte ich einen anderen Ansatz verwenden, um mod3 für benutzerdefinierte Schlüssel zu verwenden?

PS Ich verwende die Microsoft Natural Ergonomic 7000-Tastatur

Antworten:


20

Es gibt eine Unmenge Antworten im Internet, die meisten davon verwirrend.

Der Schlüssel ist, dass Sie 'Schlüsselcode 66' Ihrem Hyperschlüssel zuordnen müssen, die Zuordnung dieses Schlüssels von anderen Mods {1,2,4,5} entfernen (nur falls vorhanden) und dann Mod3 setzen.

Öffnen Sie ~ / .Xmodmap und geben Sie Folgendes ein:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

Führen Sie dies aus

xmodmap ~/.Xmodmap

Wenn etwas schief geht, können Sie Ihre Tastatur zurücksetzen mit:

setxkbmap -layout us

Mögliche Ursachen für eine Explosion sind, dass Hyper_L an einem anderen Ort zugeordnet ist. Beheben Sie dies, indem Sie xmodmap ohne Argumente ausführen, um herauszufinden, was sonst noch an Hyper_L gebunden ist. Wenn Sie wissen, was Sie entfernen müssen, geben Sie in Ihrer .Xmodmap-Datei ein 'remove BINDING = Hyper_L' ein.

Die .Xmodmap-Datei wird beim Öffnen von X11-Sitzungen geladen. Diese Zuordnung sollte beim nächsten Anmelden oder Neustarten vorhanden sein.

Diese Konfiguration funktioniert für mein Ubuntu 14.04-Setup. Wenn Sie ein anderes * nix haben und dies nicht funktioniert, veröffentlichen Sie bitte hier, was Sie getan haben, um es zu umgehen, und ich werde es in die Antwort aufnehmen.


@antindexer hat es bei dir funktioniert?
Heymatthew

Ich habe eine ganze Reihe von Antworten ausprobiert, und diese hat bei mir funktioniert. Zumindest auf einer Bare-Metal-Linux-Installation. Seltsamerweise schlägt es in QEMU / KVM fehl und funktioniert nur bei abwechselndem Drücken der Feststelltaste.
Diagon

0

Ich weiß, dass diese Frage ziemlich alt ist, aber ich muss meine Lösung teilen, da (frustrierend) die Antwort von heymantthew bei mir nicht funktioniert hat. Was hat bei mir funktioniert:

setxkbmap -layout us -option lv3:caps_switch -variant intl

Dadurch wird Capslock als Mod3-Taste aktiviert, das Layout auf "us" und die Variante auf "intl" gesetzt. Wenn Sie eine interaktive Muschel wie Fisch verwenden, können Sie nach "-layout", "-option" oder "-variant" die Tabulatortaste drücken, um eine vollständige Liste möglicher Parameter zu erhalten.

Weiterer Hintergrund: Ich habe vor einem Jahr den xmodmap-Ansatz auf einem Ubuntu-Computer mit i3 Window Manager ausprobiert und von der Standard-Gnome-Umgebung gewechselt. Ich hatte das "us" xkb-Tastaturlayout geändert, insbesondere das internationale mit toten Tasten - es funktionierte einwandfrei, wenn gnome-desktop-manager verwendet wurde (es gibt eine Option, die Feststelltaste als mod3-Taste festzulegen), aber ich konnte nicht Lass es mit xmodmap funktionieren. Dies war mein Fehler: Ich dachte, dass die GDM-Benutzeroberfläche xmodmap verwendet, um die Feststelltaste auf mod3 abzubilden, aber in Wirklichkeit wurde diese X11-Option festgelegt. Nachdem ich zu Arch gewechselt war, musste ich es herausfinden.

Ich empfehle jedem, der damit herumspielen möchte, die Manpages zu localectl, xmodmap, setxkbmap zu lesen und Layouts zu testen, indem er einen Sleep- und Revert-Teil hinzufügt:

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

Das hat mir viel Zeit gespart.

Ich verstehe immer noch nicht, wie der xmodmap-Ansatz funktioniert. Hoffe das hilft jemandem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.