sabato 5 luglio 2014

Quando l'ufficio ti insegue (ovvero una storia di X11 e trasparenza al network)

Oggi mi è capitato di correggere un bug sul programma che sto sviluppando per lavoro, una applicazione web che staimo sviluppando in Java con Eclipse. Siccome il programma è proprietario e non è mio, ho mascherato ogni informazione relativa. Ma non è di questo che vi volevo parlare.Ho nascosto anche nomi e indirizzi di terzi.

Date un occhiata alla foto. Vi dico subito che nessuna delle tastiere che vedete è in uso, sto usando una cherry con tasti custom che non rientra nell'immagine, ci sono due computer ed un televisore. Non stupisce nessuno che il televisore sopra il portatile sia in multiheading con il portatile. Anche perché lavorare con più di un monitor è una cosa oggidì normalissima quando si programma. 

Una cosa che invece non si vede è che uso la stessa tastiera e lo stesso mouse per ambedue i computer senza usare hardware esterno. Un'altra cosa che non si vede è che il programma con cui leggo la posta (è sullo schermo dell'iMac Lamp) sta girando in realtà sul portatile in basso a sinistra. Sono due cose che accadono grazie alla "trasparenza al network" di X11, l'ambiente grafico di Unix e di GNU/Linux:
ho detto all'iMac (cyrano) che il suo server X11 -quello che offre alle applicazioni "il servizio di visualizzazione"- doveva accettare le richieste di connessione che venivano dal mio portatile (quigley). Poi ho detto al programma che stava girando su quigley "apri una nuova finestra per leggere la posta su cyrano".
Ma a questo punto avrei potuto usare il programma di posta solo con la tastiera ed il mouse di cyrano. Qui ho fatto entrare in campo un altro programmino che gira sul portatile, chiamato x2x. A x2x ho detto che quando "sentiva che il mouse usciva dalla destra del monitor" doveva fare in modo che fosse il server che gira su cyrano - e non quello che gira sul portatile - a venir informato degli spostamenti del mouse e delle pressioni dei tasti sulla tastiera.
Analogamente, quando il programma "sente che il mouse esce dalla parte sinistra dello schermo di cyrano" deve tornare a mandare a quigley sia le informazioni sui movimenti del mouse che quelle sui tasti e pulsanti premuti.
In pratica cyrano presta il suo schermo a quigley.Non è una soluzione priva di problemi, ma i vantaggi superano i problemi, sopratutto quando sai evitare questi ultimi.

Qualche dettaglio tecnico in più (per chi è interessato)

Ecco qui qualche dettaglio tecnico in più. 

Come prima cosa ho modificato il file /etc/X11/xserrverrc su quigley togliendo l'opzione "-nolisten tcp" dalla riga di comando di X. Questa opzione ha senso (molto senso?) se non si intende usare la trasparenza al network in quanto ne impedisce l'uso e quindi ne impedisce usi indesiderati e nocivi. Ma io 
  • ho bisogno della trasparenza al network
  • sono conscio dei rischi ed ho preso precauzioni per evitarli
  • ssh -X non funziona per quello che voglio fare io (vedi sezione "Perché non ho usato ssh" a fine post
  • so cosa faccio.
Fatta questa modifica si riavvia X (se è attivo) e si può usare al trasparenza al network. 

Per fare si che cyrano accettasse le connessioni da quigley avevo due strade (anzi 3, ma una come ho detto non l'ho voluta seguire).
La prima era usare il comando "xhost" nella forma "xhost quigley" che assegna i permessi al solo quigley. MAI, e ripeto MAI, usare la forma "xhost +" che permette la connessione a tutti i computer del pianeta che vedono il vostro. La seconda era ricopiare il file $HOME/.Xauthority da quigley a cyrano CON UN NUOVO nome - non dovete sovrasrcivere quello esistente! - e successivamente si dare su cyrano il comando "xauth merge copiaDiXauthority". Da anni uso il secondo metodo, più sicuro.

A questo punto posso avviare applicazioni su quigley ed avere la visualizzazione su cyrano o usando un'opzione che è comune a molte applicazioni per X (-d o -display o --display) oppure settando oppoprtunamente la variabile d'ambiente $DISPLAY. Alcuni programmi sono particolarmente ben fatti e permettono di scegliere il display su cui aprire una nuova finestra.

Rimane il comando per "condividere mouse e tastiera", ed è il vecchio caro x2x su qugley. La linea di comando usata è stata, data la situazione, "x2x -to cyrano:0 -from :0.0 -east" (il nord è l'alto, est destra, oves sinistra e sud è basso).

Perché non ho usato ssh

Per prima cosa non ho voluto usare "ssh -X",. il più sicuro, in quanto questo permette di avere "in locale" il display grafico di un programma che gira su una macchina "remota". In questo caso ho bisogno di comunicare con il server X di una macchina "remota", la direzione è opposta. 

Per usarlo avrei dovuto usare "ssh -X quigley" su cyrano, quindi dare il comando "echo $DISPLAY" ed usarne l'output nella linea di comando di x2x: "x2x -to `echo $DISPLAY` -from :0.0 -east". E questo usando o la tastiera di cyrano in posizione scomoda o un'ulteriore connessione ssh.


Nessun commento:

Posta un commento