PC Press
O nama
O nama
Pretplata
O nama
Postanite saradnik PC-ja
Kontakt sa redakcijom
PC Press
Novi broj
Novi broj   
Pretrazivanje
Arhiva
Arhiva   
PC Online
PC Plus   
Specijalna izdanja
Programiranje Programiranje
PC #22 : Mart 1997

 Naslovna  Sadržaj 
Nebojša Vasiljević  

Programiranje pod X-om

Grafički korisnički interfejs (GUI) se i na Unix-u realizuje kroz sistem prozora. Ime mu je X Window System, a objašnjava ga Nebojša Vasiljević.

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 bi mnogi bacili pogled i na tu stranu, bar iz radoznalosti. Najre ćemo opisati X kao sistem.

(Ne)zavisno od Unix-a

X je koncipiran nezavisno od operativnog sistema, a na Unix-u je prihvaćen kao osnovni prozorski sistem. X 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 komunicira samo sa aplikacijom koja se izvršava na njegovom računaru.

Š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).

Program koji upravlja ekranom i nudi aplikacijama da na displeju otvaraju prozore nazivamo X serverom, a aplikacije X klijentima. 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 sadrži X server. 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. Aktuelna 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...

Za jedan server u jednom trenutku može biti vezan jedan 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, naravno, nema smisla na monohrom displeju.

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 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 zavise od instalacije, a administrator može sve da pretumba i da uvede 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 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 ime računara>

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 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. 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.

Ipak, pisanje aplikacije koristeći neposredno Xlib bio bi suviše veliki posao, pa se uvodi koncept Toolkit-ova (slika 2). 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. Lepa strana Xt-a je da sve možete izraziti u C izvornoj datoteci koju kompilirate.

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. Treba pomenuti i programske jezike pogodne za brzo pisanje X aplikacija (Tcl/Tk koji "gura" Sun).

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 komunikacija sa Win32 aplikacijom preusmeri na X protokol. Jedno rešenje nudi Tektronix (proizvođač X terminala) koji je zainteresovan da se njegovi proizvodi priključuju na NT mašine.

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.