Cum functioneaza interfata grafica si desktop environment-ul in linux?

Linux | Stefanescu Mihai | 2023-02-11

Un desktop environment de linux este o colectie de aplicatii ce compun o interfata grafica (GUI) pentru a interactiona cu sistemul de operare.

Desi majoritatea software-ului pe care il intalnim zi de zi este scris sub forma de monolit, mai ales in cazul unui sistem de operare sau a unui kernel, comunitatea linux a venit cu un set de aplicatii care se pot functiona impreuna ca un set de lego.

Una dintre partile foarte interesante ale acestui sistem de operare este simplicitatea complexa, sau daca vreti complexitatea simpla care ne permite sa customizam modul in care arata si functioneaza sistemul de operare dupa bunul plac.
Ce este foarte interesant la desktop environment-urile de linux este modul in care respecta libertatea utilizatorului de a isi creea propriul mediu de lucru format exact din partile pe care le doreste.

In acest articol nu am sa ma refer la un singur desktop environment, desi as putea scrie cel putin cate un articol despre fiecare (KDE, gnome, cinnamon, xfce, lxde, lxqt, etc), ci am sa vorbesc in mod general de modul de functionare a unui desktop environment.

Un desktop environment este format din mai multe parti:

  • Display manager
  • Windows system
  • Window manager
  • Desktop environment

Inainte de a vorbi despre fiecare componenta in parte hai sa ne uitam la modul in care ar arata linux-ul fara o interfata grafica (GUI).

Cand o masina cu linux este pornita poneste 8 tty-uri. Un TTY este in esenta un terminal fata interfata grafica. Poti accesa acest terminal apasand ctrl+alt+[1-8]. De exemplu ctrl+alt+1 o sa imi afiseze urmatorul lucru:

Display Manager

Un display manager (cunoscut si ca login manager) este incarcat chiar dupa procedura de boot. Acesta incarca un ecran de autentificare, exact ca telnet, care iti cere un username si o parola. Principalele lui functii sunt autentificarea si sesiunile utilizatorilor. Display manager-ul incarca windows system-ul configurat pentru masina in cauza ruland scriptul .xsession, ce este folosit pentru initializarea clientilor (o sa discutam despre X Client putin mai jos).

Un exemplu de asemenea display manager este lightdm, care ca default cu mai multe sisteme linux si este unul dintre cele mai versatile. De asemenea, mai exista si alte display manager-uri, cum ar fi gdm care vine o data cu gnome sau xdm pentru X11 (despre care o sa discutam mai jos).

Ce-a mai buna parte la un display manager este ca nu trebuie sa il pastrezi pe cel deja existent cand ti-ai instalat distributia de linux. Instalarea si pornirea unui display manager este atat de simpla:

sudo systemctl disable gdm
sudo apt install lightdm
sudo systemctl enable lightdm

Adoua parte buna la un display manager este ca este customizabil. Totul poate fi modificat, de exemplu, pentru a customiza lightdm trebuie sa intram si sa editam fisierul /etc/lightdm/lightdm.conf

Pentru a vedea configurarea curenta a display managerului putem rula comanda:

cat /etc/X11/default-display-manager

Window system

Un windows system este una dintre cele mai importante parti ale intefetei grafice din linux (GUI). Determina ce trebuie sa fie "desenat" pe ecran si cum. In acest articol, o sa vorbim despre cel mai popular windows system: X Windows System, cunoscut si ca X sau X11.

X11 este format din urmatoerele elemente:

X Server este un program ce interactioneaza cu hardware-ul si controleaza ce este afisat pe ecran. Fiecare X Server este facut specific pentru o placa video (din cauza dependintelor hardware). Ce este important de retinut este ca X11 are o arhitectura inversa de client-server, in mod normal un server ruleaza remote, dar in X11 server-ul ruleaza direct pe masina in cauza.

X Client este un program ce se foloseste de X Server pentru a afisa lucruri (de exemplu xclock, xterm, xcalc, etc) pe un anumit ecran.
Una dintre partile interesante la X11 este faptul ca a revolutionat modul in care ne gandim la o interfata grafica, mai ales la faptul ca X Server si X Client nu trebuie sa fie pe aceasi masina ca sa functioneze impreuna. Ceea ce inseamna ca pot trimite comenzi de pe masina mea pentru a afisa un anumit program pe alta masina si vice versa.

Window Manager o sa discutam mai tarziu mai in detali despre window manager, aici vreau doar sa evidentiez faptul ca atat X Client cat si X Server vorbesc aceasi limba folosind protocolul X care arata cam asa:

hostname:displaynumber:screennumber

Hostname:  numele masini fizice conectate (aici putem avea numele masinii, ip-ul sau nimic). Daca aceasta parte este lasata goala inseamna ca ne referim la masina curenta.
Display Number: O masina poate avea mai multe display-uri conectate, acest camp decide display-ul la care trebuie sa se conecteze.
Screen Number: Fiecare monitor are mai multe ferestre, acest numar reprezinta fereastra.

Acest string al conexiuni este salvat in variabila DISPLAY si poate fi vazut ruland urmatoarea comanda in terminal:

echo $DISPLAY

Pentru a porni mediul grafic intr-un tty trebuie sa rulam pur si simplu urmatoarea comanda:

startx

Aceasta comanda face parte din suita xinit ce este specializata in initializarea X11. Daca nu ai deja xinit, il poti instala folosind:

sudo apt install xinit

Window Manager

Un window manager este o aplicatie de tip client ce controleaza geometria, modul de afisare, coordonatele si proprietatile grafice pentru o fereastra determinata de X. De asemenea, este responsabil si de rearanjarea si redimensionarea ferestrelor. Unele dintre cele mai populare window manager-uri sunt: dwm, i3, awesome, openbox, etc.

Un window manager vine si cu "decoratii" pe partea de client, decoratii cum ar fi titlebar-uri, butoane, etc. De retinut ca o multime de aplicatii gtk vin deja cu aceste "decoratii" si nu mai ai nevoie de un window manager in mod expres pentru ele (de ex: firefox, gedit, etc).

Comunitatea linux a dezvoltat o multime de Windows Managers de-a lungul anilor, iar in ultima perioada (sau cel putin asa mi s-a parut mie) am vazut din ce in ce mai multi renuntand la un desktop environment full pentru un window manager din urmatoarele motive: este mai putin incarcat (vine doar cu lucruri esentiale), este mai rapid, deci poti fi mai productiv si este foarte usor de customizat.

Schimbarea window managerului este foarte simpla, de exemplu:

sudo apt install dwm
echo "exec dwm" > ~/.xsession

Dupa cum am mentionat si mai devreme, display manager-ul ruleaza scriptul .xsession, adaugand comanda exec dwm in acests cript indica display managerului sa ruleze dwm ca si window manager imediat dupa autentificare.

Desktop Environment

Un desktop environment poate fi considerat o aplicatie ce ruleaza peste un window manager si vine cu o multime de feature-uri peste acesta, cum ar fi wallpaper-uri, toolbar-uri, iconite si widget-uri. Cateva exemple de desktop environments: gnome, KDE, XFCE, Cinnamon, LXDE, LXQT, etc

Concluzia

Acest articol a fost o scurta descriere a interfetei grafice din linux si modul ei de functionare. Design, despre fiecare componenta mentionata de mine aici s-ar putea scrie mult mai mult, dar articolul asta este deja prea mare asa ca am sa ma opresc aici, dar poate pe viitor am sa mai scriu despre ele.
Pentru orice intrebari puteti posta pe forum, chat sau discord.


Imi place ce faci aici
Daca iti place ce fac aici imi poti cumpara o cafea Buy Me a Coffee at ko-fi.com

Stefanescu Mihai
Programator de ~8 ani, am lucrat la proiecte din mai multe industrstrii, de la eCommerce la telecomunicatii la automatizari. In acest timp am folosi diferite tehnologii, de la PHP, MySQL, PostgreSql, RabbitMq, Redis, Memcached si altele.
       

Get in touch
Pentru nelamuriri, dubii, comentarii si chestii de pe suflet ne putem auzi pe Discord, Reddit sau poti deschide o discutie noua pe forum.

Posteaza un comentariu

Comentarii

Inca nu au fost postate comentarii, fii primul care posteaza un comentariu!

Club-ul este dedicat membrilor si ofera access la mai multe zone ale website-ului.

🗝ïļ Login 🌟 Register

🔖 Bookmarks ⊞
âœĻ Pentru a sustine aceasta comunitate am sa te rog sa te autentifici sau sa te inregistrezi!

🌊ïļ Discord ⊞

Folosim cookie-uri pentru a oferi functionalitatile critice ale aplicatiei Invata-Programare. Folosim cookie-uri si pentru a analiza traficul, pentru care e nevoie de consimtamantul dvs. explicit.

⮆ïļ