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.
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').
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'.)38).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/messagesen 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'.)
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).setkeycodes; 'e074' is (in dit voorbeeld) de scancode, en de bijbehorende keycode kun je vinden in /usr/include/linux/input.h.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
xevweer 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.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/lineakden een scriptje om
lineakd af te sluiten als ik uitlog
# ~/.kde/shutdown/lineakd.sh # exit lineakd lineakd -xAls 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...
| Reacties zijn welkom: rob[at]nerdstock.org |
![]() http://creativecommons.org/licenses/by-nc-sa/3.0/nl/deed.nl |
||
| 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. | |||