Neuzuweisung von Strg- und Alt-Tasten - xmodmap 'BadValue' Fehler


13

Ich versuche, meine Tastatur neu zuzuordnen, um Emacs nutzbar zu machen. Meine ergonomische Tastatur steckt die einzelne Steuertaste in einer isolierten Insel mit 4 Tasten ganz links.

Das Betriebssystem ist Debian Squeeze.

Hier sind die Zeilen, auf die ich füttern xmodmapmöchte. Ich platziere sie in einer Datei ~ / .Xmodmap:

klare Kontrolle
Mod1 löschen
! Die Alt-Tasten sind auf meiner Tastatur mit 'Option' beschriftet.
! Mit xev können Sie Alt_L- und Alt_R-Keysyms senden
keysym Alt_L = Control_L
keysym Alt_R = Control_R
! Die Tasten Super_L und Super_R sind die Windows-Tasten
keysym Super_L = Alt_L
keysym Super_R = Alt_R
addiere Control = Control_L Control_R
addiere Mod1 = Alt_L Alt_R

Mein Ziel ist es, dass sich meine Wahltasten (aka Alt) wie die Steuertasten verhalten und dass sich meine Windows-Tasten (aka Super) so verhalten, wie sie sind Alt.

Hier sind die von xev ausgegebenen Schlüsselcodes und Schlüsselms für die betreffenden Schlüssel. Beachten Sie, dass meine Tastatur (eine ergonomische Goldtouch-Tastatur) nur eine Bedientaste hat.

Schlüsselcode 37 (keysym 0xffe3, Control_L)
keycode 64 (keysym 0xffe9, Alt_L)
Schlüsselcode 133 (keysym 0xffeb, Super_L)
Schlüsselcode 134 (keysym 0xffec, Super_R)
keycode 108 (keysym 0xffea, Alt_R)

Hier ist, was xev beim Laufen anzeigt xmodmap .Xmodmap

MappingNotify-Ereignis, Seriennummer 34, synthetisches NO, Fenster 0x0,
    Anfrage MappingKeyboard, first_keycode 204, Anzahl 1

MappingNotify-Ereignis, Seriennummer 34, synthetisches NO, Fenster 0x0,
    Anfrage MappingKeyboard, first_keycode 64, Anzahl 1

MappingNotify-Ereignis, Seriennummer 34, synthetisches NO, Fenster 0x0,
    Anfrage MappingKeyboard, first_keycode 108, Anzahl 1

MappingNotify-Ereignis, Seriennummer 34, synthetisches NO, Fenster 0x0,
    Anfrage MappingKeyboard, first_keycode 206, Anzahl 1

MappingNotify-Ereignis, Seriennummer 34, synthetisches NO, Fenster 0x0,
    Anfrage MappingKeyboard, first_keycode 133, Anzahl 1

MappingNotify-Ereignis, Seriennummer 34, synthetisches NO, Fenster 0x0,
    Anfrage MappingKeyboard, first_keycode 134, Anzahl 1

Und hier ist der Fehler, der zurückgegeben wird von xmodmap:

X Fehler bei fehlgeschlagener Anforderung: BadValue (Integer-Parameter außerhalb des Bereichs für den Betrieb)
Hauptoperationscode der fehlgeschlagenen Anforderung: 118 (X_SetModifierMapping)
Wert in fehlgeschlagener Anforderung: 0x17
Seriennummer der fehlgeschlagenen Anfrage: 17
Aktuelle Seriennummer im Ausgabestream: 17

Irgendwelche Vorschläge, wie ich das beheben kann?


Auf welchem ​​Betriebssystem und welcher Version? Welcher breite Tastaturtyp (PC / Mac / Sun / ...)? Versuchen Sie, xevin einem Terminal und dann xmodmapin einem anderen Terminal zu rennen . Sie sollten einige MappingNotifyStrophen von sehen xev, fügen Sie sie Ihrer Frage hinzu. xevDrücken Sie im Fenster auch die verschiedenen beteiligten Tasten und teilen Sie uns mit, welchem ​​Keycode und welchem ​​Keysym sie entsprechen (der Teil „Keycode 37 (keysym 0xffe3, Control_L)“ der xev-Ausgabe).
Gilles 'SO- hör auf böse zu sein'

Antworten:



7

In Anbetracht der von Giles verknüpften Problemumgehung hat Folgendes für mich funktioniert:

clear Mod1
clear Mod4

keycode 204 = NoSymbol NoSymbol NoSymbol NoSymbol
keycode 206 = NoSymbol NoSymbol NoSymbol NoSymbol

keycode 64 = Control_L Control_L Control_L Control_L
keycode 133 = Alt_L Alt_L Alt_L Alt_L
keycode 134 = Alt_R Alt_R Alt_R Alt_R
keycode 108 = Control_R Control_R Control_R Control_R

add Control = Control_L Control_R
add Mod1 = Alt_L Alt_R

Meine Wahltasten funktionieren jetzt wie Steuertasten und meine Windows-Tasten wie Alt-Tasten.


3

Das Problem tritt auf, wenn Sie versuchen, einem Modifikator, der bereits einem anderen Modifikator-Schlüssel hinzugefügt wurde, einen Keysym hinzuzufügen. Es ist wichtig zu wissen, dass, wenn Sie einem Modifikator einen Schlüssel hinzufügen, alle anderen Schlüssel, die den Schlüssel für den Fall begleiten, auch zu diesem Modifikator hinzugefügt werden.

Beispielsweise:

clear mod5
add mod5    = ISO_Level3_Shift Mode_switch

kann dazu führen

mod5        backslash (0x33),  Caps_Lock (0x42),  ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

weil du sowas hast

keycode  66 = Caps_Lock NoSymbol ISO_Level3_Shift

in Ihrer ~ / .Xmodmap (Den aktuellen Keycode für das Keysym-Mapping sehen Sie über xmodmap -pke)

Das wird den fraglichen BadValue-Fehler erzeugen, wenn Sie auch versuchen, etwas wie zu tun

add lock    = Caps_Lock

weil Caps_Lock bereits zum Modifikator mod5 hinzugefügt wurde.


2

Dies ist eine weitere Lösung für Ihr Problem, obwohl sie Ihre Frage nicht wirklich beantwortet. Bearbeiten Sie die Datei xorg.conf und fügen Sie Folgendes in den Abschnitt "InputDevice" ein:

 Option "XkbOptions" "ctrl:swapcaps"
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.