Come personalizzare a fondo lo Zaurus modificando pochi semplici file di configurazione.
Oggi ho aggiornato Angstrom sul mio Zaurus SL-C1000, e con il resto del software è arrivato anche il nuovo kernel 2.6.23. Un po' di panico dopo l'aggiornamento (per motivi di altboot, ma ne parlerò in un altro post), sono riuscito a flashare il nuovo kernel. Tra le sorprese gradite c'è il supporto all'overlay (ma anche di questo parlerò in un altro post). Tra le sorprese meno gradite, i tasti hardware hanno smesso di funzionare (a metà). Ho quindi indagato un po' e ne approfitto per fare il punto della situazione su come configurarli.
zaurusd
Il punto focale è capire cosa faccia zaurusd. In realtà con le ultime versioni di angstrom questo software è sparito, ed è stato sostituito da un pool di software che ne replicano le funzioni, in particolare setleds, switchevd, alsactl e tskeys.
setleds (nella config di default di Angstrom) si limita a forzare il numlock attivo. Non so perché, dovrei investigare meglio. Probabilmente per attivare la fila di tasti superiore (quella dei numeri appunto).
switchevd imposta lo script da chiamare quando succede qualcosa al display: viene chiuso, messo in portrait o in landscape. Lo script richiamato si limita a richiamare altri script che attivano lo screensaver o comunicano al window manager di ruotare lo schermo.
tskeys è il centro del problema odierno. Questo software permette di “trasformare” un pezzo di display LCD, quello destro nascosto dalle iconcine, in una serie di tasti funzione, ed in particolare da F20 a F30. Anche gli spazi tra le icone diventano tasti funzione, quindi il primo in alto (a destra se usate il portrait) è F20, la casetta è F21, quindi F22. La busta è F23, lo spazio F24, l'omino F25, lo spazio F26, il calendario stilizzato F27, lo spazio F28, il libro aperto F29 e l'ultimo spazio F30.
Il problema è che con gli ultimi aggiornamenti la libreria tscal (touch-screen calibration) è stata aggiornata dalla versione 0.0 alla 1.0, e tskeys è ancora linkato alla 0.0. Ho quindi dovuto creare un symlink in /usr/lib. Fortunatamente la API non è cembiata, e tskeys è tornato a funzionare normalmente:
cd /usr/lib
ln -s libts-1.0.so.0 libts-0.0.so.0
Fatto questo è stato sufficiente rilanciare zaurusd con /etc/init.d/zaurusd restart per vedere tornare tutto a funzionare.
keylaunch
keylaunch è una specie di daemon, ma viene lanciato dall'utente al login, e permette di associare combinazioni di tasti a programmi o script. Viene lanciato al login perché deve collegarsi all'X-server dell'utente. Il formato non è molto documentato, ma ho trovato un post di Bundabrg sui forum di OESF che lo descrive, ricavando le informazioni direttamente dal sorgente di keylaunch, e mi permetto di riportarlo qui e tradurlo in italiano.
Ogni riga è così formata (le parentesi graffe indicano le variabili, le parentesi quadre che il parametro è opzionale) :
key={flag}[{option} ]{keyname}[ {combinekeyname}][:-]:[~]{command}
Mentre i significati dei vari componenti sono:
key=
Questo rimane uguale in ogni riga, e serve a far capire che stiamo definendo un tasto
{flag}
Questa è una lista di modificatori del tasto. Normalmente è .... (quattro punti), che significa “nessun modificatore”, cioè il tasto premuto da solo. Le combinazioni sono:
.... = nessun modificatore
*... = CTRL
.*.. = SHIFT (maiuscole)
..*. = Alt
...* = Fn (il tasto col bordo blu)
Si possono anche combinare, quindi, per esempio, “*.*.” significa CTRL+ALT.
[{option} ]
Questa è un'opzione opzionale :) che definisce quando viene scatenato l'evento (cioè quando il programma viene lanciato). Attenzione allo spazio che la segue! Può essere una delle seguenti:
Pressed = Quando il tasto viene premuto
Released = Quando il tasto viene rilasciato
Held = Quando il tasto viene mantenuto premuto per un po' di tempo
Combine = Quando il tasto viene premuto in combinazione con un altro
Il Combine è un caso particolare. Se viene specificato, bisogna includere anche la definizione di quale altro tasto deve essere premuto per attivare l'azione. Per esempio: volendo far caricare il programma “pippo” quando si preme contemporaneamente Calendar e Address (i tasti in basso a sinistra) si scriverà
key=....Combine F9 F10:pippo
Attenzione agli spazi! Vedremo dopo perché F9 e F10.
{keyname}
Questo parametro specifica a quale tasto ci stiamo riferendo. I nomi dei tasti vengono definiti in /etc/keymap-2.6.map ed ecco svelato da dove saltano fuori F9 e F10 che abbiamo usato prima: sono definiti qui dentro. Si possono usare tutti i tasti standard (alfanumerici) più quelli speciali: F9 per il Calendar, F10 per l'Address, F13 per Mail, F12 per l'Home, F11 per il Menu. Il tasto Cancel corrisponde all'Esc sulle normali tastiere, l'OK al Return (Invio), quindi conviene fare attenzione a come si usano in keylaunch, mentre le frecce intorno all'OK sono Left, Right, Up e Down. Qui si possono usare anche i suddetti F20...F30
[ {combinekeyname}]
Questo parametro ha senso solo quando si usa Combine tra le options, e l'abbiamo già spiegato. Si usano gli stessi nomi che abbiamo già visto per keyname.
[:-]
Specificando questo parametro (il parametro è “due-punti meno”, le parentesi quadre sono solo per far capire che è opzionale) keylaunch cercherà se c'è già un'applicazione con lo stesso nome in esecuzione e, se viene trovata, cercherà di portarne la finestra in primo piano, invece di lanciarla di nuovo.
[~]
Specificando la tilde prima del nome del comando disabilitiamo la notifica di avvio. Tipicamente questa notifica fa apparire una clessidra sulla barra del window manager.
{command}
Questo è il comando vero e proprio che viene lanciato alla pressione della combinazione di tasti che abbiamo impostato.
Un esempio
Riporto qui sotto il mio attuale /etc/keylaunchrc (che in realtà è un symlink a /etc/keylaunchrc.matchbox), per mostrare il prodotto finito. Le linee che iniziano con # (cancelletto) sono commenti che vengono ignorati da keylaunch:
key=....F9:-:gpe-calendar
key=....F10:-:gpe-contacts
key=....F13:-:sylpheed
key=....F12:-:~matchbox-remote -next
key=...*F12:-:~matchbox-remote -desktop
key=....F11:-:~matchbox-remote -menu
#key=...*1:-:~zoom out
#key=...*2:-:~zoom in
key=...*3:-:~display-brightness.sh down
key=...*4:-:~display-brightness.sh up
key=....F20:-:~display-brightness.sh up
key=....F21:-:~matchbox-remote -next
key=....F22:-:~display-brightness.sh down
key=....F23:-:sylpheed
#key=....F24:-:
key=....F25:-:gpe-contacts
#key=....F26:-:
key=....F27:-:gpe-calendar
#key=....F28:-:
key=....F29:-:FBReader
key=....F30:-:~matchbox-remote -panel-toggle
# VT changing
key=...*Left:-:~chvt 1
key=...*Right:-:~chvt 3
A parte le sezioni più ovvie (la prima parte), nella seconda parte (LCD Softkeys) vengono sfruttati proprio i tasti emulati da zaurusd/tskeys per richiamare più o meno le stesse applicazioni, ma soprattutto per regolare la luminosità del display. Questo mi permette di togliere dalla tray l'icona della luminosità, che è un succhia-RAM di prima categoria (tolte le librerie condivise occupa comunque 1 MiB di memoria). Ho riprogrammato il tasto Home (sia fisico, F12, che softkey, F21) per passare alla prossima applicazione aperta (un po' come l'Alt-Tab sul desktop), così posso togliere dalla tray anche la window-list (che non consuma molto, ma con 64 MiB di RAM è sempre meglio risparmiare). L'F30 deriva direttamente dal forum di cui sopra, e permette di nascondere la tray bar di matchbox, in modo da avere più spazio a disposizione sullo schermo (che è 640×480. Quei 20 pixel in più possono essere utili in alcune occasioni).
L'ultima parte è utile per passare dalla console testuale (chvt 1) a quella grafica (chvt 3).
keymap-2.6.map
Riporto qui anche il mio keymap-2.6.map, perché è diverso da quello originale, e permette di avere le accentate per noi italiani:
# Default kernel keymap. This uses 7 modifier combinations.
keymaps 0-2,4-5,8,12
# Change the above line into
# keymaps 0-2,4-6,8,12
# in case you want the entries
# altgr control keycode 83 = Boot
# altgr control keycode 111 = Boot
# below.
#
keycode 1 =
keycode 2 = one exclam
control alt keycode 2 = Console_1
keycode 3 = two quotedbl
control alt keycode 3 = Console_2
keycode 4 = three numbersign
control alt keycode 4 = Console_3
keycode 5 = four dollar
control alt keycode 5 = Console_4
keycode 6 = five percent
control alt keycode 6 = Console_5
keycode 7 = six ampersand
control alt keycode 7 = Console_6
keycode 8 = seven apostrophe
altgr keycode 8 = dead_acute
keycode 9 = eight parenleft
altgr keycode 9 = dead_grave
keycode 10 = nine parenright
keycode 11 = zero asciitilde
keycode 12 = minus at
altgr keycode 12 = at
keycode 13 =
keycode 14 = BackSpace
altgr keycode 14 = Delete
keycode 15 = Tab
altgr keycode 15 = Caps_Lock
keycode 16 = q
keycode 17 = w
altgr keycode 17 = asciicircum
keycode 18 = e
altgr keycode 18 = equal
keycode 19 = r
altgr keycode 19 = plus
keycode 20 = t
altgr keycode 20 = bracketleft
keycode 21 = y
altgr keycode 21 = bracketright
keycode 22 = u
altgr keycode 22 = braceleft
keycode 23 = i
altgr keycode 23 = braceright
keycode 24 = o
keycode 25 = p
keycode 26 =
keycode 27 =
keycode 28 = Return
keycode 29 = Control
keycode 30 = a
keycode 31 = s
keycode 32 = d
keycode 33 = f
altgr keycode 33 = backslash
keycode 34 = g
altgr keycode 34 = semicolon
keycode 35 = h
altgr keycode 35 = colon
keycode 36 = j
altgr keycode 36 = asterisk
keycode 37 = k
altgr keycode 37 = backslash
keycode 38 = l
altgr keycode 38 = bar
keycode 39 =
keycode 40 =
keycode 41 =
keycode 42 = Shift
keycode 43 =
keycode 44 = z
keycode 45 = x
keycode 46 = c
keycode 47 = v
keycode 48 = b
altgr keycode 48 = underscore
keycode 49 = n
keycode 50 = m
keycode 51 = comma slash
altgr keycode 51 = less
keycode 52 = period question
altgr keycode 52 = greater
keycode 53 =
keycode 54 = Shift
keycode 55 =
keycode 56 = Alt
keycode 57 = space space
control keycode 57 = nul
keycode 59 = F9
keycode 60 = F10
keycode 61 = AltGr
keycode 62 = Escape
keycode 63 = Return
keycode 64 = Escape
keycode 65 = Down
keycode 66 = Up
keycode 67 = Control
keycode 68 = F13
keycode 79 = F15
keycode 80 = F16
keycode 82 = F17
keycode 87 = Return
keycode 88 = F11
keycode 97 = Control
keycode 99 = F12
keycode 103 = Up
altgr keycode 103 = PageUp
keycode 105 = Left
altgr keycode 105 = Decr_Console
keycode 106 = Right
altgr keycode 106 = Incr_Console
keycode 108 = Down
altgr keycode 108 = PageDown
# LCD Softkeys as represented by zaurusd
keycode 82 = F5
keycode 79 = F15 # Home
keycode 80 = F6
keycode 81 = F16 # Email
keycode 75 = F7
keycode 76 = F17 # Addresses
keycode 77 = F8
keycode 71 = F18 # Calendar
keycode 72 = F9
keycode 73 = F19 # Book
keycode 78 = F10
In realtà l'ultima parte è sbagliata, ma devo ancora indagare a fondo.
Con questa versione, basta premere Fn+8 per avere l'accento acuto “morto” e Fn+9 per avere l'accento grave “morto”. Dopo aver premuto questa combinazione, basta premere una vocale ed avere la versione accentata della stessa.