Wie kann man den Caps-Lock-Toggle-Effekt verhindern, ohne ihn neu zuzuordnen oder zu deaktivieren?

22

Ich habe ein X11-Programm, das die Feststelltaste greift und es verwendet. Das Problem ist, dass ich das normale Umschalten der Feststelltaste deaktivieren möchte, aber dies scheint den Schlüssel zu deaktivieren.

Was auch immer X11 für einen Feststelltastendruck erhält, muss es dennoch erhalten (kein Deaktivieren des Schlüssels oder erneutes Zuordnen zu einem anderen Schlüssel), aber ohne dass irgendetwas den Tastendruck in einen Feststelltaster umwandelt (der sich möglicherweise auf Kernelebene befindet). ).

Ich habe versucht, den Scancode zu ändern, aber dies hat nur den Schlüssel neu zugeordnet. Ich habe den Capslock-Eintrag mit xmodmapebenfalls entfernt, aber dadurch auch Caps deaktiviert.

Wie kann ich den Kernel anweisen, die Feststelltaste zu ignorieren (bezüglich ihrer regulären Funktionalität), aber die Nachricht trotzdem an X weiterzuleiten?

Nur um ein bisschen mehr Details hinzuzufügen:

Das Programm, das ich ausführen möchte, ist "enso". Wenn es keinen Schlüssel gibt, erhalte ich die Fehlermeldung "CRITICAL: root: Quasimode-Schlüssel nicht gefunden". Wenn es keinen Fehler gibt, kann ich enso mit Großbuchstaben verwenden, aber bis jetzt habe ich noch nicht herausgefunden, wie die Großbuchstabenfunktion deaktiviert werden kann, während enso noch in der Lage ist, darauf zuzugreifen.

Chris2048
quelle
Bitte geben Sie Einzelheiten zu dem an, was Sie versucht haben, dh die genauen xmodmap-Ausdrücke. Ohne Details können wir nicht sagen, ob Sie wussten, was zu tun ist und ob Sie es falsch gemacht haben oder ob Sie es richtig gemacht haben, aber der Code aus einem anderen Grund fehlgeschlagen ist. Geben Sie uns auch das Betriebssystem an, das Sie verwenden, da einige die Schlüsselcode-Verarbeitung unterhalb der X-Serverebene ausführen.
Kyle Jones
@Kyle Ich habe versucht, "remove Lock = Caps_Lock" und dann "keycode 66 =" (der CapsLock zugeordnet wurde). Ich lasse Ubuntu 12.10 auf einem 64-Bit-Computer laufen.
Chris2048
Eine andere Möglichkeit besteht darin, einen anderen Schlüssel neu zuzuordnen. setxkbmap -option ctrl:nocapsremaps an Control_L, zum Beispiel.
Chris Down
Sagen Sie, Sie wären in Ordnung, wenn wir Ihnen eine Möglichkeit geben könnten, die Feststelltaste neu zuzuordnen, um den Steuerschlüssel auszudrücken, oder ist das nicht das, wonach Sie suchen? Aus heutiger Sicht ist diese Frage etwas verwirrend. Es würde wirklich viel bewirken, wenn Sie der Frage, was Sie bisher versucht haben, Einzelheiten hinzufügen würden.
slm
Damit wir auch klar sind, gibt es in Ubuntu 12.10 eine Funktion, mit der Sie die Feststelltaste zu einer zusätzlichen Steuertaste machen können. Denken Sie daran, wenn Sie "Remapping" sagen? Hier ist ein Screenshot des Dialogs: flickr.com/photos/11708996@N00/3010939023
slm

Antworten:

28

Ich glaube, ich habe eine Technik zum Deaktivieren des Umschaltens der CapslockTaste, aber nicht zum vollständigen Deaktivieren der Taste insgesamt oder zum erneuten Zuordnen zu einer anderen Taste auf der Tastatur.

Wenn Sie den Befehl verwenden:

setxkbmap -option caps:none

Die Tastatur schaltet nicht mehr um. Ich habe dies auf meinem Laptop mit Fedora 14 bestätigt, die LED leuchtet nicht mehr und die normale CapslockFunktionalität ist weg.

Die Verwendung von xev zeigt jedoch weiterhin, dass die Taste gedrückt wird:

$ xev
...
...
KeyPress event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504852, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504971, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
    ...

Die Ereignisse, bei denen die Taste gedrückt wird, bleiben also intakt, damit andere Anwendungen sie abrufen können.

setxkbmap

Die Datei /usr/share/X11/xkb/rules/xorg.lstenthält die vollständige Liste der Optionen, die Sie angeben können setxkbmap.

Beim Durchsuchen dieser Datei nach "cap" ist mir folgende Zeile aufgefallen:

caps:none            CapsLock is disabled

Diese Datei enthält noch weitere Werte. Wenn dies nicht das ist, wonach Sie streben, könnte stattdessen einer dieser alternativen Werte verwendet werden.

$ grep cap /usr/share/X11/xkb/rules/xorg.lst
  grp:caps_switch      CapsLock (while pressed), Alt+CapsLock does the original capslock action
  grp:caps_toggle      CapsLock
  grp:shift_caps_toggle Shift+CapsLock
  grp:shift_caps_switch CapsLock (to first layout), Shift+CapsLock (to last layout)
  grp:alt_caps_toggle  Alt+CapsLock
  lv3:caps_switch      CapsLock
  lv3:caps_switch_latch CapsLock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)
  ctrl:nocaps          Make CapsLock an additional Ctrl
  ctrl:swapcaps        Swap Ctrl and CapsLock
  grp_led:caps         CapsLock
  caps                 CapsLock key behavior
  caps:internal        CapsLock uses internal capitalization. Shift "pauses" CapsLock
  caps:internal_nocancel CapsLock uses internal capitalization. Shift doesn't affect CapsLock
  caps:shift           CapsLock acts as Shift with locking. Shift "pauses" CapsLock
  caps:shift_nocancel  CapsLock acts as Shift with locking. Shift doesn't affect CapsLock
  caps:capslock        CapsLock toggles normal capitalization of alphabetic characters
  caps:numlock         Make CapsLock an additional NumLock
  caps:swapescape      Swap ESC and CapsLock
  caps:escape          Make CapsLock an additional ESC
  caps:backspace       Make CapsLock an additional Backspace
  caps:super           Make CapsLock an additional Super
  caps:hyper           Make CapsLock an additional Hyper
  caps:shiftlock       CapsLock toggles Shift so all keys are affected
  caps:none            CapsLock is disabled
  compose:caps         CapsLock
  shift:breaks_caps    Shift cancels CapsLock
  shift:both_capslock  Both Shift-Keys together toggle CapsLock
  shift:both_capslock_cancel Both Shift-Keys together activate CapsLock, one Shift-Key deactivates

Verweise

slm
quelle
5
Wenn Sie den Befehl versehentlich mit aktivierter Feststelltaste ausführen, können Sie xkbmap durch Ausführen zurücksetzen setxkbmap -option "".
Nemo
Es wird in xev angezeigt, funktioniert aber im Valve Source 2-Motor nicht wirklich.
Velkan
1

Wenn Sie nicht möchten, dass die Caps LockTaste wie gewohnt wirkt, können Sie den LockModifikator unter Beibehaltung des Caps_LockKeysyms ausschalten .

xmodmap -e 'clear Lock'
Gilles 'SO - hör auf böse zu sein'
quelle
Das scheint Capslock nicht zu deaktivieren.
Chris2048
@ Chris2048 Funktioniert für mich ™. Es ist möglicherweise nicht kompatibel mit einigen XKB-Einstellungen oder mit einigen Anwendungen (Anwendungen führen ihre eigene Feststelltaste aus, die meisten verwenden dieselben Bibliotheksfunktionen, es gibt jedoch Ausnahmen).
Gilles 'SO - hör auf böse zu sein'
0

Dies ist sehr ähnlich zu der Antwort, die ich auf eine andere Frage gegeben habe . Dieser Ausschnitt aus dem xkb-Code sollte den Trick machen.

partial modifier_keys
xkb_symbols "capsoff" {
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ NoAction() ]
    };
};
billyjmc
quelle
Wohin soll das gehen? Ich habe mir diese Art von Schnipsel 10 Minuten lang angesehen, ohne es herauszufinden. Muss es Teil einer vollständigeren Datei sein oder kann es allein stehen und auf die Standardkonfiguration angewendet werden?
Nikana Reklawyks