# [solved] Keycode xmodmap und xkb

## musv

Hallo, 

ich hab gestern das Hibernate zum Laufen gebracht. Funktioniert scheinbar auch ganz toll. Jetzt würde ich das gern auf eine Taste legen. Auf meinem Lenovo gibt's dafür ein Ding oben rechts, da steht ein QS drauf.

1. Versuch: xev

-> erkennt nichts

2. Versuch: /var/log/messages

```
Nov 17 23:10:19 localhost kernel: atkbd serio0: Use 'setkeycodes e007 <keycode>' to make it known.

Nov 17 23:10:19 localhost kernel: atkbd serio0: Unknown key released (translated set 2, code 0x87 on isa0060/serio0).
```

also hab ich diese Taste in /etc/conf.d/local.start reingepackt:

```
setkeycodes e007 135 #Sleep-Key (QS), Hibernate
```

und in /etc/X11/xinit/Xmodmap:

```
keycode 135 = XF86Sleep
```

3. Versuch: xev

```
KeyPress event, serial 32, synthetic NO, window 0xa00001,

    root 0x15d, subw 0x0, time 400620, (169,3), root:(600,567),

    state 0x0, keycode 143 (keysym 0x1008ff6d, XF86Paste), same_screen YES,

    XLookupString gives 0 bytes: 

    XmbLookupString gives 0 bytes: 

    XFilterEvent returns: False
```

Tja, und jetzt steh ich vor dem Rätsel, warum meine QS-Taste, die ich per setkeycodes auf 135 gelegt hab, in xev auf einmal als keycode143 erkannt wird? In e16keyedit (Hotkey-Definition in Enlightenment) wird mir das Ding auch als XF86Paste anstatt als XF86Sleep angezeigt.

Gibt's da irgendwelche Probleme mit Xmodmap <-> kkb? Oder ist /etc/X11/xinit/Xmodmap der falsche Ort dafür?Last edited by musv on Thu Nov 18, 2010 7:35 pm; edited 1 time in total

----------

## musv

Ja, also die Lösung ist relativ simpel, auch wenn ich noch nicht richtig durchblick.

1. Diverse Multimedia-Keycodes sind schon vorbelegt und ließen sich früher in der /usr/share/X11/XKeysymDB nachlesen. Die Datei gibt's heut nicht mehr. Die Belegungen sind irgendwo anders versteckt. 

2. Wie oben schon erwähnt, müssen die Tasten erstmal per setkeycodes zugeordnet werden. Dabei enstpricht allerdings die Nummer in der Konsole nicht der Nummer im X. Der nette Mensch hatte eine Differenz von 7, ich hatte eine von 8. 

Mit anderen Worten, erkannt wird die Taste im log als e007, die mappen wir auf 142, da 150 XF86Sleep ist:

```

setkeycodes e007 142 #Sleep-Key (QS), Hibernate

```

Erkannt wird dann per xev:

```

KeyRelease event, serial 33, synthetic NO, window 0xe00001,

    root 0x15d, subw 0x0, time 538602, (80,95), root:(677,191),

    state 0x0, keycode 150 (keysym 0x1008ff2f, XF86Sleep), same_screen YES,

    XLookupString gives 0 bytes: 

    XFilterEvent returns: False

```

Xmodmap ist nicht erforderlich. XF86Sleep kann im e16keyeditor und vermutlich in jedem anderen Hotkey-Manager verwendet werden.

----------

