LinEAK

Már egy ideje próbálkozom linux alatt a billentyűzeteimen lévő extra gombok beüzemelésével, de sajnos sosem sikerült. Erre való a LinEAK, de mindig a következő hibával találkoztam, s nem tudtam mit kezdeni vele.

*** Xlib error caught ***
Major opcode of failed request: 33 (XKEYBOARD)
Minor opcode of failed request: 0 (XkbSetMap)
Resource ID of failed request: 125
Serial number of failed request: 39
Error code: 10
Type: 0
Maybe we should exit now?

Most végre rájöttem. Ez csak azért van, mert az X már hamarabb lekezel egy-egy gombot (bár ebben nem vagyok egészen biztos, de némi köze lehet az igazsághoz). Ez a következőképpen lehet megnézni:

$ xmodmap -pke
...
keycode 160 = XF86AudioMute
...

Két megoldás van. Először is módosíthatod az xmodmappel ezeket a beállításokat, vagy kiszeded a ~/.lineak/lineakd.conf-ból ezeket, az X által lekezelt gombokat. Nálam a következő kettő volt problémás:

#Mute =
#Next =

Ezután már hibaüzenet nélkül elindult a lineakd.

A másik lehetőség az billentyűzettérkép átállítása az xmodmappel. Először elmentjük a régi beállításokat:

xmodmap -pke > ~/.xmodmaprc

Az extra gombok megnyomásakor keletkező XF86* eseményeket az xev paranccsal lehet kideríteni. A némítás gomb megnyomásakor például egy ilyen esemény keletkezik:

...
KeyRelease event, serial 23, synthetic NO, window 0x3400001,
    root 0x7d, subw 0x0, time 882632, (334,442), root:(338,489),
    state 0x10, keycode 160 (keysym 0x1008ff12, XF86AudioMute), same_screen YES,
    XLookupString gives 0 bytes:  ""

...

Tehát az előbb létrehozott ~/.xmodmaprc fájlból kell eltávolítani a 160-as billentyűkódhoz rendelt XF86AudioMutere történő hivatkozást. A szerkesztés után az én esetemben így néz ki a fájl előbb már bemutatott sora:

keycode 160 =

Majd visszatöltjük az új beállításokat:

$ xmodmap ~/.xmodmaprc

Ezután már nem kezeli le az X a gombot, maradhat a lineakdnek a feladat. Újabb xev teszt:

...
KeyRelease event, serial 28, synthetic NO, window 0x3200001,
    root 0x7d, subw 0x0, time 1047755, (285,488), root:(289,535),
    state 0x10, keycode 160 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes:  ""
...

Esetlegesen még szükséges lehet a setxkbmap parancs kiadása is, például a következő módon:

setxkbmap -model pc105 -layout hu -variant basic
KDE esetén az xmodmap futtatására létre lehet hozni egy szkriptet a ~/.kde/Autostart/ könyvtárban (bármilyen néven).
#!/bin/bash
xmodmap ~/.xmodmaprc
Néhány lineakd szkript, illetve beállítás:
# group media
Media = xmms --play
Stop = xmms --stop
Next = xmms --fwd
Play|Pause = xmms --pause
Previous = xmms --rew

# last group
Calculator = kcalc
My Computer = /usr/bin/kdesktop_lock --forcelock
Sleep = ~/.lineak/scripts/sleep

# volume
VolumeDown = dcop kmix Mixer0 decreaseVolume 0
VolumeUp = dcop kmix Mixer0 increaseVolume 0
Mute = ~/.lineak/scripts/mute
A hivatkozott szkriptek:
$ cat .lineak/scripts/mute
#!/bin/bash

if [ $(dcop kmix Mixer0 mute 0) = true ]
then
    dcop kmix Mixer0 setMute 0 false
else
    dcop kmix Mixer0 setMute 0 true
fi
$ cat .lineak/scripts/sleep
#!/bin/sh
xset dpms force off
/usr/bin/kdesktop_lock --forcelock
Felhasznált irodalom:
Tartalom átvétel