Multi puntatore su Ubuntu 10.4: ecco come

mpx-running

mpx-runningTempo fa ebbi modo di dare un’occhiata al progetto MPX per un cliente. La cosa non andò avanti ma scoprii questo interessante progetto.

Come si legge sulla prima pagina del sito del progetto, MPX cerca di implementare una modifica del server X.Org (che gestisce la grafica sulla maggior parte dei sistemi GNU/Linux) in modo da supportare più puntatori indipendenti tutti però connessi allo stesso computer. In pratica, se ad esempio si collegano 6 mouse ad un PC si potrebbero usare fino a 6 puntatori contemporaneamente!

Questo permetterebbe di poter fare molte cose interessanti vista la sempre crescente domanda di interazione uomo/macchina che c’è al giorno d’oggi.

A quei tempi però il progetto era sempre in fase embrionale, ed installarlo su di un PC non era affatto banale; occorreva ricompilarsi X… ma ora le cose non stanno più così! Infatti nella ultima release di Ubuntu (la 10.4) il supporto è già integrato, sebbene non abilitato di default (vedremo più avanti il perché).

Se avete una Ubuntu 10.4 e almeno due mouse a disposizione potrete ottenere anche voi i due puntatori che ho fotografato sopra.

Ecco come.

Per mostrarvi i comandi userò il mio portatile al quale ho sempre collegato un mouse USB; l’altro mouse è ovviamente il touchpad che c’è su ogni portatile.

Con il comando xinput si chiede al sistema di visualizzare la configurazione dei dispositivi di input collegati. Io ottengo:

$ xinput list
? Virtual core pointer                 id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer       id=4    [slave  pointer  (2)]
?   ? HID 062a:0001                    id=11   [slave  pointer  (2)]
?   ? SynPS/2 Synaptics TouchPad       id=14   [slave  pointer  (2)]
?   ? Macintosh mouse button emulation id=15   [slave  pointer  (2)]
? Virtual core keyboard                id=3    [master keyboard (2)]
? Virtual core XTEST keyboard          id=5    [slave  keyboard (3)]
? Power Button                         id=6    [slave  keyboard (3)]
? Video Bus                            id=7    [slave  keyboard (3)]
? Sleep Button                         id=8    [slave  keyboard (3)]
? HID 04d9:1203                        id=9    [slave  keyboard (3)]
? HID 04d9:1203                        id=10   [slave  keyboard (3)]
? CNF7246                              id=12   [slave  keyboard (3)]
? AT Translated Set 2 keyboard         id=13   [slave  keyboard (3)]
? Asus Laptop extra buttons            id=16   [slave  keyboard (3)]

Come si vede, sul mio sistema il touchpad è identificato dalla stringa SynPS/2 Synaptics TouchPad – id=14 e il mouse USB da HID 062a:0001 – id id=11, entrambi collegati al puntatore principale denominato Virtual core pointer. Questo fa sì che io possa controllare il puntatore sia con il touchpad o con il mouse USB.

E’ sufficiente allora creare un nuovo puntatore (chiamiamolo ad esempio Auxiliary) ed attaccarci il touchpad. In questo modo, con il mouse controllerò sempre il puntatore principale mentre, con il touchpad, controllerò il puntatore secondario.

Vediamo come.

Primo passo, creiamo il nuovo puntatore:

$ xinput create-master Auxiliary
$ xinput list
? Virtual core pointer                 id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer       id=4    [slave  pointer  (2)]
?   ? HID 062a:0001                    id=11   [slave  pointer  (2)]
?   ? SynPS/2 Synaptics TouchPad       id=14   [slave  pointer  (2)]
?   ? Macintosh mouse button emulation id=15   [slave  pointer  (2)]
? Virtual core keyboard                id=3    [master keyboard (2)]
? Virtual core XTEST keyboard          id=5    [slave  keyboard (3)]
? Power Button                         id=6    [slave  keyboard (3)]
? Video Bus                            id=7    [slave  keyboard (3)]
? Sleep Button                         id=8    [slave  keyboard (3)]
? HID 04d9:1203                        id=9    [slave  keyboard (3)]
? HID 04d9:1203                        id=10   [slave  keyboard (3)]
? CNF7246                              id=12   [slave  keyboard (3)]
? AT Translated Set 2 keyboard         id=13   [slave  keyboard (3)]
? Asus Laptop extra buttons            id=16   [slave  keyboard (3)]
? Auxiliary pointer                    id=17   [master pointer  (18)]
?   ? Auxiliary XTEST pointer          id=19   [slave  pointer  (17)]
? Auxiliary keyboard                   id=18   [master keyboard (17)]
? Auxiliary XTEST keyboard             id=20   [slave  keyboard (18)]

E quindi attacchiamoci il touchpad:

$ xinput reattach 14 “Auxiliary pointer”
$ xinput list
? Virtual core pointer                 id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer       id=4    [slave  pointer  (2)]
?   ? HID 062a:0001                    id=11   [slave  pointer  (2)]
?   ? Macintosh mouse button emulation id=15   [slave  pointer  (2)]
? Virtual core keyboard                id=3    [master keyboard (2)]
? Virtual core XTEST keyboard          id=5    [slave  keyboard (3)]
? Power Button                         id=6    [slave  keyboard (3)]
? Video Bus                            id=7    [slave  keyboard (3)]
? Sleep Button                         id=8    [slave  keyboard (3)]
? HID 04d9:1203                        id=9    [slave  keyboard (3)]
? HID 04d9:1203                        id=10   [slave  keyboard (3)]
? CNF7246                              id=12   [slave  keyboard (3)]
? AT Translated Set 2 keyboard         id=13   [slave  keyboard (3)]
? Asus Laptop extra buttons            id=16   [slave  keyboard (3)]
? Auxiliary pointer                    id=17   [master pointer  (18)]
?   ? SynPS/2 Synaptics TouchPad       id=14   [slave  pointer  (17)]
?   ? Auxiliary XTEST pointer          id=19   [slave  pointer  (17)]
? Auxiliary keyboard                   id=18   [master keyboard (17)]
? Auxiliary XTEST keyboard             id=20   [slave  keyboard (18)]

Bingo! Il secondo puntatore appare e riesco a controllarlo con il touchpad! :)

Ma non solo… se ora attacco la tastiera del mio portatile al secondo puntatore (Auxiliary pointer) posso fare in modo di scrivere su due terminali diversi semplicemente cambiando tastiera! Basta infatti osservare dai listati sopra che la tastiera del portatile è denominata con AT Translated Set 2 keyboard – id=13, quindi basta dare:

$ xinput reattach 13 “Auxiliary keyboard”
$ xinput list
? Virtual core pointer                 id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer       id=4    [slave  pointer  (2)]
?   ? HID 062a:0001                    id=11   [slave  pointer  (2)]
?   ? Macintosh mouse button emulation id=16   [slave  pointer  (2)]
? Virtual core keyboard                id=3    [master keyboard (2)]
? Virtual core XTEST keyboard          id=5    [slave  keyboard (3)]
? Power Button                         id=6    [slave  keyboard (3)]
? Video Bus                            id=7    [slave  keyboard (3)]
? Sleep Button                         id=8    [slave  keyboard (3)]
? HID 04d9:1203                        id=9    [slave  keyboard (3)]
? HID 04d9:1203                        id=10   [slave  keyboard (3)]
? CNF7246                              id=12   [slave  keyboard (3)]
? Asus Laptop extra buttons            id=15   [slave  keyboard (3)]
? Auxiliary pointer                    id=17   [master pointer  (18)]
?   ? SynPS/2 Synaptics TouchPad       id=14   [slave  pointer  (17)]
?   ? Auxiliary XTEST pointer          id=19   [slave  pointer  (17)]
? Auxiliary keyboard                   id=18   [master keyboard (17)]
? AT Translated Set 2 keyboard         id=13   [slave  keyboard (18)]
? Auxiliary XTEST keyboard             id=20   [slave  keyboard (18)]

Perfetto! Ora posso lavorare normalmente su di un monitor (io ne ho due) e controllare la posta su di un altro senza muovere nessun puntatore ma, semplicemente, cambiando tastiera! Fichissimo! :)

Le belle notizie però finiscono quindi, c’è da dire infatti che questo supporto è (purtroppo) ancora in forte sviluppo e non ancora ben supportato da GNOME (o da altri window manager), quindi non usabile al 100% (ad esempio non è ancora possibile muovere due finestre contemporaneamente ed, alcune volte, il puntatore secondario scompare…) ecco perché il supporto non è abilitato di default; rimane però una buona dimostrazione di quello che ci aspetta per il futuro sui sistemi Ubuntu/Linux!

Su Rodolfo Giometti

Ingegnere informatico libero professionista ed esperto GNU/Linux offre supporto per: - device drivers; - sistemi embedded; - sviluppo applicazioni industriali per controllo automatico e monitoraggio remoto; - corsi di formazione dedicati. Manutentore del progetto LinuxPPS (il sottosistema Pulse Per Second di Linux) contribuisce attivamente allo sviluppo del kernel Linux con diverse patch riguardanti varie applicazioni del kernel e dispositivi (switch, fisici di rete, RTC, USB, I2C, network, ecc.). Nei 15+ anni di esperienza su Linux ha lavorato con le piattaforme x86, ARM, MIPS & PowerPC.

Lascia un commento

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi