staging.inyokaproject.org

Xmodmap: Windows-Taste(n) belegen

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

Wolfgang.Klein

Anmeldungsdatum:
25. Juni 2007

Beiträge: 750

Moin!

Das KDE-Menü öffnet sich beim Druck auf die linke Windows-Taste (keycode 133). Gut.

Ich möchte die rechte Windows-Taste (keycode 134) gerne mit dem "@" belegen. Ein

xmodmap -e "keycode 134 = at"

reicht dazu aber nicht, denn dann wird zwar das @ ausgegeben, aber es öffnet sich zusätzlich das KDE-Menü. Wie muss ich mit xmodmap zaubern, damit beim Drücken der Taste kein weiterer Befehl abgesetzt wird, sondern nur ein "@" ausgegeben wird?

Letalis_Sonus Team-Icon

Anmeldungsdatum:
13. April 2008

Beiträge: 12990

Der Weg vom Tastendruck zum Symbol ist noch einmal etwas komplizierter, die Tastatur sendet keine Keycodes sondern Scancodes, die der Kernel erst in einheitliche Keycodes umwandeln muss, bevor diese über das Keymapping des X Servers einem Keysym zugeordnet werden. Wenn ein Programm nun nach den Keycodes horcht, dann ist es herzlich egal welchen Keysym man hier zuordnet. Die Scancodes sind hingegen wieder Hardware-abhängig, während die direkt seriell angesteuerten Tastaturen sich zwar historisch einigermaßen auf einen Standard eingefahren haben, nutzt der USB Standard einen einheitlichen, aber abweichenden eigenen Satz an Scancodes.

Und dann besteht noch die Möglichkeit, dass diese Taste vom X Server schlicht eine Sonderbehandlung bekommt, da sie von diesem als Modifier wie Strg, Alt und Shift behandelt wird. Es ist gut möglich, dass ein Programm so unabhängig vom Keysym den Tastendruck beider Super Tasten auf einen Schlag abfragen kann.

In beiden Fällen müsste man hier bei einem Ansatz von Seiten der Tastaturkonfiguration dementsprechend direkt beim Kernel-seitigen Scancode Mapping ansetzen, dazu könntest du dir mal die Manpage von setkeycodes anschauen.

Wolfgang.Klein

(Themenstarter)

Anmeldungsdatum:
25. Juni 2007

Beiträge: 750

Ich habe jetzt mehrere Stunden mit vielen Seiten über Scancodes und Keycodes verbracht, aber ich krieg's nicht hin. ☹

Was ich herausgefunden habe, ist nicht viel:

~$ sudo showkey --scancodes

0xe0 0x5b 0xe0 0xdb  <- linke Windows-Taste

0xe0 0x5c 0xe0 0xdc <- rechte Windows-Taste

~$ sudo showkey --keycodes 

Tastencode 125 gedrückt
Tastencode 125 losgelassen <- links

Tastencode 126 gedrückt
Tastencode 126 losgelassen <- rechts

~$ xev

133 Super_L
134 Super_R

Meine Idee nach der Lektüre der vielen Seiten war, dem Scancode der rechten Win-Taste einen laut "xmodmap -pke" freien Keycode zuzuweisen, um dann im nächsten Schritt mit xmodmap diesen Keycode mit dem "@" zu belegen. Aber das ergibt nur eine Fehlermeldung:

$ sudo setkeycodes 0x5c 132
KDSETKEYCODE: Das Argument ist ungültig
Der Scancode 5c konnte nicht für den Tastencode 132 gesetzt werden.

Kannst Du mir sagen, wie es richtig geht?

Wolfgang.Klein

(Themenstarter)

Anmeldungsdatum:
25. Juni 2007

Beiträge: 750

Ich habe jetzt viele Seiten über das Thema gefunden, und noch mehr Möglichkeiten mit probiert, aber alles bisher erfolglos. ☹

Hier noch ein paar weitere Angaben:

~$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Shift_L (0x32)
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)

~$ xmodmap -pke
...
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R
...

~$ cat /etc/default/keyboard 
# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="cymotionlinux"
#XKBMODEL="pc105"
XKBLAYOUT="de"
XKBVARIANT="nodeadkeys"
XKBOPTIONS="lv3:ralt_switch,compose:rwin,terminate:ctrl_alt_bksp"
#XKBOPTIONS="lv3:ralt_switch,terminate:ctrl_alt_bksp"
BACKSPACE="guess"

~$xev
...
KeyPress event, serial 40, synthetic NO, window 0x7200001,
    root 0x4e3, subw 0x7200002, time 2562926, (32,38), root:(1770,67),
    state 0x10, keycode 134 (keysym 0xffec, Super_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False
...

Ich wäre echt dankbar, wenn mir jemand sagen könnte, wie ich erreiche, dass

a) das sich Menü nur beim Drücken der linken Windows-Taste öffnet

b) die rechte Windows-Taste das @ ausgibt.

Antworten |