X Window System core-protokol

11-10-2016 Silas Brask X
FONT SIZE:
fontsize_dec
fontsize_inc

X Window System core-protokollen er den grundlæggende protokol af X Window System, som er et system til styring af vinduer til at vise bitmap bruges til at skabe grafiske brugergrænseflader i Unix-systemer, og andre Unix-lignende operativsystemer. X Window System er baseret på en klient-server-model: en enkelt server styrer hardware diinput / output, såsom skærm, tastatur og mus; hver ansøgning fungerer som en klient, interaktion med brugeren og med andre kunder gennem serveren. Denne interaktion er reguleret af X Window System kerne protokol. Der er andre protokoller om X Window System, er bygget oven på X Window System core-protokol enten som separate protokoller.

I X Window System kerne protokol kan sendes kun fire typer af pakker, asynkront, via netværket: anmodninger, svar, events og fejl. Anmodningerne sendes fra en klient til en server for at bede dig om at udføre nogle operationer og vende tilbage de data, den indeholder. Svarene sendes af serveren til at levere sådanne oplysninger. Hændelser sendes af serveren til at underrette kunder brugeren eller andre forekomster, der er interesseret i at vide. Fejl er pakker, der sendes af serveren til at anmelde en klient fejl opstået under behandlingen af ​​dens anmodninger. Anmodning kan generere svar hændelser og fejl; bortset fra at, er protokollen ikke regulere specifikke rækkefølge, som pakker sendes over netværket. Der er nogle udvidelser til kernen protokollen, hver med deres egne anmodninger, svar, events og fejl.

X Window System blev udviklet på MIT i 1984. Dens designere Bob Scheifler og Jim Gettys afregnes som første principper, som sin kerne protokol at "skabe mekanismer og politikker." Som et resultat, er det vigtigste Loft protokollen ikke angive samspillet mellem klienter og mellem klienter og bruger. Disse interaktioner er genstand for specifikt særskilt hvordan specifikke ICCCM og freedesktop.org og er typisk defineret automatisk ved anvendelse af et givet sæt af widgets.

Udsigt

Kommunikation mellem serverne og klienterne udføres gennem udveksling af pakker gennem en kanal. Forbindelsen er etableret af klienten. Klienten sender også den første pakke, der indeholder den byte for at blive brugt, og oplysninger om den version af protokollen og den type godkendelse, at klienten forventer serveren bruger. Serveren svarer med en pakke, der bestemmer accept eller afvisning af forbindelsen, eller med en anmodning om yderligere godkendelse. Hvis forbindelsen er accepteret, accept pakke indeholder data for kunden at bruge i den næste interaktion med serveren.

Når forbindelsen er etableret, kan de byttes fire typer af pakke mellem klient og server i kanalen:

  • Anmod: Klienten anmoder om oplysninger fra serveren, eller beder dig om at udføre en handling.
  • Svar: Serveren svarer på anmodningen. Ikke alle anmodninger generere et svar.
  • Begivenhed: Serveren sender en hændelse til klienten, såsom input fra mus eller tastatur eller et vindue, der er blevet flyttet, ændret størrelse eller udsættes.
  • Fejl: Serveren sender en fejl pakke, hvis en anmodning er ugyldig. Da anmodningerne i kø, kan fejl pakker genereret af en anmodning ikke sendes med det samme.

Pakkerne anmodning og svar er af variabel længde, mens fejl og event pakker har en fast længde på 32 byte.

De anmodning pakker er nummereret fortløbende, da de modtages fra serveren: den første anmodning fra en klient er nummereret 1, andet 2, og så videre. De 16 mindst betydende bit af sekvensen antallet af en anmodning skal indgå i nogen reaktion pakker og fejl genereret af anmodningen. Også de indgår i pakker af begivenhed at angive rækkefølgen antallet af anmodningen, at serveren er i øjeblikket behandler eller har netop afsluttet behandling.

Vinduer

Hvad der normalt i andre grafiske brugergrænseflader kaldes et vindue, det er en top-niveau vindue i X Window System. Udtrykket Vinduet bruges også til vinduer, der er inden for et andet vindue, med andre ord under vinduerne i en overordnet vindue. De grafiske elementer som knapper, menuer, ikoner osv .. De er alle fremstillet ved anvendelse af vinduer.

En klient kan anmode om, at et vindue. Mere præcist kan det anmode om, at en sub-vindue i et eksisterende vindue. Vinduer skabt af klienter er struktureret i et træ. Roden til dette træ er roden vinduet, hvilket er et særligt vindue oprettet automatisk af serveren opstart. Alle andre vinduer er direkte eller indirekte under vinduerne i root-vinduet. Visuelt root-vinduet er så bred som hele skærmen, og bag alle andre vinduer.

Det er ikke altid garanteret, at indholdet af et vindue er bevaret i tid. Især kan indholdet af et vindue blive ødelagt, når et vindue bevæges, skaleret, der er omfattet af andre vinduer, og generelt gjort helt eller delvis synligt. Især vil indholdet blive tabt, hvis X-serveren opretholder en opbakning lagre indholdet i vinduet. Klienten kan anmode om opbakning butik, et vindue bevares, men der er ingen forpligtelse på den del af serveren til at gøre det. Derfor kan kunden ikke antage, at tage backup opretholdes. Hvis en synlig del af et vindue har en uspecificeret indhold, er en begivenhed, sendes til at underrette dig, at indholdet i vinduet skal være gentegnes.

Hvert vindue har et sæt attributter tilknyttet, ligesom geometrien af ​​vinduet, baggrundsbillede, hvis du har lavet en anmodning til den opbakning butik for det osv Protokollen indeholder anmodninger fra klienten til at inspicere og ændre attributterne for et vindue.

Vinduerne kan være enten. Vinduerne, der kan vises på skærmen og som anvendes til tegning er af den første type. De af den anden type er aldrig fremlagt på skærmen; De bruges kun til at få input.

Den dekorative ramme og en titellinje, der normalt ses omkring vinduerne er skabt af vinduet manager, ikke af klienten, der skaber vinduet. Den vindueshåndtering håndterer også input relateret til disse emner, ligesom ændre størrelsen på vinduet, når brugeren klikker og trækker vinduet grænsen. Kunder opererer normalt inden det vindue, der skabte, uanset de ændringer, der gennemføres af window manager. En ændring, som en klient skal tage hensyn til, er, at re-forældrerollen vindueshåndtering, som er næsten alle moderne window managers, ændre øverste niveau vinduer de i vinduer, der er ikke roden. Set fra kernen protokollen, vinduet manager er en klient, med ingen forskel i forhold til andre programmer.

Dataene i et vindue kan opnås ved at udføre programmet. Passing emnet, viser dette program træet under vinduerne i et vindue, sammen med deres identifikatorer og data på geometri.

Pixmap og strækbare

En pixmap er en region af hukommelse, der kan bruges til at trække. I modsætning til vinduer, der pixmaps ikke automatisk trukket på skærmen. Imidlertid kan indholdet af en billedfil overføres til et vindue eller vice versa. Dette muliggør anvendelse af teknikker såsom dobbeltbuffering. Størstedelen af ​​grafik operationer, der kan udføres på et vindue kan også gøres på en pixmap.

Vinduer og pixmaps er begge kaldes drawables, og deres indhold hostes på serveren. En klient kan stadig anmode om, at indholdet af en trækbare overføres fra server til klienten eller omvendt.

Grafik sammenhænge og skrifttyper

Klienten kan anmode om en række grafiske operationer, hvordan man kan rense et område, kopiere område til et andet, tegne punkter, linjer, rektangler, og tekst. Udover rengøring, alle andre operationer er mulige på alle objekter, begge vinduer, pixmap.

Størstedelen af ​​anmodninger om grafik operationer omfatter en grafisk sammenhæng, hvilket er en struktur, der indeholder parametrene for de grafiske operationer. En grafisk kontekst indeholder en forgrundsfarve, en baggrundsfarve, skrifttype og andre parametre diagrammer. Når en operation kræver grafik, klienten indeholder en grafisk sammenhæng. Ikke alle parametre for den grafiske sammenhæng er nødvendige for driften: f.eks skrifttypen har ingen effekt i trække en linje.

Kernen protokollen specificerer brugen af ​​server-side skrifttype. Disse skrifter er lagret på en filserver og få adgang til det direkte eller gennem det lokale filsystem eller netværk via et andet program kaldet skrifttype server. Kunderne kan anvende listen over skrifttyper, der anvendes i serveren, og kan kræve, at en skrifttype lastes eller losses fra serveren. En klient kan anmode om oplysninger om skrifttype og plads, der kan indtage en given streng, når tegnet med en bestemt skrifttype.

Navnet på skrifttypen er vilkårlige strenge på X Window kerne protokol. Konventioner X logiske font beskrivelse angive, hvordan skrifttypen skal udpeges efter deres attributter. Disse konventioner også angive ejendomsværdier, der kan tildeles til de valgfrie skrifttyper.

Programmet udskriver en liste over skrifttyper, der ligger på serveren. Programmet viser skrifttype glyffer og giver brugeren mulighed for at vælge navnet på en skrifttype til at bruge det i et andet vindue.

Brugen af ​​server-side skrifttype er nu forældet til fordel for klientsiden skrifttype. Disse skrifter er afsagt af kunden, ikke serveren, med understøttelse af grafik biblioteker Xft eller cairo og udvidelse XRender. Ingen specifik dato er skrifttypen i klient-side core-protokollen.

Ressourcer og identifikatorer

Dataene for vinduerne, pixmaps, skrifttyper mv De holdes på serveren. Klienten kender identifikatorer for disse objekter ved hjælp navne som når interagere med serveren. For eksempel, hvis en kunde ønsker oprettelsen af ​​et vindue, det kræver serveren for at oprette et vindue med en given identifikator. Identifikationen kan senere anvendes af klienten til anmodninger, for eksempel, at en streng trækkes i vinduet. Følgende genstande er kendt for at opholde sig i serveren klienten gennem numeriske identifikatorer:

Disse objekter kaldes ressourcer. Når en klient anmoder om oprettelsen af ​​en sådan ressource, angiver også et id for det. For eksempel, for at skabe et nyt vindue, kunden angiver både attributterne for vinduet er tilknyttet identifikator med vinduet.

Identifikatorerne er heltal til 32-bit med de 3 mest betydende bit svarende til 0. Hver klient har sit eget sæt af identifikatorer, der kan bruges til at skabe nye ressourcer. Dette sæt er angivet af serveren med to heltal inkluderet i pakken accept. Kunderne vælger de identifikatorer, der er i samme båd, så at have nogen overlappende to objekter mellem vinduer, pixmaps, skrifttyper, colormaps og grafisk sammenhæng måske ikke har samme id.

Når en ressource er blevet skabt, er dens id anvendes af klienten til at anmode om udførelse af operationer på det til serveren. Nogle operationer, der omfatter ressourcer datoer; andre kræver ressourcer Data gemt af serveren.

De identifikatorer er også enestående i serveren, ikke kun i klienten; for eksempel kan to vinduer ikke har samme identifikator selvom skabt af to forskellige kunder. En klient kan få adgang til alle kendte objekt-id. Især kan det også få adgang til ressourcer som følge af en anden klient, selv om deres identifikatorer er uden for sæt identifikatorer at de kan skabe.

Som et resultat af dette, kan to klienter tilsluttet til den samme server bruge den samme identifikator til at henvise til den samme ressource. For eksempel, hvis en kunde skaber et vindue identifikator og passerer dette antal til et andet program, det andet program har evnen til at operere netop i det samme vindue. Quest'possibilità udnyttes for eksempel ved X Window versionen af ​​Ghostviwe: Dette program skaber en sub-vindue, hvilket sparer sin identifikator i en miljøvariabel og kaldte Ghostscript; Dette program tegner indholdet af PostScript-filer skal vises i dette vindue.

Ressourcer normalt ødelagt, når den klient, der skabte dem lukker forbindelsen med serveren. Men før du lukker forbindelsen, kan en klient bede serveren ikke at ødelægge dem.

Begivenheder

Events er pakker, der sendes fra serveren til klienten til at kommunikere, at noget kunden kan være interesseret i at vide det skete. For eksempel er en begivenhed, sendes, når brugeren trykker på en tast eller lave et klik på en museknap. Begivenhederne er ikke kun bruges til input; for eksempel, er begivenheder sendes for at angive oprettelsen af ​​et nyt sub vindue af et givet vindue.

Hvert arrangement er relateret til vinduet. For eksempel, hvis brugeren klikker, når markøren er i et vindue, vil begivenheden blive for denne dialog, begivenheden pakken indeholder identifikatoren for dette vindue.

En klient kan anmode serveren om at sende en begivenhed til en anden klient; dette bruges til kommunikation mellem klienter. En sådan begivenhed er genereret, for eksempel, når en kunde anmoder om tekst, der aktuelt er valgt: Denne begivenhed er sendt til kunden, der kører i den tid vindue, der holder valget.

Arrangementet sendes, når et område af et vindue ikke er synlig fra det indhold, bliver synlig. Indholdet af et vindue kan ødelægges under visse omstændigheder, for eksempel hvis vinduet er dækket og serveren opretholder underlag butik. Serveren frembringer et arrangement for at oplyse klienten, at en del af vinduet skal udformes.

De fleste typer af hændelser sendes kun, hvis klienten viste interesse i dem tidligere. Dette skyldes, at kunden kan være interesseret i kun visse typer hændelser. For eksempel kan en klient være interesseret i arrangementer i forbindelse med tastatur, men ikke dem i forhold til musen. Nogle typer af hændelser er stadig sendt til kunder, selv om de ikke specifikt har anmodet om.

Kunder angive, hvilke typer af arrangementer, du ønsker at blive sendt ved at indstille en egenskab af et vindue. For eksempel, for at sikre at gentegne et vindue, når dens indhold er blevet ødelagt, skal en klient modtage begivenheder, der informerer ham om, at vinduet skal tegnes igen. Men kunden vil blive sendt begivenheder, hvis han tidligere har gjort sin interesse i disse arrangementer, og dette gøres korrekt indstilling af attribut af masken vinduet begivenheder.

Kunder kan kræve forskellige arrangementer i samme vindue. De kan også indstille masker af forskellige hændelser i det samme vindue. For eksempel kan en klient anmode kun tastatur begivenheder i et vindue, mens en anden klient kan anmode kun musebegivenheder i samme vindue. Dette er muligt, fordi serveren, for hvert vindue, det opretholder en særskilt begivenhed maske for hver klient. Men der er nogle typer af begivenheder, der kan kun vælges fra en klient ad gangen for hvert vindue. Især disse begivenheder indeholder et klik på museknapperne og nogle ændringer i ledelsen af ​​vinduet.

Programmet viser begivenhederne i forhold til et vindue. Navnlig kræver alle mulige arrangementer for vinduet identifikator og udskriver.

Eksempel

Det følgende er et muligt eksempel på samspil mellem en server og et program, der skaber et vindue med en sort boks inde og vises ved tryk på en knap. I dette eksempel, er serveren ikke sende noget svar, fordi kunden anmodningen ikke vil generere svar, men kan generere fejl.

  • Klienten åbner en forbindelse til serveren og sende den oprindelige pakke angivelse af byte for at bruge.
  • Serveren accepterer forbindelsen ved at sende en passende pakke, der indeholder andre indormazioni Type Identifikation af roden vinduet og identifikatorer såsom klienten kan skabe.
  • Klienten anmoder om at skabe en grafisk sammenhæng med standard-id.
  • Klienten beder serveren for at oprette en top-niveau vindue med id, størrelse 200x200. position osv
  • Klienten anmoder om ændring af attributter for vinduet, med angivelse af interesse i at modtage de begivenheder og
  • Klienten anmoder om, at vinduet er kortlagt.
  • Når vinduet er gjort synlige og må drages dens indhold, sender serveren klienten en begivenhed.
  • Som reaktion på denne hændelse, klienten kræver, at du har designet en boks ved at sende en anmodning med identifikator og vindue grafik kontekst.

Hvis vinduet blev dækket af et andet vindue og opdages igen, forudsat at bagsidelaget butikken ikke opretholdes, så:

  • Serveren sender en anden begivenhed at fortælle klienten at vinduet skal tegnes.
  • Klienten gentegner vinduet ved at sende en forespørgsel.

Hvis der trykkes på en tast:

  • Serveren sender en hændelse til klienten som meddelelse om, at brugeren har trykket på en tast.
  • Klienten reagerer i overensstemmelse hermed.

Farver

På den protokol-niveau, er en farve repræsenteret ved et usigneret 32-bit værdi kaldet pixels. Følgende elementer påvirker farvegengivelse:

  • farvedybden
  • farvekortet, som er en tabel, der indeholder de værdier af intensitet
  • den visuelle type. der angiver, hvordan tabellen bruges til at repræsentere farver

I en kode så enkel som muligt, er colormap er en tabel med en tredobbelt RGB i hver række. En pixelvalue repræsenterer farveindhold nell'-th række i tabellen. Hvis klienten kan ændre oplysningerne i colormap, er denne repræsentation identificeret ved visuel klasse. Den visuelle klasse er lignende, men kunden kan ikke ændre poster i colormap.

Der er i alt 6 mulige visuelle klasse, som hver især identificerer en anden måde at repræsentere en pixelvalue med en tredobbelt RGB. og er to. og er to, som adskiller sig fra den første ved, at de kun anvendes gråtoner.

De to visuelle klasse, der fortsat er forskellige fra tidligere, fordi outsource pixelvalue i tre dele og bruge tre separate tabeller intensiteten af ​​rød, grøn og blå. I overensstemmelse med denne farve gengivelse, er en pixelvalue konverteres til en tredobbelt RGB som følger.

  • Den pixelvalue ses som en bitsekvens
  • sekvensen nedbrydes i tre dele
  • hver af disse tre bitsekvenser ses som en helhed og anvendt som et indeks for at finde en værdi i hver af disse tre separate tabeller

Denne mekanisme kræver, at colormap består af tre separate tabeller, en for hver primærfarve. Resultatet af konverteringen er stadig en tredobbelt af intensitetsværdier. Den visuelle klasse, der bruger denne repræsentation er, og som adskiller sig i udlejning eller ikke at ændre colormap brugeren.

Disse seks mekanismer til repræsentere farver med pixelvalue kræver alle til at arbejde nogle ekstra parameter. Disse parametre er samlet i en visuel form, som indeholder en visuel klasse og andre parametre for rapparesentazione af farver. Hver server har et fast sæt af visuelle type, hver forbundet med en numerisk identifikator. Disse identifikatorer er signeret 32-bit, men er ikke nødvendigvis forskellige fra de ressource identifikatorer eller atomer.

Når forbindelsen fra en klient accepteres, accept pakke sendt fra serveren indeholder en sekvens af blokke, der hver indeholder information på en enkelt skærm. For hvert skærmbillede, den relevante blok indeholder en liste over andre blokke, som hver især knyttet til en bestemt farvedybde understøttes af skærmen. For hver dybde, denne liste indeholder en liste over visuel type. Som et resultat af dette, er hver skærm forbundet med en række mulige dybde, og hver dybde af hver skærm er forbundet med en række en række mulige visuelle typer. En opdateret visuelt type kan anvendes til mere end én skærm og for forskellige dybder.

For hver visuelle type, accept pakke indeholder både identifikatorer, at de nuværende parametre relateret indhold Klienten gemmer denne information, da den ikke kan anmode om dem senere. Desuden kan kunderne ikke ændre eller oprette nye visuelle type. Anmodningerne om oprettelsen af ​​et nyt vindue omfatter dybden og identifikationen af ​​den visuelle type til at bruge til at repræsentere farverne på selve vinduet.

Colormaps anvendes uanset den omstændighed, at den hardware, der styrer skærmen ved hjælp af en palet, som er et bord, der også bruges til at repræsentere farver. Serverne bruger colormap selvom hardwaren ikke bruger en palet. Når hardwaren bruger en palet, kan det kun installeres en begrænset colormap. Især er en colormap installeret, når hardwaren kan vise farver i overensstemmelse med det. En klient kan richidere serveren for at installere en colormap. Dette kan dog kræve fjernelse af et andet colormap: effekten er, at vinduerne, der bruger en colormap fjernet vises ikke med korrekte farver, en effekt kaldet farve blinkende eller Technicolor. Dette problem kan løses ved anvendelse af standard colormap colormap er en forudsigelig sammenhæng mellem pixelvalue og farver. Takket være denne egenskab, kan Colormaps standarden bruges af forskellige programmer.

Oprettelse farver det er reguleret af traktaten ICCCM. Colormaps standarder reguleres af ICCCM og specifik Xlib.

En del af systemet fra X-farve er X Color Management System. Dette blev indført med X11R6 version 5 i 1991. Dette system består af flere ekstra funktioner i xlib, som er placeret i rækken af ​​funktioner XCMS *. Dette system definerer enhed uafhængig farveskemaer, der kan konverteres til enheds-afhængige RGB-systemer. Systemet består af funktioner Xlib XCMS * og, som i X Device Color Karakterisering konventionen beskriver hvordan man kan konvertere de forskellige systemer af farve enhedsuafhængige farvesystemer RGB-enhed afhængige. Dette system understøtter CIE XYZ, XYY, L * u * ve L * a * b farvesystemer samt TekHVC.,

Atomer

Atomer er 32-bit heltal, der repræsenterer strenge. Designerne i protokollen indført atomerne til at repræsentere strenge med en fast størrelse og korte: mens en streng kan være vilkårligt lang, et atom er altid en fuld 32-bit. Den lille størrelse af et atom blev udnyttet i de typer af pakker, der skal tendens sendt mange gange med de samme strenge; hvorved der opnås en mere effektiv udnyttelse af netværket. Den faste størrelse af et atom blev udnyttet ved at angive en fast størrelse for hvert arrangement i 32 bytes faste pakker størrelse kan indeholde atomer, men ikke possno indeholde strenge.

Nemlig atomerne er identifikatorer for strenge, der er lagret i serveren. De ligner indetificatori ressourcer, men adskiller sig fra disse to grunde. Når en klient anmoder om oprettelsen af ​​en ny atom, serveren sender kun strengen for at spare, ikke dens id; Denne identifikator er valgt af serveren og returneres som en reaktion på klienten. Den anden store forskel mellem ressourcer og atomer er, at atomerne ikke er forbundet med kunden. Når den er oprettet, et atom overlever indtil serveren lukker ned eller genstarter.

Atomerne er identifikatorer og er derfor unikt. En identifikator for atom og en ressource, kan imidlertid falde sammen. Strengen er forbundet med et atom kaldes atom navn. Navnet på et atom kan ikke ændres efter oprettelsen og to atomer kan ikke have samme navn. En konsekvens af dette, navnet på et atom er comunenmente anvendes til at angive det samme atom: "Den atom" betyder netop, "det atom, hvortil strengen er forbundet med" eller "atomet med navnet". En klient kan anmode om, at et nyt atom, men også identifikationen af ​​et atom af en given streng. Nogle atomer er "default".

Atomerne anvendes til en række formål, mest i forbindelse med kommunikation mellem flere klienter tilsluttet til den samme server. Især anvendes de associere egenskaberne for vinduer, der er beskrevet ovenfor.

Listen over alle atomerne er bosiddende på en server kan udskrives ved hjælp af programmet. Især dette program udskriver hvert atom med navn.

Ejendom

Hvert vindue har et foruddefineret sæt af attributter og et sæt egenskaber, alle gemte til serveren og tilgængelige for kunderne via passende anmodninger. Attributter er data om vinduerne, da deres størrelse, placering, baggrundsfarve osv Egenskaberne er vilkårlige stykker af data i forbindelse med vinduet. I stedet for attributter, egenskaber ikke har nogen betydning på niveauet for X Window core protokol. En klient kan lagre vilkårlige data i en egenskab af et vindue. Egenskaberne anvendes for det meste til kommunikation fra klient til klient.

En egenskab er karakteriseret ved et navn, en type og en værdi. En ejendom svarer til en variabel i et bydende nødvendigt sprog, hvor ansøgningen kan oprette en ny ejendom med et fornavn og en bestemt type og gemme en værdi. Egenskaber er forbundet til vinduer: to egenskaber med samme navn, med forskellige typer og værdier kan eksistere i to forskellige vinduer.

Det navn, type og værdi af en ejendom er strenge, mere præcist, er atomer eller Strighe gemmes på serveren og klienten gennem accessibli identifikatorer. En klient program kan få adgang til en given egenskab ved hjælp af id af atomet indeholder navnet på ejendommen.

Ejendommene er primært anvendes til kommunikation mellem klienten. For eksempel er ejendommen opkald bruges til at gemme navnet på vinduet; vindueshåndteringer læse typisk denne egenskab og vise navnet på vinduet i titellinjen.

Nogle typer af inter-klient brug egenskaber root-vinduet. For eksempel, i overensstemmelse med den specifikke freedesktop vindueshåndtering, bør vindueshåndteringer spare identifikationen af ​​det aktuelt aktive vindue i Navn egenskab af roden vinduet. X ressourcer, som indeholder parametrene for programmerne er også gemmes i roden vinduesegenskaber; På denne måde kan alle klienter få adgang til dem, selv om der kører på forskellige computere.

Programmet udskriver egenskaberne for et givet vindue; Udskriv navn, type og værdien af ​​hver enkelt ejendom i root-vinduet.

Kortlægninger

I X Window System, er hver tast forbundet med en række i området 8-255 kaldet keycode. Den identificerer en nøglekode af en nøgle, ikke en bestemt tegn eller ord blandt dem, der kunne være afbildet i knappen. Hver af disse tegn eller udtryk i stedet identificeret ved en keysym. Mens en keycode afhænger kunaf nøglen bare presset, en keysym kan afhænge, ​​for eksempel ved tryk eller mindre af Shift-tasten eller en anden modifikator.

Når der trykkes eller udgivet en nøgle, serveren sender begivenheden type eller den relevante klient. Denne begivenhed indeholder:

  • den keycode af tasten trykket
  • den aktuelle status for modifikatorer og museknap

Serveren sender derefter en nøglekode og modificerende tilstand uden at forsøge at oversætte det til et bestemt tegn. Det er kundens ansvar at gøre denne konvertering. For eksempel kan en klient modtager en begivenhed, der hedder, at en given knap er trykket, mens Shift modifier blev trykket. Hvis denne nøgle normalt ville generere tegnet "a", klienten associerede denne begivenhed til karakteren "A".

Mens oversætte keycode i keysym er lavet af klienten, er bordet, der repræsenterer de foreninger opretholdes på serveren. Gem denne tabel i en centraliseret sted, hvilket gør det tilgængeligt for alle kunder. Den typiske kunde kræver kun denne kortlægning og bruge den til at afkode nøglekode og modifikatorer af en begivenhed i forbindelse med en knap i en keysym. Dog kan kunderne også ændre denne kortlægning efter behag.

X-serveren arbejder med højst otte modifikatorer. Imidlertid kan hver modifikator være forbundet med mere end én nøgle. Dette er nødvendigt, fordi mange tastaturer har taster duplikeres for de samme midler. For eksempel har mange tastaturer har to nøgler "Shift". Disse taster producerer to forskellige keycode når der trykkes, men X-serveren associerer dem begge til ændring "Shift".

For hver af de otte modifikatorer, X-serveren vedligeholder en liste over keycode, som han anser for at være modifikatorer. For eksempel, hvis listen i første modifikator indeholder nøglekoden er knap, der gør nøglekoden betragtes som en kombitast "type shift" af X-serveren

Den liste, der kortlægger modifikatorer vedligeholdes af X-serveren, men kan ændres ved hver klient. For eksempel kan en klient anmode om, at "F1" tilføjes til listen over modifikatorer såsom "Shift". Herfra på, denne knap opfører sig som en anden type modifier Shift. Imidlertid er keycode svarende til F1 stadig genereres, når der trykkes på knappen. Som et resultat, F1 arbejde som det gjorde før, men også fungerer som shift-tasten.

X-serveren vedligeholder og anvender en kortlægning modifikatorer til museknapper. Imidlertid kan knapperne kun udveksles. Det er mere bekvemt at udveksle højre og venstre for venstrehåndede brugere.

Programmet viser og ændre afbildninger nøgler, modifier og museknapper.

Grabs

En grab er en tilstand, hvor alle begivenhederne i musen eller tastaturet sendes til en enkelt kunde. En klient kan anmode om erobringen af ​​mus, tastatur, eller begge dele, hvis anmodningen godkendes af serveren, er alle begivenheder mus / tastatur sendt til kunden, der har anmodet om anholdelsen, indtil fangsten er frigivet. Andre kunder vil ikke modtage disse begivenheder.

Når kræver en grab, grab en klient angiver et vindue: alle hændelser sendes til kunden, som om de var relateret til grab vinduet. Imidlertid er andre klienter ikke modtager begivenheder, selvom du har valgt grub vinduet. Der er to typer af fangster:

En anmodning om anholdelse kan indeholde en anmodning om at fryse tastaturet eller pointer. Forskellen mellem fangst og frysning er, at indfangning ændrer modtageren af ​​begivenhederne, mens frysning stopper deres levering. Når en enhed er frosset, at de begivenheder, der genereres lagres i en kø leveres normalt når du frysning.

For pointer arrangementer, er der en ekstra parameter, der påvirker leveringen af ​​begivenheder: en begivenhed maske, der angiver, hvad former for arrangementer, der skal leveres, og som skal kasseres.

Anmodningen omfatter en fange felt til at angive, hvad der sker med de begivenheder, der ville blive sendt til klienten holder fangsten, men har ikke fastlagt fangsten. Især kan kunden anmode om disse sendes normalt efter aftale med capture. Disse to betingelser er ikke det samme som det måske ser ud. For eksempel vil en kunde får normalt tastatur begivenheder i det første vindue kan kræve tastaturet er fanget af et andet vindue. Begivenhederne er normalt sendes til det første vindue kan eller ikke kan blive omdirigeret til fange vindue i henhold til parameter i anmodningen om anholdelsen.

En klient kan også kræve erobringen af ​​en hel server. I dette tilfælde vil ingen anmodning blive behandlet af serveren undtagen fra den klient, der har anmodet om fange.

Andet

I core-protokol er der andre typer af arrangementer og anmodninger. En første type af anmodninger er relateret til forholdet mellem slægtskab mellem vinduer: en klient kan anmode om at ændre far til et vindue eller kan anmode om oplysninger om forholdet af vinduerne. Andre krav er relateret til udvælgelse, som under alle omstændigheder er reguleret for det meste af andre protokoller. Andre krav er i fokus og formen af ​​markøren. En klient kan anmode om, at ejeren af ​​en ressource, der skal dræbes, hvilket forårsager afbrydelse af forbindelsen til serveren. Endelig kan en klient anmode om at sende en anmodning til serveren no-operation.

Udvidelser

X Window kerne-protokollen er designet til at være strækbar. Den specificerer en mekanisme til at forespørge de tilgængelige udvidelser, og hvordan de er lavet arrangementer, udvidelser fejl pakker extension.

Især kan en klient anmode om data på et bestemt lokalnummer fra listen over tilgængelige udvidelser. Pakker af forlængelserne svarer til dem af kernen protokollen. Kernen Protokollen præciserer, at anmodninger, events og fejl-pakker, der indeholder et heltal, der angiver typen. En lang række af disse er forbeholdt udvidelser.

Godkendelser

Når kunden først etablerer en forbindelse med serveren, kan serveren replikere eller at acceptere eller afvise forbindelse eller anmodning om tilladelse. Kernen protokollen specificerer ikke godkendelsesprocessen, som afhænger af, hvilken type godkendelse der anvendes, bortset fra at skal ende med at sende eller godkendelse eller afvisning af serveren.

Under den regelmæssige samspil mellem klient og server, beder kun til godkendelse med hensyn for at få adgang host-baserede. Især kan en klient anmoder om, at denne metode er aktiveret, og kan kræve læsning og ændring af liste over kunder, der har lov til at forbinde. Typiske anvendelser ikke bruger disse anmodninger; Disse bruges af programmet til at give brugeren eller scriptet adgang til listen adgang. Værten-baserede adgang metode anses usikker.

Xlib og andre klient biblioteker

De fleste klientprogrammer kommunikerer med serveren via Xlib biblioteket klient. Især de fleste klient bruger biblioteker skriver Xaw, Motiv, GTK + eller Qt som igen anvender Xlib til at interagere med serveren. Brugen af ​​Xlib har følgende effekter:

  • Xlib klient gør synkron om begivenheder og reaktioner:
    • Xlib funktioner, der sender forespørgsler er blokeret, indtil de får de rette svar, de forventer en person; med andre ord, kan en X-klient, der ikke bruger Xlib sende en anmodning til serveren og derefter gøre andre operationer, mens den venter på svar, men en klient vha Xlib Xlib kan kun kalde en funktion, der sender anmodningen og vente på et svar, Derfor blokerer klienten, mens du venter;
    • mens serveren sender begivenheder asynkront, Xlib sparer hændelser modtaget fra kunden i en kø; klient program kan få adgang til det kun eksplicit kalde bibliotekets funktioner X11; Med andre ord, er kunden tvunget til at hænge eller stå i optaget venter, hvis du venter på en begivenhed.
  • Xlib sender ikke anmodninger til straks serveren, men gemmer dem i en kø, kaldet output buffer; anmodninger i udgangsbufferen faktisk sendes, når:
    • cyklus kræver udtrykkeligt sender kalde et bibliotek funktionstype;
    • programmet kalder en funktion, der fører til noget, der indebærer en anmodning fra serveren, type;
    • programmet beder om en hændelse i tilfælde køen og opkaldet blokke.

Biblioteker højeste niveau typen Xt tillader klienten at angive callback funktioner i forbindelse med visse begivenheder; biblioteket du holder af at forespørge begivenheden køen ved at kalde den relevante funktion, når det kræves; Nogle begivenheder som dem, der angiver behovet for at gentegne et vindue styres internt af Xt.

Biblioteker lavt niveau typen XCB, giver asynkron adgang protokol, der giver en bedre fortielse af latens.

Hvad det vigtigste Loft protokollen af ​​X Window System angiver ikke

Den vigtigste X Window Loft protokol regulerer ikke inter-klient kommunikation angiver ikke, hvordan vinduerne er anvendt til at danne de visuelle elementer i de fælles grafiske brugergrænseflade grafisk brugergrænseflade elementer er defineret af klienten biblioteker, der gør widgets toolkit. Den inter-klient kommunikation anses af andre standard typen specifikationer og ICCCM freedesktop.

Den inter-klient kommunikation er central i valgene, afskårne buffere ri træk, som er metoder, der anvendes af en bruger til at overføre data fra ét vindue til et andet. I betragtning af, at vinduerne kan styres af forskellige programmer, er det nødvendigt en protokol til at udveksle disse data. Kommunikation mellem klient er også relevant for vindueshåndtering, som er programmer, der styrer visningen af ​​vinduer og "look-and-feel" af generel GUI. Et andet spørgsmål stadig, hvor inter-klient kommunikation er noget relevant, er, at af sessionen manager.

Som bruger starter en session er en anden sag ikke omfattet af kernen protokollen. Normalt sker dette automatisk af skærmhåndteringen. Du kan stadig starte en session manuelt ved at dreje programvælgeren xinit eller startx.

Forrige artikel Xavier Garbajosa
Næste artikel Xinglongwa kultur