Xorg - hal - synaptics touchpad: differenze tra le versioni
(Cambiato nick) |
|
(Nessuna differenza)
|
Versione attuale delle 23:57, 2 ott 2012
Indice
ATTENZIONE
Con la "morte" del progetto hal il server Xorg si autoconfigura tramite il demone udev (udevd). Questo wiki per tanto può considerarsi obsoleto.
Per configurare il driver synaptics sui server Xorg (versione => 1.9) che fanno uso di udev, dopo aver installato il pacchetto:
xf86-input-synaptics
si controlli il file:
/usr/share/X11/xorg.conf.d/50-synaptics.conf
Introduzione
Questo wiki spiega come settare i touchpad synaptics attraverso hal e il nuovo xorg >= 1.5.x. I nuovi server xorg supportano l'hotplugging attraverso le informazioni
prelevate grazie al demone hal (hald).
Si può vedere il sottosistema hal come un database di informazioni sui vari device presenti nel PC, il server xorg quindi lo contatta attraverso il message bus di sistema
(dbus-daemon --system) e preleva ciò di cui ha bisogno per "auto-configurarsi". In questo modo i futuri server xorg (ma anche lo stesso 1.5.x) potranno quasi
certamente
fare a meno del famoso file di configurazione /etc/X11/xorg.conf.
In questo wiki spiegheremo come aggiungere al database di hal le informazioni relative ai touchpad synaptics in modo tale che il server xorg le possa prelevare per
configurare il driver stesso (il driver synaptics).
Cosa ci serve
Tutto il software necessario si trova di default sulla slackware a partire già dalla versione current di oggi, 16 Giugno 2009. In pratica ci si deve solo assicurare di avere installato i pacchetti (le versioni sono riferite alla distribuzione current di slackware):
- hal-0.5.11
- dbus-1.2.14
- xorg-server-1.6.1
- xf86-input-evdev-2.2.2
- xf86-input-synaptics-1.1.2
I due demoni hald e dbus-daemon --system sono eseguiti all'avvio della slackware dai relativi file:
/etc/rc.d/rc.hald /etc/rc.d/rc.messagebus
NOTA: evdev deve essere compilato anche nel kernel! Ma nei kernel della Slackware è già presente.
Come aggiungere le informazioni al database di hal per il driver synaptics di xorg
Per aggiungere le informazioni sulla configurazione che vogliamo ottenere per il touchpad bisogna creare un file per hal, ad esempio il file:
/etc/hal/fdi/policy/11-x11-synaptics.fdi
con all'interno quanto segue:
<?xml version="1.0" encoding="ISO-8859-1"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.touchpad"> ... ... ... </match> </device> </deviceinfo>
Tutto ciò che è nei ... sarà la nostra configurazione, e vedremo in seguito cosa e come possiamo settarla.
Intanto cerchiamo di capire cosa abbiamo fatto creando questo file. Innanzitutto il path /etc/hal/fdi/policy ci assicura che il file verrà letto dal demone hald
al suo prossimo riavvio. Il contenuto del file segue la DTD (Document Type Definition) dei file XML per hal, noi stiamo dicendo che vogliamo effettuare delle operazioni (sono
quelle nei ...) se tra le info.capabilities individuate nel PC c'è un entry che contiene il valore input.touchpad.
Controllare le informazioni sul device presenti nel database di hal
Come abbiamo visto, quello che noi faremo è semplicemente aggiungere informazioni al database di hal per il driver synaptics. Inoltre abbiamo anche visto che le
informazioni verranno aggiunte al device in cui compare la stringa input.touchpad come info.capabilities.
Il sistema hal prevede una serie di software con il quale è possibile interrogare il database da riga di comando, e ora noi ne sfrutteremo due per controllare le
informazioni già presenti nel database. Eseguendo:
$> hal-find-by-capability --capability input.touchpad /org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input
si ottiene l'udi (Unique Device Id) del device che contiene input.touchpad come info.capabilities.
Ora eseguendo hal-device passando come parametro l'udi ottenuto:
$> hal-device '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input' udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input' input.originating_device = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port' (string) info.subsystem = 'input' (string) linux.sysfs_path = '/sys/class/input/input4/event4' (string) info.category = 'input' (string) info.product = 'SynPS/2 Synaptics TouchPad' (string) info.parent = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port' (string) info.capabilities = { 'input', 'input.touchpad' } (string list) info.udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input' (string) linux.hotplug_type = 2 (0x2) (int) input.device = '/dev/input/event4' (string) linux.subsystem = 'input' (string) input.product = 'SynPS/2 Synaptics TouchPad' (string) linux.device_file = '/dev/input/event4' (string)
otteniamo le informazioni contenute nel database di hal relative al nostro touchpad (si noti che tra le info.capabilities c'è anche input.touchpad).
I primi passi per la configurazione
Ora limitiamoci ad inserire nel database di hal le informazioni minimali in modo da avere il nostro touchpad attivo, quindi inseriamo nel file /etc/hal/fdi/policy/11-x11-synaptics.fdi quanto segue:
<?xml version="1.0" encoding="ISO-8859-1"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.touchpad"> <merge key="input.x11_driver" type="string">synaptics</merge> <merge key="input.x11_options.SHMConfig" type="string">true</merge> </match> </device> </deviceinfo>
dicendo quindi ad hal che se trova una chiave info.capabilities che contiene la stringa input.touchpad deve aggiungere nel database le coppie chiave = valore:
input.x11_driver = synaptics input.x11_options.SHMConfig = true
La prima chiave (input.x11_driver) viene cercata dal server xorg al momento dell'avvio per sapere quali driver deve caricare per gestire l'input, quindi noi gli diciamo di caricare anche il driver synaptics. La seconda chiave (input.x11_options.SHMConfig) viene invece cercata dal driver synaptics e gli serve per sapere come configurarsi. Tutte le chiavi di configurazione del driver synaptics iniziano con input.x11_options. e al momento sono tutte di tipo string. Quindi per ora abbiamo detto al driver che vogliamo sfruttare la memoria condivisa (SHM - Shared Memory), vedremo dopo il perchè.
Quindi, una volta riavviato il demone hald con:
#> /etc/rc.d/rc.hald restart
rieseguendo:
$> hal-device '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input' udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX_port_logicaldev_input' ... input.x11_driver = 'synaptics' (string) ... input.x11_options.SHMConfig = 'true' (string) ...
vediamo che nel database di hal, relativamente al touchpad, sono presenti anche le nostre impostazioni.
Allora quando noi avvieremo il server xorg, lui troverà la chiave input.x11_driver e capirà che dovrà caricare il driver synaptics, il quale a sua volta troverà la chiave input.x11_options.SHMConfig e saprà che dovrà configurarsi in modo tale da poter essere configurato tramite la memoria condivisa.
Usare synclient per configurare il driver synaptics a runtime
Con la semplice impostazione precedente
<merge key="input.x11_options.SHMConfig" type="string">true</merge>
abbiamo detto al driver synaptics che deve poter essere configurabile a runtime attraverso la memoria condivisa, e questo ci permette di eseguire, a server xorg attivo, il comando synclient.
NOTA: l'opzione 'SHMConfig = true' è considerata un rischio per la sicurezza, visto che tutti coloro che hanno accesso al PC possono configurare il driver synaptics semplicemente tramite SHM.
Lanciando:
$> synclient -l Parameter settings: LeftEdge = 1752 RightEdge = 5192 TopEdge = 1620 BottomEdge = 4236 ....
si può vedere come è configurato il driver synaptics al momento attuale. Tutte le proprietà sono spiegate nel manuale del driver, accessibile con:
man 4 synaptics
Ad esempio per abilitare lo scrolling verticale si esegua:
$> synclient VertEdgeScroll=1
e controllando con:
$> synclient -l| grep VertEdgeScroll VertEdgeScroll = 1
si nota che è abilitato.
Alcune proprità interessanti del driver synaptics
Oltre allo scrolling verticale il driver synaptics mette a disposizione un sacco di proprietà tra cui:
* I TapButton * I CornerButton
I TapButton servono per dire al driver quali pulsanti deve considerare come premuti quando si 'clicca' nel centro del touchpad, ad esempio con:
$> synclient TapButton1=1 TapButton2=2 TapButton3=3
diciamo al driver, rispettivamente, che:
- quando clicchiamo nel centro del touchpad con un dito, si deve comportare come se fosse stato premuto il 1° pulsante (generalmente il tasto sinistro).
- quando clicchiamo nel centro del touchpad con due dita, si deve comportare come se fosse stato premuto il 2° pulsante.
- quando clicchiamo nel centro del touchpad con tre dita, si deve comportare come se fosse stato premuto il 3° pulsante.
I CornerButton servono per dire al driver quali pulsanti deve considerare come premuti quando si 'clicca' negli angoli del touchpad, ad esempio con:
$> synclient RTCornerButton=2 RBCornerButton=3
diciamo al driver, rispettivamente, che:
- quando clicchiamo nell'angolo in alto a destra (RT - right top) del touchpad deve comportarsi come se fosse stato premuto il 2° pulsante.
- quando clicchiamo nell'angolo in basso a destra (RB - right bottom) del touchpad deve comportarsi come se fosse stato premuto il 3° pulsante.
Un file per hal di esempio
Una volta trovata la giusta configurazione per il nostro touchpad a runtime grazie a synclient, possiamo renderla attiva ad ogni avvio del server xorg modificando il file /etc/hal/fdi/policy/11-x11-synaptics.fdi.
Ad esempio il mio file contiene:
<?xml version="1.0" encoding="ISO-8859-1"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.touchpad"> <merge key="input.x11_driver" type="string">synaptics</merge> <merge key="input.x11_options.SHMConfig" type="string">true</merge> <merge key="input.x11_options.VertEdgeScroll" type="string">true</merge> <merge key="input.x11_options.MaxTapTime" type="string">180</merge> <merge key="input.x11_options.FingerLow" type="string">25</merge> <merge key="input.x11_options.FingerHigh" type="string">30</merge> <merge key="input.x11_options.TapButton1" type="string">1</merge> <merge key="input.x11_options.TapButton2" type="string">3</merge> <merge key="input.x11_options.TapButton3" type="string">2</merge> <merge key="input.x11_options.RTCornerButton" type="string">3</merge> <merge key="input.x11_options.RBCornerButton" type="string">2</merge> </match> </device> </deviceinfo>
Si noti come tutte le chiavi per il driver synaptics iniziano con 'input.x11_options.' mentre il nome delle proprietà ('SHMConfig', 'VertEdgeScroll' 'MaxTapTime', etc..) sono prese direttamente dal manuale del driver (synaptics(4)) e sono le stesse che abbiamo passato al comando synclient.
Errori
hal-find-by-capability --capability input.touchpad non mostra niente
Questo tipo di errore può essere causato dal passaggio del parametro proto=imp al modulo del kernel psmouse. Per ovviare a questo problema, assicuratevi che nel file:
/etc/modprobe.d/psmouse.conf
sia commentata la riga:
# options psmouse proto=imps
NOTA
Alcuni utenti per essere sicuri di non fare danni usano generalmente creare dei file di backup. Se volete fare un backup di questo file prima di modificarlo, fate attenzione a non farlo nella directory /etc/modprobe.d/, altrimenti l'opzione viene passata ugualmente. Per verificare che il parametro non sia stato passato, potete scaricare il modulo e ricaricarlo come segue:
#> modprobe -r psmouse #> modprobe -v psmouse
facendo attenzione che il secondo comando non mostri qualcosa del tipo:
proto=imps
Se lo mostra, allora vuol dire che qualche altro file nella directory su citata ha questa opzione non commentata.
Conclusione
Grazie alla lettura di questo piccolo wiki dovremmo essere in grado di capire:
- come avverrà la futura configurazione dei server xorg (grazie ad hal e dbus)
- e quindi come poter intervenire per modificarla
Se notate qualche incorrettezza scrivetemi pure, generalmente accetto ben volentieri critiche o proposte di matrimonio :)
targzeta