Giocare con wsmoused(8)

Da Wiki di NetBSD Italia.

Questo articolo non rispetta le linee guida per i contenuti per tanto necessita di essere wikificato (ovvero reso conforme sulla base di queste regole). Offri il tuo contributo per migliorare questo wiki secondo le convenzioni di NetBSD-it.

In questo breve articolo impareremo come grazie a NetBSD è possibile recuperare hardware inutilizzato e considerato da certi sistemi operativi obsoleto, in particolare un vecchio mouse seriale.

Il mouse seriale però verrà utilizzato in una maniera non convenzionale, cioè non lo utilizzeremo come un mouse ma come una specie di telecomando, tutto grazie a wsmoused(8)!


Indice

La nostra situazione

L'hardware dimenticato

Che con NetBSD possiamo recuperare vecchio hardware dimenticato in soffitta non è di certo una novità.

Un altro mouse?

Nel nostro caso recupereremo un mouse seriale. Nella macchina in cui aggiungeremo il mouse però è presente già un altro mouse. Due mouse nella stessa macchina sono inutili perciò utilizzeremo il mouse mappando ai tasti diverse azioni.

Requisiti

Tutto ciò di cui avremmo bisogno è già presente nel sistema base e anche nel kernel GENERIC (assiguratevi di avere abilitato com*).

Riguardo all'hardware utilizzeremo un mouse seriale, e utilizzeremo soltanto i due tasti (perciò la pallina sarà anch'essa un optional).


Configurazione

moused(8)

Per gestire il mouse seriale abbiamo bisogno di utilizzare moused(8). moused(8) si occuperà di virtualizzare il mouse seriale in modo da essere trattato come un qualsiasi wsmouse(4).

Senza perderci in discorsi, iniziamo subito con un esempio concreto!

Dove è il mio mouse?

Per utilizzare moused(8) abbiamo bisogno di specificare la porta a cui è collegato il nostro mouse seriale. La porta dovrebbe essere una tty*, aiutandoci con un pò di shell scripting proviamo a localizzare il mouse, l'opzione -p serve per specificare la porta, mentre l'opzione -i serve per ottenere informazioni riguardanti quel mouse:

# for p in $(seq 0 3); do moused -p /dev/tty0${p} -i all; done
/dev/tty00 serial microsoft generic
moused: cannot determine mouse type on /dev/tty01
/dev/tty01 serial unknown generic
moused: unable to open /dev/tty02: Device not configured
moused: unable to open /dev/tty03: Device not configured

Utilizziamo il mouse nella maniera classica

Esaminando l'output prodotto possiamo notare che il mouse è il device /dev/tty00 ed è un mouse microsoft, proviamo perciò se tutto funziona, utilizzandolo ora (temporaneamente) come un qualsiasi altro mouse:

# moused -p /dev/tty00 -t microsoft

Rendere permanente l'utilizzo di moused(8)

Tramite rc.conf(5) possiamo rendere permanenti le operazioni fatte poco fa:

[...]
moused=YES      moused_flags="-p /dev/tty00 -t microsoft"
[...]


Utilizzo

A questo punto ad ogni avvio possiamo utilizzare il mouse come un qualsiasi mouse, volendo anche contemporaneamente ad altri mouse. Ma questo non è quello che vogliamo.

Che cosa vogliamo farci?

Noi vogliamo mappare ai due tasti del mouse diverse azioni. Come esempio vogliamo che alla pressione del tasto sinistro si spegne il monitor e con la pressione del tasto destro si riaccenda. Per raggiungere questo scopo utilizzeremo sysutils/vbetool.

Rendere il mouse un non-mouse

Vogliamo utilizzare solo i due tasti del mouse, perciò dobbiamo assegnare al nostro mouse un altro wsmux(4). Spulciando la man page wsmux(4) che /dev/wsmux0 è dedicato ai mouse e /dev/msmux1 alle tastiere possiamo assegnare /dev/wsmux2 ai non-mouse, quindi utilizziamo l'opzione -W di moused(8) editando rc.conf:

[...]
moused=YES      moused_flags="-p /dev/tty00 -t microsoft -W /dev/wsmuxctl2 -3"
[...]

Abbiamo aggiunto anche l'opzione -3 in modo tale da simulare il terzo tasto quando premiamo contemporaneamente due tasti.

Ora riavviamo moused:

# /etc/rc.d/moused restart

Se le nostre configurazioni sono giuste ora il puntatore del mouse non dovrebbe muoversi più (come abbiamo detto sopra infatti i mouse devono avere come multiplexor /dev/wsmux0 mentre noi utilizziamo /dev/wsmux2).

Assegnare le azioni

Finalmente possiamo assegnare ad ogni tasto del mouse un apposita azione. Per fare ciò dobbiamo utilizzare wsmoused(8).

wsmoused(8)?

wsmoused(8) serve per configurare varie funzionalità del mouse, ad esempio gestire la sua sensibilità, invertire i tasti e nel nostro caso assegnare azioni ogni volta che si preme un certo tasto.

Per configurarlo avremo bisogno di creare il suo file di configurazione: wsmoused.conf(5).

Messa a punto di wsmoused.conf(5)

Oltre ad una lettura (consigliata) di wsmoused.conf(5) si può prendere ispirazione dal file di esempio /usr/share/examples/wsmoused/wsmoused.conf, comunque ecco il nostro file (tramite i commenti cercheremo di rendere il file più esplicativo possibile, notare che la sintassi è già esplicativa di per se :-)):

# wsmoused.conf -- NetBSD Italia
#
# Nel seguente esempio mapperemo il tasto sinistro del mouse in modo tale da
# spegnere il monitor ed il tasto destro per accenderlo. Per funzionare
# correttamente abbiamo bisogno di sysutils/vbetool.
#
# Per maggiori informazioni si prega di consultare wsmoused(8) e
# wsmoused.conf(5), grazie!

# Abbiamo un non-mouse attaccato al terzo multiplexor
device = "/dev/wsmux2";

# Siamo interessati solo ai tasti
modes = "action";

# Alla pressione del tasto sinistro (0) spegne il monitor, e a quello del
# tasto destro (2) lo accende. Inoltre se il terzo tasto (1) viene premuto
# spegne il monitor finché non rilasciamo il tasto.
# Se l'utilità non è sul PATH /bin, /sbin, /usr/bin o /usr/sbin abbiamo
# bisogno di specificare tutto il percorso (vedere la variabile PATH su
# /etc/rc)
mode action {
	button_0_down = "/usr/pkg/sbin/vbetool dpms off";
	button_1_down = "/usr/pkg/sbin/vbetool dpms off";
	button_1_up = "/usr/pkg/sbin/vbetool dpms on";
	button_2_down = "/usr/pkg/sbin/vbetool dpms on";
}

NOTA: si consiglia di provare vbetool(1) prima di salvare queste modifiche. Ricordiamo inoltre che quando il monitor è spento per riaccenderlo si avrà bisogno di un "vbetool dpms on" perciò si consiglia di eseguire qualche cosa di questo tipo per testare che tutto funziona:

# vbetool dpms off && sleep 5 && vbetool dpms on

Se c'è qualche problema si può optare per x11/xset, ci si può servire infatti di "xset dpms force on" e "xset dpms force off".

Ultimi ritocchi

Ora controlliamo che tutto funzioni:

# /etc/rc.d/wsmoused onestart
[ click del mouse sinistro, il monitor si spegne ]
[ click del mouse destro, il monitor si accende ]

Se funziona bene possiamo aggiungere wsmoused a /etc/rc.conf:

[...]
wsmoused=YES
[...]

Così ad ogni avvio possiamo utilizzare il mouse per bloccare lo schermo!


Conclusioni

In questo tutorial abbiamo visto come grazie a NetBSD possiamo utilizzare vecchi hardware dimenticati in soffitta o in garage e metterli a nuovo rendendoli anche molto utili, ad esempio per bloccare uno schermo.

Con un pò di fantasia si può utilizzare il mouse in maniera impensabile grazie a wsmoused(8)! Altri modi pazzi sono dati come esercizio al lettore, buon divertimento con moused(8) e wsmoused(8)!

Strumenti personali