X Window System core protocol: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i. #IABot (v1.6.2) |
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. Etichette: Modifica visuale Modifica da mobile Modifica da web per mobile Attività per i nuovi utenti Suggerito: aggiungi collegamenti |
||
(11 versioni intermedie di 10 utenti non mostrate) | |||
Riga 5:
Nell'X Window System core protocol si possono inviare solo quattro tipi di pacchetti, in maniera [[Segnale (informatica)|asincrona]], attraverso la rete: richieste, risposte, eventi ed errori. Le ''Richieste'' vengono inviate da un client ad un server per chiedere ti eseguire alcune operazioni (per esempio, creare una nuova finestra) e ritornare indietro i dati che contiene. Le ''Risposte'' sono inviate dal server per fornire tali dati. Gli ''Eventi'' vengono inviati dal server per notificare ai client dell'attività dell'utente o di altre occorrenze che sono interessati a conoscere. Gli ''Errori'' sono pacchetti inviati dal server per notificare ad un client di errori accaduti durante l'elaborazione delle sue richieste. Le richieste possono generare risposte, eventi ed errori; a parte questo, il protocollo non regola l'ordine specifico in cui i pacchetti sono inviati in rete. Esistono alcune estensioni al core protocol, ognuna delle quali aventi le proprie richieste, risposte, eventi ed errori.
L'X Window System fu concepito al [[Massachusetts Institute of Technology|MIT]] nel 1984 (la sua pubblicazione corrente X11 comparve nel settembre 1987). I suoi progettisti [[Bob Scheifler]] e [[Jim Gettys]] stabilirono come primi principi che il suo core protocol doveva "creare meccanismi e non politiche". Come risultato di ciò, il procollo principale non specifica l'interazione fra i client e tra client e utente. Queste interazioni sono l'oggetto di specifiche separate <ref name="gett">Jim Gettys. [
== Panoramica ==
Riga 26:
== Finestre ==
Quella che di solito in altre interfacce grafiche utente viene chiamata una finestra, è una ''finestra top-level'' (di primo piano) nell'X Window System. Il termine ''finestra'' è anche usato per finestre che stanno dentro un'altra finestra, in altre parole, ''sotto finestre'' di una ''finestra padre''. Gli elementi grafici tipo [[Button (informatica)|bottoni]], [[Menu (informatica)|menu]], [[Icona (informatica)|icone]], ecc. sono tutti realizzati usando finestre.
[[File:Some X windows.png|frame|Un possibile posizionamento di alcune finestre: 1 è la finestra radice, che copre l'intero schermo; 2 e 3 sono finestre top-level; 4 e 5 sono sotto finestre di 2. Le parti di finestra che sono fuori dalla propria finestra genitore non sono visibili.]]
Riga 62:
Il programma <code>xlsfonts</code> stampa la lista dei font immagazzinati nel server. Il programma <code>xfontsel</code> mostra i glifi dei font e permette all'utente di selezionare il nome di un font per usarlo in un'altra finestra.
L'uso di font lato-server è attualmente deprecato in favore dei font lato-client.<ref name="herr-hopf">Matthieu Herrb and Matthias Hopf. [
== Risorse e identificatori ==
Riga 82:
Gli identificatori sono unici anche nel server, non solo nel client; per esempio, due finestre non possono avere lo stesso identificatore anche se create da due client diversi. Un client può accedere ad ogni oggetto noto l'identificatore. In particolare, può anche accedere alle risorse create da un altro client, anche se i loro identificatori sono al di fuori dell'insieme di identificatori che loro (i client) possono creare.
Come risultato di ciò, due client connessi allo stesso server possono usare lo stesso identificatore per riferirsi alla stessa risorsa. Per esempio, se un client crea una finestra con identificatore <code>0x1e00021</code> e passa questo numero <code>0x1e00021</code> ad un'altra applicazione (attraverso qualsiasi mezzo utilizzabile, per esempio salvando questo numero in un file che è accessibile anche all'altra applicazione), questa altra applicazione ha la possibilità di operare proprio nella stessa finestra. Quest'possibilità viene sfruttata per esempio dalla versione X Window di [[Ghostviwe]]: questo programma crea una sotto finestra, salvando il suo identificatore in una [[variabile d'ambiente (Unix)|variabile d'ambiente]] e chiama [[Ghostscript]]; questo programma disegna il contenuto del file [[PostScript]] da mostrare in questa finestra.<ref name="ghos-inte">[
Le risorse sono normalmente distrutte quando il client che le ha create chiude la connessione col server. Comunque, prima di chiudere la connessione, un client può richiedere al server di non distruggerle.
Riga 130:
== Colori ==
A livello di protocollo, un colore è rappresentato da un intero senza segno a 32-bit chiamato ''pixel value''. I seguenti elementi influenzano la [[rappresentazione dei colori]]:
# la [[color depth]] (profondità del colore)
Riga 150:
Questi sei meccanismi per la rappresentazione dei colori con i pixelvalue richiedono tutti per funzionare qualche paramentro addizionale. Questi parametri sono collezionati in una ''visual type'', che contiene una visual class e altri parametri della rapparesentazione dei colori. Ogni server ha un insieme fisso di visual type, ognuna associata ad un identificatore numerico. Questi identificatori sono interi senza segno a 32-bit ma non sono necessariamente diversi dagli identificatori di risorse o atomi.
Quando la connessione da un client viene accettata, il pacchetto di accettazione inviato dal server contiene una sequenza di blocchi, ognuno contenente informazioni su un singolo schermo. Per ogni schermo, il blocco relativo contiene una lista di altri blocchi, ognuno dei quali relativo ad una specifica color depth (profondità del colore) supportata dallo schermo. Per ogni profondità, questa lista contiene una lista di visual type. Come risultato di ciò, ogni schermo è associato ad un numero di possibili profondità, e ogni profondità di ogni schermo è associato a
Per ogni visual type, il pacchetto di accettazione contiene sia gli identificatori che i parametri attuali relativi contenuti (visual class, ecc.) Il client salva queste informazioni, dato che non può richiederle in seguito. In più, i client non possono cambiare o creare nuove visual type. Le richieste per la creazione di una nuova finestra comprendono la profondità e l'identificatore della visual type da usare per rappresentare i colori della finestra stessa.
Le colormap sono usate a prescindere dal fatto che l'hardware che controlla lo schermo (ad esempio una [[scheda grafica]]) usa una [[Tavolozza (informatica)|palette]], che è una tavola che viene anche usata per rappresentare i colori. I server usano colormap anche se l'hardware non sta usando una palette. Ogni volta che l'hardware usa una palette, può essere installato solo un numero limitato colormap. In particolare, una colormap viene installata quando l'hardware può mostrare i colori in accordo con essa. Un client può
La creazione di colori è regolata dalla convenzione [[ICCCM]]. Le colormap standard sono regolate dal [[ICCCM]] e dalle specifiche [[Xlib]].
Una parte del sistema dei colori di X è la ''X Color Management System (xcms)'' (sistema di gestione del colore di X). Questo fu introdotto con X11R6 Release 5 nel 1991. Questo sistema consiste di diverse funzionalità addizionali in xlib, che si trova nella serie di funzioni di Xcms*. Questo sistema definisce schemi di colore ''device independent'' (indipendenti dal dispositivo) che possono essere convertiti in sistemi RGB dipendenti dal dispositivo. Il sistema consiste di funzioni di xlib Xcms* e, come nella X Device Color Characterization Convention (XDCCC) che descrive come convertire i vari sistemi di colori indipendenti dal dispositivo in sistemi di colore RGB dipendenti dal dispositivo. Questo sistema supporta [[CIE XYZ]], xyY, L *u*v e L *a*b così come il TekHVC colour systems.<ref>
== Atomi ==
Riga 181:
Le proprietà sono usate principalmente per la comunicazione fra client. Per esempio, la proprietà chiamata <code>WM_NAME</code> (la proprietà nominata dall'atomo a cui è associata la stringa <code>"WM_NAME"</code>) è usata per salvare il nome per la finestra; i gestori di finestre di solito leggono questa proprietà e visualizzano il nome della finestra nella barra del titolo.
Alcuni tipi di comunicazione inter-client usano proprietà della finestra radice. Per esempio, in accordo con la specifica [[freedesktop]] window manager <ref name="free-desk">[
</ref>, i gestori di finestre dovrebbero salvare l'identificatore della finestra correntemente attiva nella proprietà di nome <code>_NET_ACTIVE_WINDOW</code> della finestra radice. Le [[X resources]], che contengono i parametri dei programmi, sono anch'esse salvate in proprietà della finestra radice; In questo modo, tutti i client possono accedere ad esse, anche se girano in computer differenti.
Riga 207:
Per ognuno degli otto modificatori, il server X mantiene una lista di keycode, che lui considera essere modificatori. Ad esempio, se la lista del primo modificatore ("Shift") contiene il keycode <code>0x37</code> allora il tasto che produce il keycode <code>0x37</code> è considerato un tasto modificatore "di tipo shift" dal server X.
La lista che mappa i modificatori è mantenuta dal server X ma può essere cambiata da ogni client. Per esempio, un client può richiedere che il tasto "F1" venga aggiunto alla lista dei modificatori di tipo "Shift". Da qui in avanti, questo tasto si comporta come un altro modificatore di tipo Shift. Comunque, il keycode corrispondente a F1 viene comunque generato quando questo tasto viene premuto. Come risultato di ciò, F1 opera come faceva prima (ad esempio, potrebbe venire aperta una finestra di help), ma opera anche come il tasto Shift (premendo "a" in un [[editor di testo]] e assieme F1, verrebbe stampato il carattere "A").
Il server X mantiene e usa una mappatura dei modificatori per i bottoni del mouse. Comunque, i bottoni possono essere solo [[Permutazione|permutati]]. Questo è maggiormente utile per scambiare il tasto destro con quello sinistro per gli utenti [[mancinismo|mancini]].
Riga 244:
== Autorizzazioni ==
{{
Quando il client inizialmente stabilisce una connessione con il server, il server può replicare o accettando la connessione o rifiutandola o richiedendo un'[[autorizzazione (informatica)|autorizzazione]]. Il core protocol non specifica il processo di autenticazione, che dipende dal tipo di autenticazione usata, a parte che deve finire con l'invio o di un'accettazione o di un rifiuto da parte del server.
Riga 251:
== Xlib e altre librerie client ==
{{
La maggior parte dei programmi client comunicano con il server attraverso la libreria Xlib client. In particolare, la maggior parte di client usa librerie tipo [[X Athena Widgets|Xaw]], [[Motif]], GTK+, o Qt le quali a loro volta usano Xlib per interagire con il server. L'uso di Xlib ha i seguenti effetti:
Riga 257:
# Xlib rende i client sincroni per quanto riguarda eventi e risposte:
## le funzioni Xlib che inviano richieste si bloccano finché non ricevono le appropriate risposte, se ne aspettano qualcuna; in altre parole, un client X Window che non usa Xlib può inviare una richiesta al server e dopo fare altre operazioni mentre sta aspettando la risposta, ma un client che usa Xlib può solamente chiamare una funzione Xlib che invia la richiesta e aspetta la risposta, perciò bloccando il client mentre aspetta (a meno che un client non faccia partire un nuovo thread prima di chiamare la funzione);
## mentre il server invia gli eventi [[asincrono|in maniera asincrona]], Xlib salva gli eventi ricevuti dal client in
# Xlib non invia richieste al server immediatamente, ma le salva in una coda, chiamata ''output buffer''; le richieste nell'output buffer sono effettivamente inviate quando:
Riga 270:
== Quello che il procollo principale di X Window System non specifica ==
Il procollo principale di X Window non regola la comunicazione inter-client a non specifica come le finestre sono usate per formare gli elementi visuali comuni in un'interfaccia grafica utente (bottoni, menu, ecc.) Gli elementi dell'interfaccia grafica utente sono definiti dalle librerie client che realizzano [[
La comunicazione inter-client è centrale nelle selezioni, cut buffers r nel trascinamento, che sono metodi usati da un utente per trasferire dati fra una finestra all'altra. Dato che le finestre potrebbero essere controllate da programmi diversi, un protocollo per scambiare questi dati è necessario. La comunicazione inter client è rilevante anche per i [[Window manager]] che sono programmi che controllano la visualizzazione delle finestre e il "look-and-feel" generale di una GUI. Un'altra questione ancora dove la comunicazione inter-client è per certi versi rilevante è quella del session manager.
Riga 283:
== Collegamenti esterni ==
* {{en}}[
* {{cita web|
* {{cita web|url=http://www.rahul.net/kenton/bib.html|titolo=Kenton Lee's pages on X Window and Motif|lingua=en|accesso=18 maggio 2009|urlarchivio=https://web.archive.org/web/20130520013725/http://www.rahul.net/kenton/bib.html|urlmorto=sì}}
* {{en}}[ftp://ftp.x.org/pub/X11R7.0/doc/PDF/proto.pdf The X11R7 Protocol Specification]
|