Da je uspeh Microsofta i Intela zavisio od toga kako njihove proizvode vide
programeri, možda za ove dve firme ne biste ni znali. Pogledajmo kako su prozore zamislile
kolege sa MIT-a...
Grafički korisnički interfejs (GUI) se i na Unix -u realizuje kroz sistem prozora. Ime mu je
X Window System , skraćeno X. Programiranje pod X-om ima sličnosti sa programiranjem pod
Microsoft Windows -om, što znači da predstavlja neiscrpnu temu. Među čitaocima verovatno nema
mnogo onih koji će potrošiti silno vreme da bi dobro upoznali X programiranje, ali verujemo da
bi mnogi bacili pogled i na tu stranu, ako ni zbog čega drugog a ono iz radoznalosti. U ovom
članku opisaćemo X kao sistem, a u sledećem napisati "Hello, X!" program.
(Ne)zavisno od Unix-a
X je koncipiran nezavisno od operativnog sistema, a na Unix -u je prihvaćen kao osnovni
prozorski sistem. X, ili pojedine njegove komponente, je realizovan za gotovo sve operativne
sisteme. Na ne- Unix platformama je prihvaćen uglavnom kao sredsvo za povezivanje sa Unix -om
ili za prenošenje aplikacija sa Unix -a.
X je projektovan za višekorisničko i mrežno okruženje, što danas popularni operativni sistemi (
Windows, OS/2, MacOS ) nisu ispunjavali u vreme kada su im "dodavani prozori". Ustvari, osim
NT-a, oni ni sada nisu višekorisnički u pravom smislu, a čak ni NT, bez dodataka koje nude
nezavisni proizvođači, nema mogućnost da više korisnika istovremeno interaktivno radi na istoj
mašini. Uz takvu mogućnost išla bi i potreba da neki od tih korisnika preko mreže pristupaju
pomenutoj mašini. Izgleda da je reč o političkoj odluci Microsoft -a da se putem mreže mogu
koristiti razni servisi drugih računara, ali da korisnik neposredno komunicira samo sa
aplikacijom koja se izvršava na njegovom računaru. Sa koliko zakašnjenja će Microsoft
skloniti ovo ograničenje ne zna se, ali ne treba sumnjati da će se i to smatrati čudom
tehnologije.
Što se X prozorskog sistema tiče, aplikacija koja radi na jednom računaru može da otvori prozor
na displej bilo kog drugog računara u mreži (slika 1). Displej u terminologiji X-a obično čine
tastatura, pokazivački uređaj (miš) i ekran (ili više ekrana). Predviđena je i mogućnost da na
jednom računaru bude priključeno više displeja.
Osnovna organizacija
Program koji upravlja ekranom i nudi aplikacijama da na displeju otvaraju prozore nazivamo X
serverom, a aplikacije X klijentima. Iako su termini pravilno izabrani, mnoge zbunjuje kada im
se kaže: "Za rad sa tekstualnim aplikacijama koje se nalaze na Unix serveru, na vašem PC-ju
treba da imate telnet klijent, a za rad sa grafičkim aplikacijama X server ".
Ako je računaru jedina svrha da se na njima izvršava X server, njega nazivamo X terminalom. X
terminal se konfiguriše tako da izgleda kao displej koji je direktno priključen na neki računar
u mreži. Mnogi proizvođači nude gotove X terminale, ali se njihova cena često ne razlikuje
dovoljno od cene komletne Unix radne stanice koja sve jedno sadrži X server. Dobra strana X
terminala je jednostavno dodavanje novog i što ne zahteva veliko održavanje, ali slična stvar
je i sa radnom stanicom bez diska. X serveri postoje i za DOS i Windows , a vredi istaći da uz
Linux dobijate solidnu besplatnu verziju X servera: XFree86 , koja je pravljana za PC verzije
Unix -a.
Nabavite X
X je rođen na MIT univerzitetu 1984. godine. Nekoliko godina kasnije, formiran je X Consorcium
koji je preuzeo X; njegova Web adresa je www.x.org . Tamo ćete naći spisak knjiga o X-u i
slične korisne iformacije, a što je najvažnije, moći ćete besplatno da preuzmete kompletnu
distribuciju X-a u izvornom kodu. U toj distribuciji se nalaze biblioteke za razvoj klijenata,
programi koji su neophodni u radu (kao i oni koji nisu neophodni), izvorni kod za server i
dokumentacija. Poslednja verzija X-a je 11 release 6.3.
Sve se to može iskompilirati na većini Unix platformi, a pominje se i NT. X server je
hardverski veoma zavisan: razlikuje se grafički adapter, tastatura, miš i način pristupa tom
hardveru kroz operativni sistem. Pored kompatibilnosti, za X server je vrlo bitna efikasnost,
jer je na njemu da optimalno iskoristi sve mogućnosti grafičkog adaptera. Uobičajeno je da za
svaki tip adaptera (ili za nekoliko sličnih) postoji poseban X server. Dakle, pod X-om tražimo
server za pojedini adapter kao što inače tražimo drajver. Uz X server idu konfiguracione
datoteke, softver za podešavanje tih datoteka, dokumentacija i slično, što zavisi od
proizvođača. Fontovi su takođe briga servera, ali se tu mogu uzeti fontovi iz standardne
distribucije X-a i nezavisno nabavljeni fontovi. Pored bit-mapiranih, X podržava i Type 1
fontove, kao i format skalabilnih fontova zasnovan na Bitstream tehnologiji.
Prozori na displeju su hijerarhijski organizovani. Na vrhu hijerarhije je koreni prozor, koji
odgovara pojmu desktop -a na MS Windows -u. Klijent koji otvori prozor kontroliše samo
sadržaj unutar prozora, a ne i okvir, liniju sa naslovom i slično. Tako X server, koji radi pod
MS Windows -om, postiže da se X prozorima rukuje kao i ostalim prozorima. Nije tipično da
server preuzme rukovanje prozorima: on tipično taj posao prepušta posebnom klijentu, window
manager -u (WM). WM daje prozorima okvir, naslov, kontroliše promenu veličine, pomeranje, svodi
ih na ikonu i vraća, dodeljuje i oduzima fokus, reguliše koji je ispred, a koji iza, hvata
kliktanje po korenom prozoru... Sa različitim WM-ovima dobijate različito dekorisane prozore
(slika 2), ali i različitu politiku manipulisanja: kada kliknete na prozor, može se desiti da
on samo dobije fokus i ostane zaklonjen drugim prozorima, ili i da dođe na vrh.
Za jedan server u jednom trenutku može biti vezan jednan WM. Ukoliko nije tako, prozori
izgledaju "ogoljeno" (bez okvira), a korisnik može da radi samo u prozoru koji trenutno ima
fokus, ali ne i da ga pomera i menja mu veličinu.
Podešavanje aplikacija
Svojstva aplikacija obično mogu da se podešavaju prema željama korisnika ili zahtevima
okruženja. U starom MS Windows -u se za tu svrhu koriste INI datoteke, a u novim verzijama
registry baza. X klijenti sadrže posebne promenljive koje najčešće opisuju svojstva
komponenata korisničkog interfejsa, a koje nazivamo resursima. Na primer, u Netscape -u resurs
Netscape.Mail.title određuje naslov prozora u kome čitamo poštu. Linijom Netscape.Mail.title:
Posta definišemo taj resurs. Ako se Netscape izvršava na računaru pod imenom alas i ako sa
~ označimo home direktorijum korisnika, definicije resursa tražiće se u
/usr/lib/X11/app-defaults/Netscape , ~/Netscape, ~/.Xdefaults-alas , od X servera i eventualno
u ~/.Xdefaults . Ukoliko gornju liniju upišemo u datoteku xy komandom xrdb -merge xy ,
učitavamo je u X server. Dalje imamo datoteke iz kojih se učitavaju resursi nakon podizanja X-a
i nakon logovanja korisnika, neke ne zavise od korisnika, a neke su u home direktorijumu
korisnika (obično ~/.Xresources ili ~/.Xdefaults ). Sa xrdb -query možemo da pogledamo
koji su resursi već definisani u serveru. Za eksperimentisanje sa resursima je najbolje
koristiti xrdb -merge .
Definicijom Netscape*title: Mozila zadajemo naslov za sve prozore u Netscape- u, jer
zvezdica zamenjuje proizvoljni segment u imenu resursa. Naravno, prozori kod kojih se imena
menjaju tokom rada brzo će promeniti ime. Ukoliko je aktivna i definicija koju smo prvo
pomenuli, koristi se pravilo da je opštija definicija slabija, tj. prozor sa poštom će imati
naslov Posta , a ostali prozori Mozila . Definicija *Background: green *Foreground: red
znači da je boja pozadine zelena, a prednjeg plana crvena u svim aplikacijama i svim
komponentama aplikacija gde nije drugačije definisano. Ovaj par definicija nema smisla na
displeju koji nije kolor, dok je na displeju sa samo dve boje situacija još gora; zato se
ovakve definicije često vezuju za server. Dalje ima smisla resurse vezati za mašinu na kojoj
radi program, za korisnika, za aplikaciju i za kombinacije svega toga. Sada je jasno čemu
toliko datoteka u kojima se definišu resursi.
Sve ovo omogućava vrlo precizna podešavanja, ali je lako izgubiti iz vida gde je šta definisano
i koja definicija "nadjačava" koju. Takođe je problem kada u novoj verziji softvera ima promena
u vezi resursa. Koje sve resurse nudi pojedina aplikacija vrlo zavisi od toga kako je pisana i
šta je programer želeo da dopusti da se kontroliše spolja. Pomenuta imena datoteka i
direktorijuma takođe variraju od instalacije do instalacije, a administrator može sve da
pretumba i da uvede neku svoju politiku.
Pokretanje X-a
Da bi se X server stavio u funkcionalno stanje, pored pokretanja same izvršne datoteke koja
predstavlja X server, treba učitati odgovarajuće resurse, podesiti putanje za fontove i još
neke stvari, pokrenuti WM i pokrenuti nekog klijenta iz koga možemo da pokrećemo druge
aplikacije (recimo xterm ). Taj klijent se naziva session menager , a njegovu ulogu često
preuizima sam WM.
X se standardno pokreće na dva načina. Prvi je da korisnik koji je već na neki način ulogovan
izvrši komandu startx . koja uradi sve gore pomenuto, nakon čega se na displeju pojavi
grafičko okruženje. Nakon izlaska iz session manager -a, X server prestaje da radi.
Drugi način je da se korisnik uloguje direktno u grafičkom okruženju. Za to se koristi display
mamager ( xdm ) kao servis koji se obično startuje prilikom podizanja sistema. xdm može da
kontoliše lokalni X server koji može i da podigne ili X server na udaljenom računaru što se
koristi kod X terminala. Nakon izlaska iz session manager -a korisnik biva izlogovan, a xdm
ponovo prikaže login prozor. X server koji treba da kontroliše xdm na drugom računaru
pokrećemo komandom X-query <>
Iz ugla programera
X klijent sa serverom komunicira X protokolom, koji se može naslanjati na TCP/IP, lokalnu
komunikaciju pod Unix- om preko socket -a ili DECnet . Tehnički, X protokol predstavlja
definiciju X-a. Naravno, kada govorimo o X-u, ne mislimo samo na protokol, već i na raspoložive
klijente, servere i biblioteke koje koriste ovaj protokol. Za razvoj X klijenta koristi se C
biblioteka koju nazivamo Xlib ; Microsoft bi to verovatno nazvao X API. Xlib je takoreći
"prepričan" X protokol.
Istaknimo još jednom jasnu podelu posla i slojevitost X-a. Prvo je klijent jasno odvojen od
servera i vezuje ih jedino međuprocesna komunikacija. Dalje je window manager odvojen od
klijenta koji je otvorio prozor. Način na koji klijent radi sa datotekama, preuzima argumenate
iz komandne ilinije, kreira i kontroliše procese i na druge načine se odnosi prema okruženju,
predstavljaju pitanja kojima se X ne bavi. Drugim rečima, u bilo koji program možemo, gdegod
želimo, dodati pozive funkcija kojima se uspostavlja veza sa nekim X serverom, otvara prozor,
odradi komunikacija sa korisnikom u tom prozoru, zatvori prozor, prekine veza sa serverom i
nastavi rad isto kao da je taj deo posla obavljen bez X-a. Pri tome nije bitno da li program i
inače koristi X ili ne - mnogi programi komuniciraju sa korisnikom preko terminalskog prozora,
dakle tekstualno, a samo kada treba nešto da učitaju, obraćaju se X-u.
Ono što u MS Windows -u nazivamo kontrolom (dugme, meni, itd) u X-u zovemo widget . Xlib ne
uvodi widget -e, već samo gole prozore, funkcije za crtanje po prozorima u rangu Microsoft
-ovog GDI-ja, rad sa događajima, kontorlu miša i tastature, ali i sve drugo što se odnosi na
komunikaciju sa serverom, kao što je čitanje i upisivanje resursa, komunikacija klijenata preko
servera i slično. Klijenti za X posredno ili neposredno treba da koriste Xlib i ne predviđa
se da se ova biblioteka zaobilazi.
Ipak, pisanje aplikacije koristeći neposredno Xlib bio bi suviše veliki posao, pa se uvodi
koncept Toolkit -ova (slika 3). Toolkit predstavlja skup widget -a pomoći koga se kreira
korisnički interfejs. Između skupa widget -a i Xlib- a nalazi se Toolkit Intrinsics , deo
koji uvodi opšta pravila za definisanje i rad sa widget -ima. Uz X dolazi realizacija Toolkit
Intrinsics -a pod imenom X Toolkit ili Xt .
Xt između ostalog uvodi objektno orijentisanu definiciju widget -a, prevodi događaje u
pozivanje callback procedura, tumači definicije resursa i na osnovu njih postavlja svojstva
widget -a, interpretira komnandnu liniju, tako da su sve aplikacije opremljene sa standardnim
opcijama komandne linije (zadavanje dimenzija prozora, fontova, displeja itd). Lepa strana Xt
-a je da sve možete izraziti u C izvornoj datoteci koju kompilirate i dobijate aplikaciju.
Predpostavlja se da imate odgovarajuću zbirku widget -a.
Sledeća stepenica su sistemi koji definišu kompletan izgled korisničkog interfejsa (tu ide i WM
koji sledi taj izgled) sa dodatnim alatima, poput jezika za opis korisničkog interfejsa, sa C++
bibliotekom i (nažalost) cenom. Tu pre svih spadaju Motif čiji je vlasnik OSF i OPEN LOOK
čije varijante podržavaju razni proizvođači uključujući Sun . Zanimljivo je da je OSF sa
X/Open udružen u The Open Group koja namerava da preuzme i sam X od X Consorcium -a.
Na kraju treba pomenuti programske jezike koji su pogodni za brzo pisanje X aplikacija, gde
bismo istakli Tcl/Tk koji "gura" Sun i kome ćemo posvetiti malo pažnje u budućim člancima.
X i trendovi
Najzanimljivi novitet je Broadway , gde je ideja da X server postane deo Web browser -a. To
se uklapa u pravljanje paralela između network computer -a i X terminala. Broadway se
razvija pod okriljem samog X Consorcium -a.
Zanimljivi su i projekti da se komunikacuja sa Win32 aplikacijom preusmeri na X protokol.
Jedno rešenje nudi Tektronix koji je, kao proizvođač X terminala, zainteresovan da se njegovi
proizvodi priključuju na NT mašinue.
Sve je više mogućnosti da se X aplikacija prevede tako da radi pod NT-om, bilo u POSIX ili u
Win32 okruženju. Kada smo već kod toga, postoje sasvim ozbiljni sistemi koji pod NT-om
formiraju Unix -oliku sredinu. Sam Microsoft je tome otvorio vrata u dizajnu NT-a, ali nije
"gurao" takvo rešenje. Zato vest iz prošlog broja "PC"-ja o povezivanju Džobsovog NeXT- a sa
MacOS- om obećava nove oblike koegzistencije Unix -a i X-sa sa najpopularnijim operativnim
sistemima.