Exercici X Windows

De Cacauet Wiki
Dreceres ràpides: navegació, cerca

X-Windows és un sistema gràfic ideat durant els anys 80 per màquines Unix. Té una arquitectura client-servidor nativa per facilitar l'execució de processos i visualitzacions en màquines diferents.

Per exemple, per poder executar programes en una màquina remota i visualitzar-la a la nostra, es pot fer a través de la senzilla funció:

$ ssh -X [email protected]

El paràmetre "-X" fa que es crei un túnel SSH entre les 2 màquines per transferir la informació de les X-Windows (protegida). Si voleu examinar què fa de difernt podeu fer un cop d'ull a la variable d'entorn DISPLAY:

$ echo $DISPLAY

això ens dirà on s'executaran les aplicacions que requereixin interfície de X-Windows. Normalment els displays locals son ":0" o ":1", però en remot apareixen altres ports on s'ha creat el túnel (ho gestiona el propi SSH, no cal que fem res).


Teoria X-Windows[modifica]

Les X-Windows estan totalment pensat amb una arquitectura client-servidor, pel que aïlla la part gràfica de cada aplicació de la part de procés (càlcul, accés a disc, dur, xarxa, etc.). AL TANTO que la denominació "X-server" i "X-client" pot confondre fàcilment:

  • El X-server controla el hardware de la targeta gràfica i el teclat i ratolí. La màquina X-server executa la part gràfica i per tant rep ordres del X-client del tipus "pinta una ratlla aquí" o "fes un quadrat blau allà".
  • El X-client és la màquina on l'aplicació de procés funciona. Al tanto perquè normalment sol ser el "servidor" de dades corporatiu o similar, i en canvi des del punt de vista de les X és el client.

X-Winodows, al ser un sistema amb clara separació del client i servidor gràfic (X-Windows server) ens permet fer funcions ben diferents que no permeten altres arquitectures monolítiques com W32:

  • Executar aplicacions remotament en la nostra pantalla local.
  • Executar aplicacions executant-se en una màquina sobre displays d'altres màquines.
  • Iniciar sessions d'escriptori remot de manera nativa.

Característiques d'aquesta arquitectura:

  • Un punt menys de velocitat ja que l'estructura client-servidor (i més si hi ha xarxa entremig) és més complexa.
  • Alliberació de les tasques gràfiques en el X-client, que sol ser el servidor central de dades. Això atorga més capacitat de càlcul al servidor de procés.
  • Sistema més estable a l'aïllar la part gràfica on se solen donar molts errors d'execució. Si hi ha un problema, l'aplicació gràfica no s'executa en mode kernel sinó en mode usuari i no penja tota la màquina.

Altres arquitectures com W32 són monolítiques (un sol bloc) i no estan pensades com a client-servidor. Les característiques de les arquitectures monolítiques son:

  • Un mica més de velocitat d'execució (o millor performance).
  • Més inestabilitat al sistema a l'executar-se la part gràfica dins el kernel (la màquina es penja amb més facilitat).

Cal que llegiu aquests articles de la Wikipèdia:


Exercicis Xorg[modifica]

El realitzarem amb una màquina tipus Ubuntu Server, és a dir, sense cap interfície gràfica (FUNKYSERVER). Comenceu amb una instal·lació neta del funkyserver.

IMPORTANT: Respon a les preguntes que es formulen a la pràctica i fes pantallades de cada apartat.

  1. Esbrina la comanda adequada per veure quant espai de disc dur està en us. Quant s'utilitza en una instal·lació bàsica de Ubuntu Server?
  2. Esbrineu quin paquet cal instal·lar en una màquina sense interfície (funkyserver) per aconseguir una execució remota de la típica aplicació XEYES. Pista: intenta instal·lar xeyes aviam què et suggereix fer.
    Respon (mirant la sortida del apt-get):
    • Quants paquets et demana instal·lar?
    • Quant espai de disc dur requereixen?
  3. Prova de llançar remotament altres aplicacions com xcalc o xterm. Pots assegurar a simple vista que s'estan executant en el funkyserver?
  4. Instal·la les xorg bàsiques.
    • Quin espai de disc dur ocuparan segons el apt-get?
    • Com s'ha d'iniciar la sessió X des de la consola de la pròpia màquina?
    • Executa xeyes localment i examina com es comporta. Com l'apagues i segueixes treballant amb la consola?
    • A quina consola virtual creus que estàs? Comprova-ho canviant de consola virtual.
    • Quina és la consola gràfica per defecte?
  5. Executa la següent comanda i comenta què creus que deu ser cadascun dels processos que apareixen: (OJU, és "X" MAJÚSCULA)
    $ ps -ef | grep X
  6. Com pots aturar la consola gràfica creada? Busca dues maneres de fer-ho.
  7. Ara anem a fer una gamberrada a un company. Té oberta una sessió X a una màquina (funkyserver) i li volem fer aparèixer una pantalla de xeyes inesperadament per ell. Cal connectar-se per SSH, però el -X no es funciona perquè les aplicacions ens surten a "nosaltres", no al funkyserver. Busca com resoldre-ho.
    NOTA: per aconseguir això haureu de modificar la variable d'entorn DISPLAY. Fent "echo $DISPLAY" veureu el contingut. Per canviar-la heu de fer
    export DISPLAY=...nomdeldisplay...


Troubleshooting[modifica]

Pot ser que no arrenquin les X si heu estat remenant la màquina en mode superusuari. Mireu si l'arxiu .Xauthority del vostre directori d'usuari té el propietari correcte (NO root) i si dona problemes l'esborreu, a l'iniciar sessió es crearà de nou.


Gestors d'escriptoris[modifica]

A part de les xorg bàsiques cal que instal·lem el gestor d'escriptori (Desktop Manager) si volem una màquina gràfica amb funcionalitat complerta. Provarem els diferents escriptoris per veure les seves diferències.

Abans de començar modifiqueu la màquina virtual per executar-se amb 1 GB de RAM.

De cadascun dels escriptoris treballats cal que:

  • Prenguis nota de quant ocupen en el disc dur.
  • Agafis una pantallada.
  • Examinis les seves principals característiques.
  • Esbrina quina quantitat de RAM hi ha disponible només arrencar l'escriptori.
    NOTA: potser un cop arrencat un escriptori la RAM ocupada ja no baixa. Per poder comparar la RAM ocupada per cada gestor d'escriptori potser convé que reinicieu la màquina per baixar la RAM ocupada al mínim.

Els escriptoris a provar son:


Consoles gràfiques[modifica]

Busca com crear una segona consola gràfica sobre la teva màquina. Com canvies entre les diferents consoles virtuals?

La comanda serà una variant de startx amb algun paràmetre per que s'obri en el display :1 enlloc del display :0

Quins números de consoles gràfiques són el DISPLAY :0 i el DISPLAY :1 ?


Display Manager i connexió remota X-windows amb XDMCP[modifica]

Els Display Managers son un servei del sistema que facilita l'inici de sessió (login) de forma gràfica. Cada escriptori té els seu Display Manager, com per exemple:

  • Xorg: XDM (és el més bàsic)
  • Gnome: GDM (Gnome Display Manager)
  • LXDE: LXDM
  • KDE: KDM
  • Unity: LightDM

Recordeu que al ser un servei cal gestionar-lo amb la comanda:

$ sudo service gdm {start|stop|restart}

Podeu tenir un Desktop qualsevol amb un Display Manager diferent, per exemeple, podeu tenir el LXDE amb el XDM. Per canviar de Display Manager per defecte només cal que reconfigureu algun dels paquets, per exemple:

$ sudo dpkg-reconfigure xdm

...i us deixarà triar amb quin DM començar les sessions.

També podeu gestionar el DM d'arrencada a través de l'arxiu:

/etc/X11/default-display-manager

Podeu comentar el contingut amb un "#" si voleu que no arrenqui cap DM.


Activar XDMCP[modifica]

En els següents exercicis es tracta de realitzar allò pel què s'han pensat les X-Windows: obrir una sessió remota des d'una altra màquina. Per poder fer això cal tenir un Display Manager i activar la sessió remota a través de 'XDMCP (X-Windows Desktop Manager Control Protocol). Oju perquè hi ha alguns DM com el LXDM que NO poden treballar amb XDMCP. Haureu, doncs, de provar amb KDM, GDM o XDM (aquest darrer és el més senzill i bàsic).

Podeu mirar aquí per saber més del XDMCP (HOWTO). També XDMCP a la Wikipèdia en anglès o en castellà.

Per realitzar la connexió cal reconfigurar el vostre DM triat i activar el XDMCP. Podeu consultar aquest HOWTO. No us espanteu per l'article que és molt llarg, només cal tocar un parell de línies dels arxius de conf:

  • Si utilitzeu XDM aneu al punt 2.6 apartat 2 i 3 (calen els 2!!)
  • Si utilitzeu GDM aneu al punt 2.6 apartat 4. Hi ha un error (el howto és obsolet). Amb GDM heu d'editar l'arxiu /etc/gdm/custom.conf (si no hi és el creeu vosaltres) i hi poseu (o afegiu) el següent:
[xdmcp]
Enable=true
DisplaysPerHost=4

Per saber més sobre la configuració del GDM... es poden fer autologin, arrencar programes, etc.

Exercici[modifica]

Utilitza la màquina amfitriona per connectar-te remotament a la màquina virtual (hauràs d'obrir la sessió X en una segona consola gràfica com has fet a l'exercici anterior).

La comanda per obrir una sessió X sobre una altra màquina remota és la següent (xinit afegint el paràmetre -query <ip>). Abans, però, llegiu com habilitar el XDMCP del Display Manager per que la màquina accepti la connexió.

$ xinit (...algunes opcions per obrir un 2n terminal gràfic...) -query <ip_del_xserver>

NOTA: Si fem un startx se'ns engegarà el Desktop local. Si afegim el -query tindrem 2 escriptoris alhora! En canvi, la comanda xinit inicia un Xorg senzilla sense Desktop Manager, i és justament el què ens convé per una sessió remota.