Come funzionano le applicazioni KDE su Gnome?


19

Se Gnome usa GTK + e KDE usa Qt, come mai le applicazioni KDE possono essere eseguite con Gnome?

Risposte:


30

Sia GTK che Qt sono toolkit per la creazione di interfacce grafiche. Ogni toolkit dell'interfaccia utente fornisce le proprie funzioni ai programmi per creare widget (pulsanti, caselle di testo ...) e si presenta sotto forma di librerie a cui si collega il programma grafico. Un programma scritto per GNOME utilizzerà GTK ( libgdke libgtk), mentre i programmi KDE usano Qt ( libQtCoree libQtGui), i programmi Enlightenment usano EFL e così via.

Tuttavia, tutti questi toolkit usano lo stesso sistema X Window e lo stesso protocollo X11 . Per far apparire le cose sullo schermo, il toolkit si collega al server X in esecuzione (di solito Xorg, precedentemente chiamato XFree86), invia comandi X11 (crea finestra, disegna qualcosa in una finestra) e riceve eventi di input X11 (mouse, tastiera, ridimensionamento della finestra , ecc.) indietro.

(La maggior parte dei toolkit moderni, come GTK, Qt o EFL, eseguono da soli disegni fantasiosi e basta usare X11 per inviare l'immagine finita dell'intera finestra e il server X lo mette semplicemente sullo schermo. I toolkit più vecchi come lXaw o Motif invece usano X11 per disegnare primitive come linee o rettangoli o testo e il server X esegue tutto il rendering.)

Il server X fa quindi il lavoro di mettere tutto insieme, parlare con la scheda grafica e così via. In questo modo, è possibile eseguire programmi che utilizzano varie versioni diverse di diversi toolkit, perché alla fine usano solo le stesse funzionalità del sistema operativo.

Meccanismo, non politica

La situazione del toolkit multiplo non è unica per X - ad esempio, troverai programmi Windows che usano lo standard comctl32ma anche WPF, .NET WinForms, Chrome's Aura, Firefox's XUL e persino lo stesso GTK o Qt. La maggior parte dei giochi utilizza i propri controlli in stile. Davvero, questo è possibile su qualsiasi sistema grafico che ti consente di disegnare un'immagine attraverso l'intera finestra.

Tuttavia, uno dei principi di X era "meccanismo, non politica". Ciò significa che il server X fornisce solo il meccanismo ai suoi client (programmi grafici) per fare varie cose, ma impone il minor numero di regole necessarie . In altre parole, X lo prende in misura maggiore rispetto a qualsiasi altro sistema grafico.

Ad esempio, una delle parti integranti di un sistema grafico è la gestione delle finestre : il disegno di cornici (ovvero decorazioni) attorno a ciascuna finestra, la possibilità di spostare e ridimensionare le finestre e così via. Windows e OS X hanno un gestore di finestre integrato nel sistema, ma in X funziona come un programma separato: la suite X.Org è dotata di un minimo twm, ma quasi tutti gli ambienti desktop hanno i loro gestori di finestre (GNOME aveva Sawfish, Metacity, gnome-shell; KDE ha KWin) che fornisce l'integrazione con il rispettivo ambiente desktop.

(Come i toolkit, i moderni gestori di finestre "compositing" assumono effettivamente il compito di Xorg di comporre tutte le finestre sull'immagine finale dello schermo, consentendo l'aggiunta di elementi come ombre o effetti.)

Con i moderni ambienti desktop, anche questo ha creato problemi. Per usare l'esempio più comune: la stessa funzionalità "afferra tastiera" viene utilizzata dai tasti di scelta rapida; menu a comparsa; e salvaschermi e solo un programma alla volta può usarlo. Ciò significa che non è possibile bloccare lo schermo mentre è aperto un menu a comparsa o saltare brani mentre lo schermo è bloccato. È uno dei numerosi motivi per cui Wayland viene creato come sostituto di X11.

Nota a margine

Tecnicamente, questo significa anche che potresti eseguire programmi X su un altro computer, parlando con il server X sul tuo computer in rete. In effetti, questo era il principale caso di utilizzo nei primi tempi, ed è da qui che deriva il nome "X server ". È possibile eseguire un server X su un Mac e visualizzare finestre create da programmi in esecuzione su Linux, FreeBSD, anche OpenVMS.

Tuttavia, come accennato in precedenza, i moderni toolkit eseguono tutti i disegni sul lato client (grafica elaborata e caratteri graziosi sono piuttosto difficili da fare con le primitive X11) e trasferiscono solo le immagini finali al server X, che è molto veloce localmente, ma richiede un buona parte della larghezza di banda della rete.

(Altri protocolli, come RFB (aka VNC) o Microsoft "Remote Desktop", sono progettati per questo e hanno modi molto efficienti di comprimere le immagini delle finestre.)


1
Il ciclo di eventi di Qt racchiude GTK, quindi puoi anche combinare il codice Qt e GTK nella stessa applicazione (di solito questo si presenta solo con plug-in simili).
Alex P

@Alex: Intendi dire "può avvolgere" nel loop di eventi di Qt in grado di fornire eventi a GTK, o stavi dicendo che Qt si basa effettivamente su GLib per il loop di eventi?
Grawity

1
Qt può usare anche la sua pura implementazione del loop degli eventi, ma avvolge gli Glib di default (almeno, in Qt4 - non ho visto come lo fa Qt5). C'è un flag nascosto ($ QT_NO_GLIB) che lo controlla in fase di esecuzione.
Alex P

7

Parte della risposta è che i principali ambienti desktop (Gnome, KDE, XFCE, forse altri) lavorano insieme su http://freedesktop.org per rendere possibile tale interoperabilità. Una delle specifiche pubblicate da FD.o è EWMH , che garantisce un certo livello di compatibilità tra gestori di finestre (per caratteristiche moderne, non solo di gestione di base della finestra).


4

Quando eseguite sotto GNOME, le applicazioni di KDE chiamano ancora le librerie Qt condivise da cui dipendono. La stessa cosa vale per qualsiasi applicazione in esecuzione in qualsiasi altro ambiente desktop. Non pongono restrizioni su ciò che può essere chiamato e cosa non può.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.