Eseguire applicazioni remote con X11
ArticleCategory: [Choose a category, do not translate this]
UNIX Basics
AuthorImage:[Here we need a little image from you]
TranslationInfo:[Author + translation history. mailto: or http://homepage]
original in en Guido Socher
en to it Kikko
AboutTheAuthor:[A small biography about the author]
Guido ama linux non solo perchè gli interessa sapere come funziona
il sistema operativo ma anche perchè c'è altra gente, come
lui, interessata agli stessi progetti.
Abstract:[Here you write a little summary]
Molti utenti Linux alle prime armi pensano che il desktop grafico sotto
Linux non sia altro che un altro sistema tipo "Windows" in cui far partire
delle applicazioni che partiranno in finestre separate. Qualcuno vi avrà
detto che si possono avere molti desktop ma dicendo così sembra
che l'unica differenza con "Windows" stia solo in questo. Il sistema X
Window di Linux (X11) è molto più di questo! é un
sistema di tipo network window. Andiamo a scoprire quali nuove e potentissime
potenzialità offre.
ArticleIllustration:[This is the title picture for your article]
ArticleBody:[The article body]
Il concetto di display
Ogni applicazione grafica di X Window legge, allo startup, la variabile
d'ambiente DISPLAY per stabilire a quale monitor di quale computer inviare
i suoi "grafici". Questo, insieme alle caratteristiche di network dell'
X Window rende possibile eseguire applicazioni grafiche da remoto.In altre
parole, si può utilizzare la capacità di calcolo della CPU
di una macchina mentre invece si utilizza una determinata applicazione
in un'altra macchina. La GUI (graphical user interface) apparirà
nella macchina nella quale si sta attualmente lavorando. Non ci si accorgerà
affatto di lavorare su 2 computer contemporaneamente.
La velocità di connessione è sicuramente importante ma
una normale connessione LAN da 10Mbit/s è più che sufficiente.
Ma... a che serve questo sistema?
Ci son molte applicazioni di tipo "network graphics". Alcune società
produttrici software usano questo sistema basato sull'X Window per lavorare
da remoto su applicazioni che potrebbero trovarsi a migliaia di kilometri
di distanza, e voi potreste usare la stessa applicazione per lavorare stando
comodamente a casa vostra.
Supponiamo che abbiate 2 computers, di cui uno sia una macchina relativamente
potente da, diciamo, 1GHz e l'altro sia un vecchio Pentium a 133 MHz. Potreste
sfruttare, in questo caso, la potenza e la velocità della macchina
più moderna benchè non l'abbiate davanti a voi. Potrebbe
darsi che davanti alla macchina più potente stia seduta vostra sorella,
(NDT. la quale sta per esempio chattando!!). Non importa, voi potrete ugualmente
sfruttare la velocità di calcolo della macchina utilizzata da vostra
sorella.
Ma in che modo è possibile questo?
Tutte le applicazioni per X Window, che potrebbero essere gimp, xterm,
konqueror, netscape,... son realmente dei network clients adatti a connettersi
ad un server: il server X (NDT: il numero 11 in X11 riguarda la versione
di X, che attualmente è...indovinate.. la 11). Il compito del server-X
è di dialogare con l'hardware grafico, trasportare le immagini sul
vostro schermo e percepire l'input della vostra tastiera e del vostro mouse.
I clients (NDT: del server-X) (che son i vostri programmi tipo gimp, netscape
etc.) inviano al server le istruzioni su come visualizzare riquadri e pulsanti.
In cambio, i clients ricevono i risultati dell'input inviato da tastiera
e mouse. Ovviamente è richiesta una qualche forma di autenticazione,
altrimenti tutti potrebbero pasticciare nei monitor altrui. Per controllare
l'accesso al server-X esistono due programmi:
- xhost: usando questo programma potete permettere a ogni utente su
una determinata macchina di inviare dei grafici al vostro schermo. Esempio:
vi trovate di fronte alla macchina chiamata philosophus. Per permettere
l'accesso di ogni programma dell'host chiamato movietux allo schermo di
philosophus si deve digitare il seguente comando:
xhost +movietux
Questo dev'essere scritto nella shell di philosophus
- xauth: Si tratta di un tipo di autenticazione molto sofisticata basata
sui cookie (NDT: chiavi d'accesso). Qui si possono veramente definire degli
accessi a determinate persone. E' molto più sicuro di xhost. Il
processo di autenticazione usa un cookie contenuto nel file .Xauthority
della home directory dell'utente. Se la macchina remota possiede una chiave
(cookie) valida, allora gli sarà garantito l'accesso.Per copiare
la chiave dalla macchina davanti alla quale vi trovate (philosophus) sull'host
dal quale vorrete far partire un determinato programma (movietux) potete
usare uno dei seguenti metodi:.
xauth extract - philosophus:0.0 | ssh movietux /usr/X11R6/bin/xauth
merge
oppure
scp ~/.Xauthority movietux:
La procedura che si avrà alla inizializzazione di un programma
(client) è la seguente:
-
Il client ricerca la variabile d'ambiente DISPLAY per trovare il server,
altrimenti prova a connettersi sul server di quest'host.
-
Il server controlla se il client è abilitato alla trasmissione di
"immagini". Se il client è autorizzato, allora il server mostra
l'immagine a schermo.
La variabile d'ambiente DISPLAY ha la seguente sintassi:
bash:export DISPLAY=hostname:displaynumber.screennumber
tcsh:setenv DISPLAY hostname:displaynumber.screennumber
Non parlerò qui di displaynumber e di screennumber. Normalmente
è 0:0. Un esempio per bash potrebbe essere:
export DISPLAY=philosophus:0.0
Far partire un'applicazione remota
Dopo tutta questa teoria passiamo a un esempio pratico. Provatelo. Siamo
ancora seduti al computer chiamato philosophus e vogliamo avviare qualcosa
da remoto da movietux.
-
Dì al tuo X-server che i client provenienti da movietux devono essere
abilitati a inviare immagini sul tuo schermo:
xhost +movietux
-
connettiti all'host remoto movietux:
slogin -l username movietux
-
adesso sei loggato a movietux e ogni comando che eseguirai sarà
elaborato su movietux
-
export DISPLAY=philosophus:0.0
-
fai partire il programma client ad esempio:
netscape &
Se movietux è una macchina potente ricorda che l'interpretazione
delle pagine html in Netscape è molto più rapida di quando
vengono interpretate da locale dalla vostra macchina (NDT: philosophus).
Allo stesso tempo non vi accorgerete che in realtà, dal punto di
vista dell'utilizzo, Netscape non è stato avviato da locale poichè
lo "manipolerete" al solito modo con il vostro solito mouse e con la vostra
solita tastiera.
Forte! No?
Taking the display with you
Benchè sia semplice avviare un'applicazione da remoto, vi son un
altro paio di cosette che devono essere definite per settare la variabile
DISPLAY. E' possibile automatizzare il tutto:
-
Se usate ssh per loggarvi all'host remoto, allora DISPLAY viene automaticamente
impostata correttamente. Vi son anche altri programmi di login remoto che
supportano DISPLAY, ma il più usato è ssh.
-
Se, invece, usate slogin o altri comandi, dovreste installare il seguente
script sull'host remoto:
Per tcsh:
# take your display with you at remote login:
# Put it into your ~/.login file
set whoami=`who -ml`
set remhost=`expr "$whoami" : '.*(\(.*\))'`
if ( "$remhost" != "" ) then
setenv DISPLAY "$remhost":0.0
endif
Lo script opera ricevendo il nome dell'host remoto dal comando "who
-ml". Questo comando dovrebbe restituire qualcosa del genere:
>who -ml
movietux!guido pts/3 Oct 26 21:55 (philosophus.tux.org)
Se stai usando la bash hai bisogno del seguente script:
# take your display with you at remote login:
# Put it into your ~/.bash_profile
whoami=`who -ml`
remhost=`expr "$whoami" : '.*(\(.*\))'`
if [ -n "$remhost" ]; then
DISPLAY="$remhost":0.0
export DISPLAY
fi
OpenGL
Se le capacità di networking del Sistema X Window son molto buone,
invece i grafici son un tantino più lenti poichè i dati vengono
inviati tramite un protocollo di rete. In condizioni normali non si dovrebbe
notare la differenza.
Grafici complessi e applicazioni che necessitano di velocità
di esecuzione come per esempio i giochi con alte risoluzioni son solitamente
basati su OpenGL (Open Graphics Library) e GLX (OpenGL Extension to the
X Window System). Queste librerie forniscono un interfaccia di programmazione
indipendente che permette l'accesso diretto all'hardware di accelerazione
3D delle schede video. Ovvero: l'applicazione invia la descrizione di un
oggetto in forma di punti. linee e poligoni alla scheda video e tutta l'operazione
di rendering viene infine compiuta dallo stesso hardware grafico. In questo
modo vengono elaborati velocemente grafici complessi.
Attualmente molti driver di schede video(X servers) non supportano hardware-accelerati
GLX/OpenGL per applicazioni remote. L'accelerazione è supportata
solamente per applicazioni da locale. Il risultato è che le applicazioni
OpenGL lanciate da remoto potranno a malapena partire e nel caso in cui
partissero sarebbero veramente lente. Costituiscono una eccezione i driver
proprietari di NVidia. Essi hanno un'interfaccia di rendering diretto che
supporta il rendering indiretto per le applicazioni remote.
Conclusioni
L'utilizzo della potenza di calcolo della vostra rete è molto facile
con X11. Potrete lavorare con applicazioni remote come se venissero eseguite
da locale. L'unica differenza sta nel fatto che potreste vedere i files
contenuti nella home directory della macchina remota. In ogni caso, con
NFS e NIS installati, potrete nascondere anche questa piccola differenza
ed utilizzare interamente la potenza di calcolo della CPU della macchina
più veloce senza pensarci.
Links
X11 system, x.org
xfree86.org l' X11 system usato
in Linux
Nota del Traduttore
Le parti tra parentesi precedute da NDT (Nota Del Traduttore) son delle
precisazioni introdotte dal Traduttore, e gli eventuali errori tecnici
non son imputabili all'Autore originario dell'articolo in questione, ovvero
Guido Socher.