Acer Aspire 9412ZWSMi

Acer Aspire 9412ZWSMi
Windows Vista™ Home Premium
Mandriva Linux Free 2007 Spring

Click here for an English translation.

Als je problemen hebt met het printen van deze pagina, klik dan hier om een PDF te downloaden.

Vorige pagina


Het toetsenbord

Een verhaal over scancodes, Linux keycodes, X11 keycodes en een programma genaamd lineakd.

Deze laptop heeft vrij veel extra toetsen op en rond het toetsenbord.
Die moeten het natuurlijk wel allemaal doen.

Dit zijn ze (met de functies die ze onder Windows hebben):

Sommige toetsen werken gewoon, omdat ze hardwired zijn (Fn+F4, Fn+F6, Fn+F7, Fn+Pijl links, Fn+Pijl rechts); daar hoef je dus niks aan te doen. De overige toetsen zijn onder te verdelen in 2 categoriën: de toetsen die herkend worden door de kernel, en die die niet herkend worden door de kernel.
Om ze te kunnen programmeren moeten de toetsen wel herkend worden door de kernel, dus dat regelen we eerst.

Om te zien welke toetsen herkend worden door de kernel gebruik je

xev
('X Events').
Als je xev start vanuit een Konsole (of een ander terminal-programma) opent er een venstertje, en loopt je console vol met output. Die output moet je hebben.

Als je een toets indrukt en loslaat, zie je output als:

KeyPress event, serial 27, synthetic NO, window 0x6000001,
    root 0x5d, subw 0x0, time 38675548, (1037,-202), root:(1040,328),
    state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 30, synthetic NO, window 0x6000001,
    root 0x5d, subw 0x0, time 38675661, (1037,-202), root:(1040,328),
    state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False
(Dit is de letter 'a'.)
Wat je van deze informatie nodig hebt is de keycode (3e regel; in dit geval 38).
Dit is de X11 keycode, niet te verwarren met de Linux keycode waar we het straks over gaan hebben.

Dit zijn de X11 keycodes van de extra toetsen van het toetsenbord van de Acer Aspire 9412ZWSMi:

toets keycode
'e' -
envelopje 236
wereldbolletje 178
'P' -
antenne -
Bluetooth-logo -
Fn+F1 -
Fn+F2 -
Fn+F3 -
Fn+F5 -
Fn+F8 160
Fn+F12 78
Fn+Pijl omhoog 176
Fn+Pijl omlaag 174
Fn+Page up 164
Fn+Page down 144
Fn+Home 162
Fn+End 153
-
$ -

Nu blijven er dus nog 10 toetsen (of toets-combinaties) over die niet hardwired zijn, en niet ondersteund worden door de kernel. Je moet de kernel dus vertellen hoe deze toetsen te herkennen zijn.
Gelukkig maakt de kernel melding van deze toetsen in /var/log/messages.
Tik in een console

tail -n 0 -f /var/log/messages
en druk de ontbrekende toetsen in. Je ziet dan meldingen als
kernel: atkbd.c: Unknown key pressed (translated set 2, code 0xf4 on isa0060/serio0).
kernel: atkbd.c: Use 'setkeycodes e074 <keycode>' to make it known.
kernel: atkbd.c: Unknown key released (translated set 2, code 0xf4 on isa0060/serio0).
kernel: atkbd.c: Use 'setkeycodes e074 <keycode>' to make it known.
(Dit is de toets met de 'e'.)
De keycode waar we het nu over hebben, is de Linux keycode (ik weet het, het maakt het er allemaal niet duidelijker op, maar ik heb het niet verzonnen).
Het programma dat je gebruikt om de kernel te vertellen welke Linux keycode bij welke toets hoort is setkeycodes; 'e074' is (in dit voorbeeld) de scancode, en de bijbehorende keycode kun je vinden in /usr/include/linux/input.h.
Niet voor alle functies zijn keycodes, dus soms zul je een andere moeten kiezen. Uiteraard kies je er dan wel één die nog niet in gebruik is. Een aantal keycodes is nog niet gedefinieerd (84, 120, 195-199, 237-239); wellicht is het een goed idee om die te gebruiken.

Dit zijn de scancodes en de Linux keycodes die ik daarbij gekozen heb voor de laatste toetsen:

toets scancode keycode
'e' e074 148 (KEY_PROG1)
'P' e073 149 (KEY_PROG2)
antenne e055 218 (KEY_CONNECT)
Bluetooth-logo e058 237
Fn+F1 e025 138 (KEY_HELP)
Fn+F2 e026 202 (KEY_PROG3)
Fn+F3 e027 203 (KEY_PROG4)
Fn+F5 e029 238
e033 219 (KEY_FINANCE)
$ e034 239

Voor al deze toetsen kun je nu de scancode aan een Linux keycode koppelen:

setkeycodes e025 138	# Fn + F1
setkeycodes e026 202	# Fn + F2
setkeycodes e027 203	# Fn + F3
setkeycodes e029 238	# Fn + F5
setkeycodes e033 219	# euro sign
setkeycodes e034 239	# dollar sign
setkeycodes e055 218	# wireless
setkeycodes e058 237	# bluetooth
setkeycodes e073 149	# 'P'
setkeycodes e074 148	# 'e'

Iedere toets op je toetsenbord heeft nu in ieder geval een Linux keycode.
Bovenstaande commando's moeten bij iedere boot uitgevoerd worden, dus voeg die regels toe aan /etc/rc.d/rc.local.

Vervolgens gebruik je

xev
weer om de X11 keycodes van deze toetsen op te zoeken.

Als je dat gedaan hebt, heb je het rijtje X11 keycodes (eindelijk) compleet. Dit zijn de toetsen, de keycodes, en de acties die ik aan de toetsen wil geven:

toets keycode actie
Fn+F12 78 Scroll Lock
Fn+Page down 144 mediaspeler nummer terug
'P' 151 klineakconfig
Fn+End 153 mediaspeler nummer vooruit
'e' 159 ? (Acer programma voor maken van backups e.d.)
Fn+F8 160 mute sound
Fn+Home 162 mediaspeler starten/pauzeren
Fn+Page up 164 stop mediaspeler
Fn+F2 171 ? (Acer eSettings)
Fn+F3 172 ? (Acer ePower Management)
Fn+Pijl omlaag 174 geluid zachter
Fn+Pijl omhoog 176 geluid harder
wereldbolletje 178 browser openen
antenne 194 start/stop draadloze verbinding
195 euro-teken
envelopje 236 start e-mailprogramma
Bluetooth-logo 242 start/stop Bluetooth
Fn+F5 243 schakelen tussen laptop-display en externe monitor
$ 244 dollar-teken
Fn+F1 245 open Help

Alles wat je nu nog hoeft te doen, is een actie koppelen aan elke keycode.
Hiervoor gebruiken we de pakketten lineakd, lineakd-plugins-default, lineakd-plugins-kde, lineakd-plugins-xosd en klineakconfig (menu -> Systeem -> Configuratie -> Pakketten -> Software installeren).

Kijk eerst wat klineakconfig voor je kan betekenen. Voor mij was dat niet veel, want hij crasht steeds zodra ik 'm start, maar misschien heb jij meer geluk.
Als klineakconfig werkt, heb je de tekst hieronder waarschijnlijk niet meer nodig...

Goed, verder dus voor de mensen die niet met klineakconfig kunnen (of willen) werken.

Eerst voegen we de toetsenborddefinitie toe aan /etc/lineakkb.def:

[ACER-ASP9410]
    # Contributed by Rob la Lau <rob[at]nerdstock.org>
    # Documented at http://nerdstock.org/acer_vista_mandriva
    # Tested on an Acer Aspire 9412ZWSMi

    brandname = "Acer"
    modelname = "Aspire 9410 series"

    [KEYS]
        ScrollLock      = 78
        AudioPrev       = 144
        PButton         = 151   # scancode e073 - Linux keycode 149
        AudioNext       = 153
        EButton         = 159   # scancode e074 - Linux keycode 148
        Mute            = 160
        Play|Pause      = 162
        Stop            = 164
        Setup           = 171   # scancode e026 - Linux keycode 202
        PowerMan        = 172   # scancode e027 - Linux keycode 203
        VolumeDown      = 174
        VolumeUp        = 176
        WWW             = 178
        Wireless        = 194   # scancode e055 - Linux keycode 218
        EuroSign        = 195   # scancode e033 - Linux keycode 219
        Mail            = 236
        Bluetooth       = 242   # scancode e058 - Linux keycode 237
        Display         = 243   # scancode e029 - Linux keycode 238
        DollarSign      = 244   # scancode e034 - Linux keycode 239
        Help            = 245   # scancode e025 - Linux keycode 138
    [END KEYS]
[END ACER-ASP9410]
Ik heb deze configuratie ACER-ASP9410 genoemd, omdat de Acer Aspire 9412ZWSMi een 9410-serie is, en ik gok dat het toetsenbord van die hele serie hetzelfde is.
De commentaren kun je uiteraard weglaten als je dat wilt; ik heb ze toegevoegd omdat ik de lineakd-ontwikkelaars heb verzocht deze toetsenbord-definitie toe te voegen aan lineakd.def.

Dan, als gebruiker jijzelf, maak je een (leeg) lineak configuratiebestand:

lineakd -c ACER-ASP9410

Er is nu een bestand gegenereerd (~/.lineak/lineakd.conf) waarin alle toetsennamen staan die we net in /etc/lineakkb.def gedefiniëerd hebben.
In dit bestand kun je vervolgens de commando's plaatsen die je voor de verschillende toetsen wilt gebruiken.

Behalve gewone commando's, kun je ook generieke commando's gebruiken.
Meer informatie over deze commando's vind je op deze pagina en in de manpages lineak_defaultplugin, lineak_kdeplugins en lineak_xosdplugin (de links naar de manpages werken niet in alle browsers).

Dit is (voorlopig) mijn ~/.lineak/lineakd.conf:

CdromDevice = /dev/dvd
Display_align = center
Display_color = 0aff00
Display_font = -adobe-helvetica-bold-r-normal-*-*-240-*-*-p-*-*-*
Display_hoffset = 0
Display_plugin = xosd
Display_pos = bottom
Display_soffset = 1
Display_timeout = 3
Display_voffset = 50
KeyboardType = ACER-ASP9410
MixerDevice = /dev/mixer
RAWCommands =
Screensaver =
conffilename = /home/rob/.lineak/lineakd.conf
keystate_capslock =
keystate_numlock =
keystate_scrolllock =

AudioNext = EAK_MEDIADETECT(NEXT)
AudioPrev = EAK_MEDIADETECT(PREVIOUS)
Bluetooth =
DollarSign = EAK_SENDKEYS(shift+4)
EuroSign = EAK_SENDKEYS(mod5+5)
Help = /usr/bin/khelpcenter
ScrollLock =
Mail = KMAIL_COMPOSE
Mute = EAK_MUTE
Play|Pause = EAK_MEDIADETECT(PLAYPAUSE)
PowerMan =
Setup =
Stop = EAK_MEDIADETECT(STOP)
EButton =
PButton = /usr/bin/klineakconfig
Display =
VolumeDown = EAK_VOLDOWN
VolumeUp = EAK_VOLUP
WWW = KONQUEROR
Wireless =
(Ik moet dit apparaat eerst nog een keer opstarten onder Windows om te zien wat sommige knoppen daar precies doen.)

En als de configuratie klaar is, moeten we nog zorgen dat lineakd draait, anders hebben we niks aan die configuratie.
Je kunt lineakd nu starten door dit te tikken in een console:

lineakd &

En dan is dit een mooi moment om te testen of het werkt...
En bij mij doet het dat. :)

Maar iedere keer bij het inloggen dat commando in moeten tikken is natuurlijk niet handig, dus ik heb een linkje gemaakt in de Autostart directory om lineakd te starten als ik inlog

ln -s /usr/bin/lineakd ~/.kde/Autostart/lineakd
en een scriptje om lineakd af te sluiten als ik uitlog
# ~/.kde/shutdown/lineakd.sh

# exit lineakd
lineakd -x
Als je een andere desktop gebruikt dan KDE, zul je een andere plek moeten vinden om lineakd te starten bij het inloggen en te stoppen bij het uitloggen.

Reboot nu nog een keer om te zien of je niks vergeten bent, en als het goed is ben je dan klaar.
't Was even werk, maar dan heb je ook wat...


Vorige pagina

Reacties zijn welkom:
rob[at]nerdstock.org
Creative Commons License
http://creativecommons.org/licenses/by-nc-sa/3.0/nl/deed.nl
Linux On Laptops TuxMobil - Linux on Laptops, Notebooks, PDAs and Mobile Phones
Hierbij geef ik toestemming aan Acer Inc. (de fabrikant van mijn laptop) deze documentatie te kopiëren, verspreiden en doorgeven, alsmede afgeleide werken te maken, mits naam ('Rob la Lau'), e-mailadres ('rob@nerdstock.org') en website ('http://nerdstock.org/acer_vista_mandriva') van de auteur in die werken vermeld worden als zijnde de oorspronkelijke bron.