X Window System core protocol: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
BetaBot (discussione | contributi)
m Bot: Sistemo note con collegamenti esterni senza titolo (documentazione)
Botcrux (discussione | contributi)
m Bot: Markup immagini (v. richiesta)
Riga 1:
[[Image:X11.svg|thumb|100pxupright=0.5|Il logo di X Window System]]
 
L''''X Window System core protocol''' (protocollo principale di X Window System) <ref name="sche-gett">Robert W. Scheifler and James Gettys: ''X Window System: Core and extension protocols, X version 11, releases 6 and 6.1'', Digital Press 1996, ISBN 1-55558-148-X</ref><ref name="rfc 1013">RFC 1013</ref><ref name="intr">Grant Edwards. [http://www.visi.com/~grante/Xtut/ An Introduction to X11 User Interfaces]</ref> è il protocollo base dell'[[X Window System]], che è un sistema (che lavora in rete) di gestione delle finestre per [[bitmap]] display usato per creare [[Interfaccia grafica|interfacce grafiche utente]] in sistemi [[Unix]], [[Unix-like]] e altri [[sistema operativo|sistemi operativi]]. L'X Window System è basato su un modello [[client-server]]: un singolo [[server]] controlla l'[[hardware]] di[[input/output]], come lo [[schermo]], la [[Tastiera (informatica)|tastiera]] e il [[mouse]]; ogni applicazione ([[Programma (informatica)|programma]]) agisce come un client, interagendo con l'utente e con gli altri client attraverso il server. Questa interazione è regolata dal X Window System core protocol. Esistono altri [[Protocollo (informatica)|protocolli]] relativi all'X Window System, sia costruiti ''sopra'' l'X Window System core protocol sia come protocolli separati.
Riga 11:
La comunicazione fra server e i client avviene mediante lo scambio di pacchetti attraverso un [[Canale (telecomunicazioni)|canale]]. La connessione viene stabilita dal client (nel protocollo non viene specificato come il client viene avviato). Il client invia anche il primo pacchetto, contenente l'[[ordine dei byte]] da usare e informazioni sulla versione del protocollo e il tipo di autenticazione che il client si aspetta che il server usi. Il server risponde con un pacchetto che stabilisce l'accettazione o il rifiuto della connessione, oppure con una richiesta di ulteriore [[autenticazione]]. Se la connessione viene accettata, il pacchetto di accettazione contiene dati per il client da usare nella seguente interazione con il server.
 
[[Image:Xcore-overview.svg|thumb|200px|Un esempio di interazione tra un client e un server.]]
 
Dopo che la connessione viene stabilita, possono venire scambiati quattro tipi di pacchetto fra client e server nel canale:
Riga 38:
Le finestre possono essere di <code>InputOutput</code> o <code>InputOnly</code>. Le finestre che possono essere mostrate sullo schermo e usate per disegnare sono del primo tipo. Quelle del secondo tipo non vengono mai mostrate nello schermo; sono utilizzate solo per ricevere input.
 
[[Image:Xframe (en).png|left|thumb|350pxupright=1.6| Anatomia di una finestra [[FVWM]]. L'area bianca è la finestra come viene creata e vista dall'applicazione client.]]
 
La cornice decorativa e la [[barra del titolo]] (che include eventualmente bottoni) che viene vista di solito attorno alle finestre sono create dal [[window manager]], non dal client che crea la finestra. Il window manager gestisce anche gli input relativi a questi elementi, tipo il ridimensionamento della finestra quando l'utente clicca e trascina il bordo della finestra. I client di solito operano all'interno della finestra che hanno creato, a prescindere dai cambiamenti attuati dal window manager. Un cambiamento che un client deve tenere in considerazione è che i [[re-parenting window manager]] (window manager che adottano tutte le finestre, ovvero le rendono loro figlie), quali sono quasi tutti i window manager moderni, cambiano le finestre top-level in finestre che non sono la radice. Dal punto di vista del core protocol, il window manager è un client, con nessuna differenza rispetto alle altre applicazioni.
Riga 56:
Il core protocol specifica l'uso di font lato-server<ref name="font-faq">[http://www.faqs.org/faqs/fonts-faq/part15/ comp.fonts FAQ: X11 Info]</ref>. Tali font sono salvati su file e il server vi accede o direttamente tramite il [[file system]] locale oppure via rete tramite un altro programma chiamato ''font server''. I client possono fare richiesta della lista di font utilizzabili al server e possono richiedere che un font venga caricato (se non lo è già) o scaricato (se non usato da altri client) dal server. Un client può richiedere informazioni generali sul font (per esempio l'[[ascent]] del font) e lo spazio che una data stringa può occupare quando disegnata con un font specifico.
 
[[Image:Xfontsel.png|thumb|450pxupright=2|Il programma <code>xfontsel</code> permette all'utente di vedere i glifi di un font.]]
 
Il nome dei font sono stringhe arbitrarie a livello del X Window core protocol. Le convenzioni [[X logical font description]] <ref name="logi-font">{{Cita web|url= http://www.xfree86.org/current/xlfd.pdf |titolo= X Logical Font Description Conventions |accesso=30 dicembre 2005 |autore= Jim Flowers |coautori= Stephen Gildea |data= 1994 |formato= PDF |opera= [[Digital Equipment Corporation]] |editore= [[X Consortium]] }}</ref> specificano come i font dovrebbero essere nominati in accordo con i loro attributi. Queste convenzioni specificano anche i valori delle proprietà opzionali che possono essere assegnate ai font.
Riga 96:
L'evento <code>Expose</code> viene inviato quando un'area di una finestra dal contenuto non visibile diventa visibile. Il contenuto di una finestra potrebbe venir distrutto in alcune condizioni, per esempio, se la finestra è coperta e il server non sta mantenendo la backing store. Il server genera un evento <code>Expose</code> per notificare al client che una parte della finestra deve essere disegnata.
 
[[Image:Xevents.svg|thumb|450pxupright=2|Un esempio di evento: quando viene premuto un tasto in una finestra, viene generato un evento e inviato al client a seconda della sua window event mask (maschera degli eventi della finestra) che il client può cambiare.]]
 
La maggior parte di tipi di eventi vengono inviati solo se il client ha mostrato interesse in loro in precedenza. Questo perché i client potrebbero essere interessati solo ad alcuni tipi di eventi. Per esempio, un client potrebbe essere interessato ad eventi relativi alla tastiera ma non a quelli relativi al mouse. Alcuni tipi di eventi sono comunque inviati ai client anche se non ne hanno fatto specificatamente richiesta.
Riga 197:
# lo stato corrente dei modificatori (Shift, Control, ecc.) e dei bottoni del mouse
 
[[Image:Xkeyboard.svg|left|thumb|400pxupright=1.8|Come viene tradotto un keycode in un keysym.]]
 
Il server invia quindi un keycode e lo stato dei modificatori senza cercare di tradurlo in uno specifico carattere. È responsabilità del client fare questa conversione. Per esempio, un client potrebbe ricevere un evento che stabilisce che un dato tasto è stato premuto mentre il modificatore Shift era premuto. Se questo tasto normalmente genererebbe il carattere "a", il client (e non il server) associa questo evento al carattere "A".
Riga 222:
; passiva: la cattura ha luogo solo quando un viene premuto un tasto o un bottone del mouse specificato in precedenza e termina quando questo viene rilasciato.
 
[[Image:Xgrab.svg|thumb|450pxupright=2|Se il puntatore (del mouse) o la tastiera sono ''frozen'' (bloccati, congelati), gli eventi che generano sono bloccati in una coda. Se sono catturati, i loro eventi sono instradati al client che detiene la cattura invece che alla finestra a cui erano destinati. Gli eventi del puntatore possono essere scartati in base alla event mask (maschera degli eventi).]]
 
Una richiesta di cattura può includere una richiesta di ''freezing'' (congelamento) di tastiera o puntatore. La differenza tra cattura e congelamento è che la cattura cambia il destinatario degli eventi, mentre il congelamento ferma proprio la loro consegna. Quando una periferica è congelata, gli eventi che genera sono salvati in una coda da cui essere consegnati normalmente una volta finito il congelamento.
Riga 237:
 
== Estensioni ==
[[Image:Oclock.png|thumb|350pxupright=1.6|La [[shape extension]] permette a un [[oclock]] di creare una finestra circolare.]]
 
Il X Window core protocol fu progettato per essere estensibile. Esso specifica un meccanismo per interrogare le estensioni disponibili e come sono fatti gli eventi, le estensioni, i pacchetti di errore dell'estensione.