Manovrare X da remoto: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (aggiunto stub)
(typos, vocali accentate, formattazione)
Riga 3: Riga 3:
Questa guida nasce dalla discussione [http://www.debianizzati.org/component/option,com_joomlaboard/Itemid,29/func,view/catid,19/id,14487/ Manovrare X da remoto] apparsa sul forum di Debianizzati.Org
Questa guida nasce dalla discussione [http://www.debianizzati.org/component/option,com_joomlaboard/Itemid,29/func,view/catid,19/id,14487/ Manovrare X da remoto] apparsa sul forum di Debianizzati.Org


Ogni home o client system software che si rispetti ha un 'interfaccia grafica(GUI). Microsoft la include nel suo systema, o kernel che dir si voglia. Le ditribuzioni GNU/Linux la includono nell'installazione di default. In ogni modo nelle distribuzioni GNU/Linux e POSIX la GUI non e' parte del kernel ma un programma a parte l' "X window system" o semplicemente X. Precisamente X non e' la GUI. ''Xdm'', ''Gdm'', ''Kdm'' sono GUI. X è una struttura che la GUI usa per i suoi scopi. Mentre la GUI gestisce bottoni, finestre, testi ecc. X gestisce applicazioni di piu' basso livello: input di tastiera, mouse,fonts ecc. Molte persone potrebero pensare riguardo per esempio ai termini X-server e X-client al contrario di quello che potrebbe sembrare. Un X server e' una macchina nel network dove e' installato un window manager e dove altre altre macchine, X-clients, ci si possono collegare e gestire finestre, scrivere testi, navigare in rete e che puo' leggere il tuo input. In definitiva cosa un X server "serve" sono finestre e il tuo input da mouse o tastiera.
Ogni home o client system software che si rispetti ha un 'interfaccia grafica(GUI). Microsoft la include nel suo systema, o kernel che dir si voglia. Le ditribuzioni GNU/Linux la includono nell'installazione di default. In ogni modo nelle distribuzioni GNU/Linux e POSIX la GUI non è parte del kernel ma un programma a parte l' "X window system" o semplicemente X. Precisamente X non è la GUI. ''Xdm'', ''Gdm'', ''Kdm'' sono GUI. X è una struttura che la GUI usa per i suoi scopi. Mentre la GUI gestisce bottoni, finestre, testi ecc. X gestisce applicazioni di più basso livello: input di tastiera, mouse,fonts ecc. Molte persone potrebero pensare riguardo per esempio ai termini X-server e X-client al contrario di quello che potrebbe sembrare. Un X server è una macchina nel network dove è installato un window manager e dove altre altre macchine, X-clients, ci si possono collegare e gestire finestre, scrivere testi, navigare in rete e che può leggere il tuo input. In definitiva cosa un X server "serve" sono finestre e il tuo input da mouse o tastiera.


=Configurazione=
=Configurazione=
Il server X di solito viene iniziato da un X Display Manager.Un X display manager e' xdm,gdm,kdm che forniscono svariati X displays locali o remoti specificati in Xservers usando XDMCP come specificato nel file Xaccess.
Il server X di solito viene iniziato da un X Display Manager.Un X display manager è xdm,gdm,kdm che forniscono svariati X displays locali o remoti specificati in Xservers usando XDMCP come specificato nel file Xaccess.
In /etc/X11/xdm/xdm-config commenta :


DisplayManager.requestPort:  0
In <tt>/etc/X11/xdm/xdm-config</tt> commenta:
!DisplayManager.requestPort:  0
 
DisplayManager.requestPort:  0
 
che diventa:
 
!DisplayManager.requestPort:  0
   
   
In /etc/X11/xdm/Xaccess togli il comento a  
In <tt>/etc/X11/xdm/Xaccess</tt> togli il comento a  
 
#*        #any host can get a login window


         #*        #any host can get a login window        
che diventerà:
        *        #any host can get a login window
          
*        #any host can get a login window
 
Questo metterà l'Xserver in broadcast mode che butterà giù una lista di tutti gli Xserver in Willing di accetare di connettersi all'X server.


Questo mettera' l'Xserver in broadcast mode che buttera' giu' una lista di tutti gli Xserver in Willing di accetare di connettersi all'X server.
Se vuoi permettere connesioni solo da parte di certi host che un sezione nello stesso file che si chiama CHOOSER
Se vuoi permettere connesioni solo da parte di certi host che un sezione nello stesso file che si chiama CHOOSER


In /etc/X11/fs/config commenta cosi':
In <tt>/etc/X11/fs/config</tt> commenta così:


#no-listen = tcp
#no-listen = tcp


Poi cambia in /etc/X11/XF86Config-4
Poi cambia in /etc/X11/XF86Config-4
FontPath        "unix/:-1"
FontPath        "unix/:-7100"  
FontPath        "unix/:-1"
FontPath        "unix/:-7100"  


Questo per indicare 7100 come porta per FontPath in UDP
Questo per indicare 7100 come porta per FontPath in UDP.


=Utilizzo=
=Utilizzo=
Se usi un sistema GNU/Linux probabilmente hai X gia' installato. L'X server puo' essere lanciarlo con un semplice:
Se usi un sistema GNU/Linux probabilmente hai X già installato. L'X server può essere lanciarlo con un semplice:
<pre>
<pre>
# X &
# X &
</pre>
</pre>
Questo fara' partire un server X in background. Comparira' uno schermo con lo sfondo grigio e un X come puntatore del mouse che puoi muovere per lo schermo... niente di speciale ne' di carino da vedere, .... inutile.  
Questo farà partire un server X in background. Comparirà uno schermo con lo sfondo grigio e un X come puntatore del mouse che puoi muovere per lo schermo... niente di speciale di carino da vedere .... inutile.  
Il comando di sopra quindi inizia un X server, che semplicemente sta li' in attesa di un client che si collega come per esempio ''xterm'' che apre una finestra ed esegue una shell. Ci sono molte opzioni da riga di comando che aprono finestre di diversa grandezza e posizione ma tutto cio' non sarebbe molto pratico ne' di facile utilizzo.
 
Il comando di sopra quindi inizia un X server, che semplicemente sta in attesa di un client che si collega come per esempio ''xterm'' che apre una finestra ed esegue una shell. Ci sono molte opzioni da riga di comando che aprono finestre di diversa grandezza e posizione ma tutto ciò non sarebbe molto pratico nè di facile utilizzo.
 
C'è bisogno di un ''X-client'' e di un ''window-manager''.
 
Un window manager puo dare quell'usabilità interattiva alla quale siamo abituati. Un window manager in GNU/Linux potrebbe essere mwm o fvwm che possono essere lanciati con un
 
mwm -display :0 
 
o
 
fvwm -display :0
 
una volta che è partito un window-manager muovere e gestire finestre diventa interattivo e lanciare applicazioni diventa più facile. Il <code>-display :0</code> per aprire finestre sull X-server. Un display non è nient'altro che uno schermo al quale collegarsi. Di default quando X parte lui inizia un display sul 'canalè :0 della macchina locale.
 
Quando parte una sessione X automaticamente va a piazzare il display al quale è collegata nella variabile $DISPLAY. Se non dovesse essere stata dichiarata alcuna variabile di default X si andra a piazzare sul display <tt>:0.0</tt>.
 
In ogni caso per lanciare X dalla console è un sufficiente lanciare uno ''startx'', che inizierà un X-server su display <tt>:0</tt>.
 
Molti X-server specialmente nel mondo GNU/Linux usano ''xdm'' o ''gdm'' o ''kdm''. Xdm stà per "X Display Manager"; questi hanno lo scopo di accogliere l'utente con un X-client che è un login grafico chiamato anche "greeter". Una volta che hai introdotto nome utente e password non solo un window manager ma un intero ambiente desktop si presenta dinanzi ai tuoi occhi.


C'e' bisogno di un ''X-client'' e di un ''window-manager''.
Un window-manager puo dare quell'usabilita' interattiva alla quale siamo abituati. Un window manager in GNU/Linux potrebbe essere mwm o fvwm che possono essere lanciati con un ''mwm -display :0''  o ''fvwm -display :0'' una volta che e' partito un window-manager muovere e gestire finestre diventa interattivo e lanciare applicazioni diventa piu' facile. Il ''-display :0'' per aprire finestre sull X-server. Un display non e' nient'altro che uno schermo al quale collegarsi. Di default quando X parte lui inizia un display sul 'canale' :0 della macchina locale.
Quando parte una sessione X automaticamente va a piazzare il display al quale e' collegata nella variabile $DISPLAY. Se non dovesse essere stata dichiarata alcuna variabile di default X si andra a piazzare sul display '':0.0''.
In ogni caso per lanciare X dalla console e' un sufficiente lanciare uno ''startx'', che iniziera' un X-server su display '':0''.
Molti X-server specialmente nel mondo GNU/Linux usano ''xdm'' o ''gdm'' o ''kdm''. Xdm sta' per "x display menager"; questi hanno lo scopo di accogliere l'utente con un X-client che e' un login grafico chiamato anche "greeter". Una volta che hai introdotto nome utente e password non solo un window manager ma un intero ambiente desktop si presenta dinanzi ai tuoi occhi.
Ritornado al discorso client server , sul server lancia startx,assicurati ci sia un window manager attivo e poi da un xterm lancia il comando:
Ritornado al discorso client server , sul server lancia startx,assicurati ci sia un window manager attivo e poi da un xterm lancia il comando:


<pre> $ xhost add 192.168.0.2 (ip del client)</pre>
<pre> $ xhost add 192.168.0.2 (ip del client)</pre>


Questo permettera' connessioni dalla macchina 192.168.0.2.
Questo permetterà connessioni dalla macchina 192.168.0.2.
Sul client invece digita :
Sul client invece digita :
<pre>
<pre>
$ xterm -display 192.168.0.1(ip Xserver):0
$ xterm -display 192.168.0.1(ip Xserver):0
</pre>
</pre>
Sul server X adesso dovresti vedere un finestra di xterm. E' successo che un X-client si e' collegato ad un xserver aprendo una finestra di xterm li'.
Sul server X adesso dovresti vedere un finestra di xterm. &Egrave; successo che un X-client si è collegato ad un xserver aprendo una finestra di xterm .


Riguardo la sicurezza il protocollo X e' apllicabile solo in ambienti fidati Lan e non e' cosigliabile avere sessioni X attraverso la grande rete. Se vuoi utilizzare X attraverso la rete e' consigliabile incanalare il protocollo X in un protocollo sicuro come ssh. In ogni caso ci sono anche altri modi in aggiunta ad ssh che puoi utilizzare per proteggere le tue macchine uno di questi e'xhost ma anche meglio con un programma xauth utilizzato per autenticare i clients: ''Xauth'' puo' funzionare in vari modi: uno di essi e' attraverso l'utilizzo di un cookie. Un X-client per collegarsi ad un X-server ha bisogno di conoscere una sequenza di dati casuali generati dal server conosciuto come cookie che funziona in maniera molto simile ad un session password: se il cookie trasmesso dal client non corrisponde a quello del server, Xserver rifiutera' la connessione. Xserver di default e' in ascolto sulla porta 6000 per display:0 , 6001 per display:01  ecc.
Riguardo la sicurezza il protocollo X è apllicabile solo in ambienti fidati Lan e non è cosigliabile avere sessioni X attraverso la grande rete. Se vuoi utilizzare X attraverso la rete è consigliabile incanalare il protocollo X in un protocollo sicuro come ssh. In ogni caso ci sono anche altri modi in aggiunta ad ssh che puoi utilizzare per proteggere le tue macchine uno di questi è xhost ma anche meglio con un programma xauth utilizzato per autenticare i clients: ''Xauth'' può funzionare in vari modi: uno di essi è attraverso l'utilizzo di un cookie. Un X-client per collegarsi ad un X-server ha bisogno di conoscere una sequenza di dati casuali generati dal server conosciuto come cookie che funziona in maniera molto simile ad un session password: se il cookie trasmesso dal client non corrisponde a quello del server, Xserver rifiuterà la connessione. Xserver di default è in ascolto sulla porta  


Programmi come xdm , gdm o kdm sono demoni che vanno in background, sono soliti essere iniziati da init al boot e sono sempre in attivita'. Si occupano di iniziare sessioni X-server se necessario, del login grafico, preparano i cookies di xauth che servono per autenticare i clients e fanno partire il programma adatto per ciascun desktop e cosi' via'.  
* 6000 per il display :0
Xdm puo' essere configurato per accettare richieste XDMCP dal network. Questi sono speciali pacchetti UDP che un xserver trasmette da porta 177 per richiedere login remoti. Quando un Xserver richiede di collegarsi ad un altra macchia con xdm allora bisogna lanciare l'X-server con opzioni "-query" o "-broadcast". L'opzione "-query" viene usata quando X-server deve lanciare un richiesta XDMCP ad una macchina in particolare, invece "-broadcast" la trasmette a tutte le macchine nel network.
* 6001 per display:01 
''ecc.''
 
Programmi come xdm , gdm o kdm sono demoni che vanno in background, sono soliti essere iniziati da init al boot e sono sempre in attività. Si occupano di iniziare sessioni X-server se necessario, del login grafico, preparano i cookies di xauth che servono per autenticare i clients e fanno partire il programma adatto per ciascun desktop e così via.  
 
Xdm può essere configurato per accettare richieste XDMCP dal network. Questi sono speciali pacchetti UDP che un xserver trasmette da porta 177 per richiedere login remoti. Quando un Xserver richiede di collegarsi ad un altra macchia con xdm allora bisogna lanciare l'X-server con opzioni "-query" o "-broadcast". L'opzione "-query" viene usata quando X-server deve lanciare un richiesta XDMCP ad una macchina in particolare, invece "-broadcast" la trasmette a tutte le macchine nel network.
<pre>
<pre>
X -query 192.168.1.2
X -query 192.168.1.2
Riga 65: Riga 93:
X -broadcast
X -broadcast
</pre>
</pre>
Come detto pocanzi X puo' essere usato attraverso la grande rete ma non senza alcune contromisure.Una di questa e' di usare un tunnel ssh , affinche' funzioni va' settata l'opzione X11Forwarding a yes in ''/etc/ssh/sshd_config''.
Come detto pocanzi X può essere usato attraverso la grande rete ma non senza alcune contromisure.Una di questa è di usare un tunnel ssh , affinchè funzioni settata l'opzione X11Forwarding a yes in ''/etc/ssh/sshd_config''.
 
Fa partire un X-server con startx sulla macchina locale , poi in xterm collegherati alla macchina remota usando ssh con il seguente comando:
Fa partire un X-server con startx sulla macchina locale , poi in xterm collegherati alla macchina remota usando ssh con il seguente comando:
<pre>
<pre>
ssh -X -C user@remotebox
ssh -X -C user@remotebox
</pre>
</pre>
Dove "user" e' il tuo user code. Dopo esserti collegato puoi lanciare programmi X-client e questi li vedrai sulla tua macchina locale. Quando ssh si collega a un sshd usando l'opzione -X, l'sshd prepara un "virtual" X-server su di un display col numero piu' alto disponibile (di solito il 10)
Dove "user" è il tuo user code. Dopo esserti collegato puoi lanciare programmi X-client e questi li vedrai sulla tua macchina locale. Quando ssh si collega a un sshd usando l'opzione -X, l'sshd prepara un "virtual" X-server su di un display col numero più alto disponibile (di solito il 10)
e dopo crea il suo authentication cookie per la sessione.     
e dopo crea il suo authentication cookie per la sessione.     
Quando un X-client sulla stessa macchina del sshd server si connette al display 10, lo pseudo sshd X-server convalida l'X-client usando il suo cookie, cripta la connessione e trasmette la richiesta all' ssh client sulla tua macchina. L'ssh client poi autentica la richiesta al vero X-server usando il cookie vero e visualizza le richieste dell'X-server. L'opzione "-C" comprime la comunicazione rendendola piu fluida e la decomprime una volta a termine dall'altro lato.   
 
L'uso di X attraverso ssh puo' delle volte causare dei problemi di rendimento e performance. Il protocollo X trasmettera' tutte le righe, tutte le aree anche non necessarie, non c'e' una cache ne' alcun tipo di funzionalita' "trasmetto solo cosa e' cambiato".Significa che se un' area e' stata ridisegnata tre volte il protocollo X trasmettera' tutte le volte che quell'area e' stata cambiata mentre basterebbe trasmettere solo l'ultima delle tre e questo potrebbe risultare un po' dannoso su connessioni lente. Il protocollo VNC e' consapevole di questo aspetto infatti il VNC server aspetta connessioni dai VNC clients e quando il client si connette VNC trasmette l'intero desktop al client. VNC e' sia un vncserver che un x-server. Quando parte si mette in ascolto sulla sua porta tcp la 5900 (+ il numero di display :0.1 x 5901, :02 x 5092 ecc.) in attesa di VNC clients che si collegano. Rimane in ascolto anche sulla socket del display proprio come un X-server ma, invece di trasmettere la richiesta su un monitor, la tiene in memoria per trasmetterla al client. Per configurare VNC c'e' bisogno della presenza di un vncserver da essere lanciato manualmente. Per prima cosa bisogna impostare una vncpasswd che poi verra' usata per il login. Ci si collega con ssh senza l'opzione ''-X'':
Quando un X-client sulla stessa macchina del sshd server si connette al display 10, lo pseudo sshd X-server convalida l'X-client usando il suo cookie, cripta la connessione e trasmette la richiesta all' ssh client sulla tua macchina. L'ssh client poi autentica la richiesta al vero X-server usando il cookie vero e visualizza le richieste dell'X-server. L'opzione "-C" comprime la comunicazione rendendola piu fluida e la decomprime una volta a termine dall'altro lato.  
   
L'uso di X attraverso ssh può delle volte causare dei problemi di rendimento e performance. Il protocollo X trasmetterà tutte le righe, tutte le aree anche non necessarie, non c'è una cache alcun tipo di funzionalità "trasmetto solo cosa è cambiato".Significa che se un' area è stata ridisegnata tre volte il protocollo X trasmetterà tutte le volte che quell'area è stata cambiata mentre basterebbe trasmettere solo l'ultima delle tre e questo potrebbe risultare un dannoso su connessioni lente. Il protocollo VNC è consapevole di questo aspetto infatti il VNC server aspetta connessioni dai VNC clients e quando il client si connette VNC trasmette l'intero desktop al client. VNC è sia un vncserver che un x-server. Quando parte si mette in ascolto sulla sua porta tcp la 5900 (+ il numero di display :0.1 x 5901, :02 x 5092 ecc.) in attesa di VNC clients che si collegano. Rimane in ascolto anche sulla socket del display proprio come un X-server ma, invece di trasmettere la richiesta su un monitor, la tiene in memoria per trasmetterla al client. Per configurare VNC c'è bisogno della presenza di un vncserver da essere lanciato manualmente. Per prima cosa bisogna impostare una vncpasswd che poi verrà usata per il login. Ci si collega con ssh senza l'opzione ''-X'':
<pre>
<pre>
ssh username@hostremoto  
ssh username@hostremoto  
</pre>
</pre>
Poi una volta collegato lanci ''vncserver :1'' che in pratica mette vncserver in ascolto sul display 1 cioe' tcp port 5901.Dopo puoi lanciare il vnc client come per esempio tightvncviewer o vncviewer o svncviewer in questo modo :
Poi una volta collegato lanci ''vncserver :1'' che in pratica mette vncserver in ascolto sul display 1 cioè tcp port 5901.Dopo puoi lanciare il vnc client come per esempio tightvncviewer o vncviewer o svncviewer in questo modo :
<pre>
<pre>
vncviewer hostremoto:1
vncviewer hostremoto:1
</pre>
</pre>
Poi ti verra' chiesta la password e tu introdurrai quella stabilita in precedenza e vuola' eccoti il desktop remoto in locale in tutto il suo splendore.
Poi ti verrà chiesta la password e tu introdurrai quella stabilita in precedenza et voilà eccoti il desktop remoto in locale in tutto il suo splendore.
Questa configurazione presenta dei rischi, porta 5900 e 5800 deve essere aperta nel firewall e la comunicazione e' in chiara. Per criptarla c'e' bisogno di un tunnel ssh. Ancora una volta l'amico ssh ci viene incontro:
Questa configurazione presenta dei rischi, porta 5900 e 5800 deve essere aperta nel firewall e la comunicazione è in chiara. Per criptarla c'è bisogno di un tunnel ssh. Ancora una volta l'amico ssh ci viene incontro:
<pre>
<pre>
ssh -C -L 5901:127.0.0.1:5901 user@remotehost
ssh -C -L 5901:127.0.0.1:5901 user@remotehost
</pre>
</pre>
questo comando mettera' ssh in ascolto sulla porta locale 5901 fino alla porta remota 5901 quella del server vnc. Una volta loggati sulla macchina remota, sulla macchina locale apri vncviewer (un qualsiasi client vnc,o addirittura il browser con java) e lo punti a ''localhost:5901'' vncviewer questo comando ti permettera' di criptare la tua connessione verso il server vnc attraverso un tunnel ssh.
questo comando metterà ssh in ascolto sulla porta locale 5901 fino alla porta remota 5901 quella del server vnc. Una volta loggati sulla macchina remota, sulla macchina locale apri vncviewer (un qualsiasi client vnc,o addirittura il browser con java) e lo punti a ''localhost:5901'' vncviewer questo comando ti permetterà di criptare la tua connessione verso il server vnc attraverso un tunnel ssh.


(G)
= X su altri sistemi operativi =


Molte persone credono che X sia stato progettato solo per GNULinux e unixlike ma in realta' come ogni prodotto unix il primo intento e' la portabilita' verso quanti piu' OS e' possibile .
Molte persone credono che X sia stato progettato solo per GNULinux e unix-like ma in realtà come ogni prodotto unix il primo intento è la portabilità verso quanti più OS è possibile .
Altri ottimi progetti sono il [http://www.ltsp.org Linux terminal Server project] che usa tutte le potenzialita' di X in scenari dove gli utenti sono collegati ad un X server centrale attraverso dei thin client o diskless machine con un grosso abbatimento sui costi e in questo senso come non menzionare il progetto [http://www.progettolazzaro.it/ProgettoLazzaro.htm LazarusNX] che ha come obbiettivo il recupero di hardware obsoleto specialmente nelle scuole italiane,creazione di reti didattiche e laboratori informatici ad alte prestazioni e costi contenuti.
Altri ottimi progetti sono il [http://www.ltsp.org Linux terminal Server project] che usa tutte le potenzialità di X in scenari dove gli utenti sono collegati ad un X server centrale attraverso dei thin client o diskless machine con un grosso abbatimento sui costi e in questo senso come non menzionare il progetto [http://www.progettolazzaro.it/ProgettoLazzaro.htm LazarusNX] che ha come obbiettivo il recupero di hardware obsoleto specialmente nelle scuole italiane,creazione di reti didattiche e laboratori informatici ad alte prestazioni e costi contenuti.
   
   
"C'è una crescente sensibilità verso il reimpiego dell'hardware obsoleto, del suo riutilizzo con finalità sociali, accademiche ma anche di business - si legge in una nota - Immaginiamo una scuola (ma potrebbe essere una qualsiasi organizzazione statale o privata) che abbia un parco computer obsoleto. Con Lazarus-NX queste macchine possono essere riutilizzate su piattaforma Open Source, svincolando l'organizzazione anche dalle spese di licenza tipiche del software proprietario".
''C'è una crescente sensibilità verso il reimpiego dell'hardware obsoleto, del suo riutilizzo con finalità sociali, accademiche ma anche di business - si legge in una nota - Immaginiamo una scuola (ma potrebbe essere una qualsiasi organizzazione statale o privata) che abbia un parco computer obsoleto. Con Lazarus-NX queste macchine possono essere riutilizzate su piattaforma Open Source, svincolando l'organizzazione anche dalle spese di licenza tipiche del software proprietario.''
 
 
Altro link interessante:


http://www.tldp.org/HOWTO/XDMCP-HOWTO


Scopo di questo scritto e' di fornire una guida generale sul mondo dei desktop remoti e il loro uso mediante software opensource  
= Link =
* [http://www.freesoftwaremagazine.com/articles/what_is_x/ What is X?]: ineretessante articolo che parte dalle basi del funzionamento fino agli utilizzi più avanzati del server X in remoto.
* [http://www.tldp.org/HOWTO/XDMCP-HOWTO Linux XDMCP HOWTO]
----
Scopo di questo scritto è di fornire una guida generale sul mondo dei desktop remoti e il loro uso mediante software opensource  


Per insulti o gemiti di piacere questa e' la mia mail : gabrix@gabrix.ath.cx
Per insulti o gemiti di piacere questa è la mia mail : gabrix@gabrix.ath.cx


Grazie e ciao !
Grazie e ciao !

Versione delle 18:00, 15 apr 2006

Document-page-setup.png Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.

Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template.


Introduzione

Questa guida nasce dalla discussione Manovrare X da remoto apparsa sul forum di Debianizzati.Org

Ogni home o client system software che si rispetti ha un 'interfaccia grafica(GUI). Microsoft la include nel suo systema, o kernel che dir si voglia. Le ditribuzioni GNU/Linux la includono nell'installazione di default. In ogni modo nelle distribuzioni GNU/Linux e POSIX la GUI non è parte del kernel ma un programma a parte l' "X window system" o semplicemente X. Precisamente X non è la GUI. Xdm, Gdm, Kdm sono GUI. X è una struttura che la GUI usa per i suoi scopi. Mentre la GUI gestisce bottoni, finestre, testi ecc. X gestisce applicazioni di più basso livello: input di tastiera, mouse,fonts ecc. Molte persone potrebero pensare riguardo per esempio ai termini X-server e X-client al contrario di quello che potrebbe sembrare. Un X server è una macchina nel network dove è installato un window manager e dove altre altre macchine, X-clients, ci si possono collegare e gestire finestre, scrivere testi, navigare in rete e che può leggere il tuo input. In definitiva cosa un X server "serve" sono finestre e il tuo input da mouse o tastiera.

Configurazione

Il server X di solito viene iniziato da un X Display Manager.Un X display manager è xdm,gdm,kdm che forniscono svariati X displays locali o remoti specificati in Xservers usando XDMCP come specificato nel file Xaccess.

In /etc/X11/xdm/xdm-config commenta:

DisplayManager.requestPort:   0

che diventa:

!DisplayManager.requestPort:   0

In /etc/X11/xdm/Xaccess togli il comento a

#*         #any host can get a login window

che diventerà:

*         #any host can get a login window

Questo metterà l'Xserver in broadcast mode che butterà giù una lista di tutti gli Xserver in Willing di accetare di connettersi all'X server.

Se vuoi permettere connesioni solo da parte di certi host che un sezione nello stesso file che si chiama CHOOSER

In /etc/X11/fs/config commenta così:

#no-listen = tcp

Poi cambia in /etc/X11/XF86Config-4

FontPath        "unix/:-1"
FontPath        "unix/:-7100" 

Questo per indicare 7100 come porta per FontPath in UDP.

Utilizzo

Se usi un sistema GNU/Linux probabilmente hai X già installato. L'X server può essere lanciarlo con un semplice:

# X &

Questo farà partire un server X in background. Comparirà uno schermo con lo sfondo grigio e un X come puntatore del mouse che puoi muovere per lo schermo... niente di speciale nè di carino da vedere .... inutile.

Il comando di sopra quindi inizia un X server, che semplicemente sta lì in attesa di un client che si collega come per esempio xterm che apre una finestra ed esegue una shell. Ci sono molte opzioni da riga di comando che aprono finestre di diversa grandezza e posizione ma tutto ciò non sarebbe molto pratico nè di facile utilizzo.

C'è bisogno di un X-client e di un window-manager.

Un window manager puo dare quell'usabilità interattiva alla quale siamo abituati. Un window manager in GNU/Linux potrebbe essere mwm o fvwm che possono essere lanciati con un

mwm -display :0  

o

fvwm -display :0

una volta che è partito un window-manager muovere e gestire finestre diventa interattivo e lanciare applicazioni diventa più facile. Il -display :0 per aprire finestre sull X-server. Un display non è nient'altro che uno schermo al quale collegarsi. Di default quando X parte lui inizia un display sul 'canalè :0 della macchina locale.

Quando parte una sessione X automaticamente va a piazzare il display al quale è collegata nella variabile $DISPLAY. Se non dovesse essere stata dichiarata alcuna variabile di default X si andra a piazzare sul display :0.0.

In ogni caso per lanciare X dalla console è un sufficiente lanciare uno startx, che inizierà un X-server su display :0.

Molti X-server specialmente nel mondo GNU/Linux usano xdm o gdm o kdm. Xdm stà per "X Display Manager"; questi hanno lo scopo di accogliere l'utente con un X-client che è un login grafico chiamato anche "greeter". Una volta che hai introdotto nome utente e password non solo un window manager ma un intero ambiente desktop si presenta dinanzi ai tuoi occhi.

Ritornado al discorso client server , sul server lancia startx,assicurati ci sia un window manager attivo e poi da un xterm lancia il comando:

 $ xhost add 192.168.0.2 (ip del client)

Questo permetterà connessioni dalla macchina 192.168.0.2. Sul client invece digita :

$ xterm -display 192.168.0.1(ip Xserver):0

Sul server X adesso dovresti vedere un finestra di xterm. È successo che un X-client si è collegato ad un xserver aprendo una finestra di xterm lì.

Riguardo la sicurezza il protocollo X è apllicabile solo in ambienti fidati Lan e non è cosigliabile avere sessioni X attraverso la grande rete. Se vuoi utilizzare X attraverso la rete è consigliabile incanalare il protocollo X in un protocollo sicuro come ssh. In ogni caso ci sono anche altri modi in aggiunta ad ssh che puoi utilizzare per proteggere le tue macchine uno di questi è xhost ma anche meglio con un programma xauth utilizzato per autenticare i clients: Xauth può funzionare in vari modi: uno di essi è attraverso l'utilizzo di un cookie. Un X-client per collegarsi ad un X-server ha bisogno di conoscere una sequenza di dati casuali generati dal server conosciuto come cookie che funziona in maniera molto simile ad un session password: se il cookie trasmesso dal client non corrisponde a quello del server, Xserver rifiuterà la connessione. Xserver di default è in ascolto sulla porta

  • 6000 per il display :0
  • 6001 per display:01

ecc.

Programmi come xdm , gdm o kdm sono demoni che vanno in background, sono soliti essere iniziati da init al boot e sono sempre in attività. Si occupano di iniziare sessioni X-server se necessario, del login grafico, preparano i cookies di xauth che servono per autenticare i clients e fanno partire il programma adatto per ciascun desktop e così via.

Xdm può essere configurato per accettare richieste XDMCP dal network. Questi sono speciali pacchetti UDP che un xserver trasmette da porta 177 per richiedere login remoti. Quando un Xserver richiede di collegarsi ad un altra macchia con xdm allora bisogna lanciare l'X-server con opzioni "-query" o "-broadcast". L'opzione "-query" viene usata quando X-server deve lanciare un richiesta XDMCP ad una macchina in particolare, invece "-broadcast" la trasmette a tutte le macchine nel network.

X -query 192.168.1.2

o

X -broadcast

Come detto pocanzi X può essere usato attraverso la grande rete ma non senza alcune contromisure.Una di questa è di usare un tunnel ssh , affinchè funzioni và settata l'opzione X11Forwarding a yes in /etc/ssh/sshd_config.

Fa partire un X-server con startx sulla macchina locale , poi in xterm collegherati alla macchina remota usando ssh con il seguente comando:

ssh -X -C user@remotebox

Dove "user" è il tuo user code. Dopo esserti collegato puoi lanciare programmi X-client e questi li vedrai sulla tua macchina locale. Quando ssh si collega a un sshd usando l'opzione -X, l'sshd prepara un "virtual" X-server su di un display col numero più alto disponibile (di solito il 10) e dopo crea il suo authentication cookie per la sessione.

Quando un X-client sulla stessa macchina del sshd server si connette al display 10, lo pseudo sshd X-server convalida l'X-client usando il suo cookie, cripta la connessione e trasmette la richiesta all' ssh client sulla tua macchina. L'ssh client poi autentica la richiesta al vero X-server usando il cookie vero e visualizza le richieste dell'X-server. L'opzione "-C" comprime la comunicazione rendendola piu fluida e la decomprime una volta a termine dall'altro lato.

L'uso di X attraverso ssh può delle volte causare dei problemi di rendimento e performance. Il protocollo X trasmetterà tutte le righe, tutte le aree anche non necessarie, non c'è una cache nè alcun tipo di funzionalità "trasmetto solo cosa è cambiato".Significa che se un' area è stata ridisegnata tre volte il protocollo X trasmetterà tutte le volte che quell'area è stata cambiata mentre basterebbe trasmettere solo l'ultima delle tre e questo potrebbe risultare un pò dannoso su connessioni lente. Il protocollo VNC è consapevole di questo aspetto infatti il VNC server aspetta connessioni dai VNC clients e quando il client si connette VNC trasmette l'intero desktop al client. VNC è sia un vncserver che un x-server. Quando parte si mette in ascolto sulla sua porta tcp la 5900 (+ il numero di display :0.1 x 5901, :02 x 5092 ecc.) in attesa di VNC clients che si collegano. Rimane in ascolto anche sulla socket del display proprio come un X-server ma, invece di trasmettere la richiesta su un monitor, la tiene in memoria per trasmetterla al client. Per configurare VNC c'è bisogno della presenza di un vncserver da essere lanciato manualmente. Per prima cosa bisogna impostare una vncpasswd che poi verrà usata per il login. Ci si collega con ssh senza l'opzione -X:

ssh username@hostremoto 

Poi una volta collegato lanci vncserver :1 che in pratica mette vncserver in ascolto sul display 1 cioè tcp port 5901.Dopo puoi lanciare il vnc client come per esempio tightvncviewer o vncviewer o svncviewer in questo modo :

vncviewer hostremoto:1

Poi ti verrà chiesta la password e tu introdurrai quella stabilita in precedenza et voilà eccoti il desktop remoto in locale in tutto il suo splendore. Questa configurazione presenta dei rischi, porta 5900 e 5800 deve essere aperta nel firewall e la comunicazione è in chiara. Per criptarla c'è bisogno di un tunnel ssh. Ancora una volta l'amico ssh ci viene incontro:

ssh -C -L 5901:127.0.0.1:5901 user@remotehost

questo comando metterà ssh in ascolto sulla porta locale 5901 fino alla porta remota 5901 quella del server vnc. Una volta loggati sulla macchina remota, sulla macchina locale apri vncviewer (un qualsiasi client vnc,o addirittura il browser con java) e lo punti a localhost:5901 vncviewer questo comando ti permetterà di criptare la tua connessione verso il server vnc attraverso un tunnel ssh.

X su altri sistemi operativi

Molte persone credono che X sia stato progettato solo per GNULinux e unix-like ma in realtà come ogni prodotto unix il primo intento è la portabilità verso quanti più OS è possibile . Altri ottimi progetti sono il Linux terminal Server project che usa tutte le potenzialità di X in scenari dove gli utenti sono collegati ad un X server centrale attraverso dei thin client o diskless machine con un grosso abbatimento sui costi e in questo senso come non menzionare il progetto LazarusNX che ha come obbiettivo il recupero di hardware obsoleto specialmente nelle scuole italiane,creazione di reti didattiche e laboratori informatici ad alte prestazioni e costi contenuti.

C'è una crescente sensibilità verso il reimpiego dell'hardware obsoleto, del suo riutilizzo con finalità sociali, accademiche ma anche di business - si legge in una nota - Immaginiamo una scuola (ma potrebbe essere una qualsiasi organizzazione statale o privata) che abbia un parco computer obsoleto. Con Lazarus-NX queste macchine possono essere riutilizzate su piattaforma Open Source, svincolando l'organizzazione anche dalle spese di licenza tipiche del software proprietario.


Link

  • What is X?: ineretessante articolo che parte dalle basi del funzionamento fino agli utilizzi più avanzati del server X in remoto.
  • Linux XDMCP HOWTO

Scopo di questo scritto è di fornire una guida generale sul mondo dei desktop remoti e il loro uso mediante software opensource

Per insulti o gemiti di piacere questa è la mia mail : gabrix@gabrix.ath.cx

Grazie e ciao !