(Microsoft Powerpoint
Total Page:16
File Type:pdf, Size:1020Kb
X window rendszer fogalmai UNIX rendszer felhasználói és • ő ő Kliens = a szolgáltatást igénybe vev . fejleszt i felülete (23-26. ea.) • Egy adott berendezés (gép) egyszerre elláthat szerver funkciókat is, és kliens programokat is futtathat. • ű ő Szeberényi Imre X szerver = az X display-t m ködtet , a BME IIT kliensek számára grafikus szolgáltatást <[email protected]> nyújtó program. M Ű E G Y T E M 1 7 8 2 UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 1 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 2 - X display = munkahely felépítése Történelem 1984: MIT fejlesztés (Athena project + DEC + mások). Kiindulás: Stanford University „W” rendszere 1986: 10.4 els ő széles körben hozzáférhet ő változat 1987: 11.1 új alapok, nincs kompatibilitás a 10-es változattal 1988: 11.2 X konzorcium alakul a kiadott sw. támogatására 1989: 11.3 1990: 11.4 viszonylag kiforrott változat 1991: 11.5 bővítések (font szerver) 1994: 11.6 bővítések (Kerberos) 1996: 11.6.3 bővítések (Web funkciók), X konzorc. felbomlik 1998: 11.6.4 bővítések (LBX),Open Group UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 3 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 4 - Történelem X szerver feladatai 2001: 11.6.6 hibajavítás, Xfree86 • Engedje meg több kliens egyidej ű 2004: 11.6.7.0 bővítések, X.Org hozzáférését a display-hez. 2005: 11.6.8.2 hibajavítások • 2005: 11.6.9,11.7.0 EXA, refactoring, imake Értelmezze a hálózati üzeneteket, amit a 2006: 11.7.1 11.7.1 AIGLX kliensek küldenek. 2007: 11.7.2,11.7.3 DTrace, RandR • A kezel ői inputot küldje el a kliens 2008: 11.7.4 PciRework programnak. 2009: 11.7.5 Multi-Pointer, XI2, • Nyújtson kétdimenziós rajzolási 2010: 11.7.6 IncputClass, udev 2012: 11.7.7 Multitouch, primitíveket. 2013: 11.7.8 UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 5 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 6 - 1 X szerver feladatai/2 X rendszer szoftver architektúrája • Kezeljen komplex adatstruktúrákat, mint pl. window, font, icon, cursor, grafikus kontextus stb, melyekre egyszer űen ID-vel lehet hivatkozni. • Tegyen lehet ővé elosztott feldolgozást (máshol számol, máshol jelenít meg). • Nyújtson eszközfüggetlen, de alacsonyszint ű grafikus felületet a kliens számára. UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 7 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 8 - Egyes komponensek szerepe Egyes komponensek szerepe/2 • Xlib : • X toolkit intrinsic: A legalacsonyabb szint ű X szolgáltatásokat Objektum orientált programozási felületet nyújtó felület. Az Xlib rutinjai a kliens biztosító objektum kezel ő rendszer, amely kéréseit az X protokoll el őírásainak mind az objektum típusokat, mind az megfelel ően a hálózati rétegen keresztül objektum példányokat tárolja és eljuttatják a szerverhez és fogadják a adminisztrálja. Segítségével a származtatás szerver üzeneteit. módszerével újabb objektumokat hozhatunk létre. Az alapobjektum a window (widget), amely adatokat és a rajtuk m űveleteket végz ő eljárásokat tartalmazza. UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 9 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 10 - Egyes komponensek szerepe/3 Egyes komponensek szerepe/4 • X toolkit: • Ablakkezel ő: Magasabb szint ű objektumkönyvtár, amely Ablakok mozgatása, méretezése, átfedések az intrinsic alapobjektumaira épül. és azok megsz űnésének kezelése. Rendszerint a toolkit segítségével valósítják Érdekesség: nem határozták meg el őre az meg az olyan adatszerkezeteket mint pl a ablakkezelési stratégiát (okok: majd menü, nyomógomb, edit box stb. (Widget, kialakul + politika). gadget) UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 11 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 12 - 2 Ablakok jelllemz ői Ablakok jelllemz ői/2 • Minden ablak gyerek ablak, kivéve a root • A bal fels ő sarok az origó, és az ablakon ablakot. belül a saját sarkához relatívak a • A gyerek csak az apukája területén látszik, koordináták, melyek pixelben értend ők. és csak onnan kaphat inputot. • Minden ablak saját attribútumokkal • Ugyanattól a szül őtől származó gyerekek rendelkezik (háttérszín, kurzor típusa, átfedhetik egymást. gravitáció, backing strore, eseménymaszk, ő • Inputot csak akkor kaphat, ha az input mozgathatóság, méretezhet ség stb.) fókusz nála van. • Minden ablak egy hierarchikus gyerek- szül ő kapcsolat része. UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 13 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 14 - Gyerek - szül ő kapcsolat X alkalmazás tervezése, m űködése • A display nem teljes egészében az alkalmazásé. • Az ablakok között átfedések lehetnek. Ezek megsz űnésekor az ott lev ő információt újra kell rajzolni. • Nem akkor, vagy nem csak akkor kell rajzolni amikor az információ el őáll a programban, hanem amikor a szerver (pontosabban az ablak kezel ő) azt kéri. UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 15 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 16 - X alkalmazás tervezése, m űködése/2 X alkalmazás felépítése • A programhoz aszinkron események • Inicializálás : érkeznek, amelyeket le kell kezelni. Kapacsolódás a szerverhez, window-k • A program működését események létrehozása, szerver er őforrások lefoglalása határozzák meg. A működés objektum és attribútumaik beállítása. szemléletet tükröz. Az objektumok az • Eseményhurok : ablakok, amelyek eseményekkel (üzenet) a programhoz érkez ő események kommunikálnak egymással. feldolgozása. UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 17 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 18 - 3 Kapcsolódás a szerverhez HOST:SERVER.SCR • HOST: • HOST:SERVER.SCR A szervert futtató számítógép hálózati alakú azonosító stringgel történik, amit azonosítója (név vagy cím). vagy explicit kap a megfelel ő Xlib rutin, vagy az explicit megadás hiányában a • SERVER: DISPLAY környezeti változóból veszi. Az adott hoston futó szerver azonosító száma (0. az els ő szerver). • SCR: A kívánt screen sorszáma (0. az els ő). • Például: bubuka.iit.bme.hu:0.0 UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 19 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 20 - X rendszer indítása X rendszer indítása/2 • Grafikus bejelentkezés – nincs teend ő • X szerver indítása (startx, xinit...) • Egyébként: • Kapcsolatfelvétel: – X szerver indítása – direkt – X alkalmazások indítása (kapcsolatfelvétel) • program –display a.b.c:0.1 • szerveroldali authentikáció (xauth) Helyi X Helyi – indirekt (XDMCP) szerver kliens • WM indítása: – Távoli X Távoli .xinitrc – szerver kliens .xsession UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 21 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 22 - .xsession példa X programok konfigurálása host=`hostname`; defaults=$HOME/.Xdefaults → resources=$HOME/.Xresources; hostdefaults=$defaults-$host • Közös toolkit közös szintaxis (–display, if [ -f $resources ]; then # betöltend ő attribútumok –geometry) xrdb -load $resources; fi if [ -f $defaults ]; then # hozzáf űzend ő attribútumok • Er őforrások tárolása a szerverben (xrdb) xrdb -merge $defaults; fi if [ -f $hostdefaults ]; then # Host-specifikus beállítások – ezt rendszerint a belépéskor lefutó script tölti xrdb -merge $hostdefaults; fi fel (ld. el őző dia). twm & # wm + néhány alkalmazás xclock -chime -bg green -geometry 100x80-0+0 & • Ajánlott feladat: xbiff -geometry 50x80-110+0 & xterm -geometry 80x24+0-0 & xterm exec xterm -title "Login Window" -geometry 80x24+10+10 -ls echo "xterm*background: yellow" | xrdb –merge xterm nem leválasztott exec UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 23 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 24 - 4 X környezet konfigurálása Cseréljük le a wm-t • .Xdefaults, .xinitrc, .xsession • Meg kell állítani a futó wm-t (ps, kill) – ekkor azonban rendszerint ki is léptet a rendszer, mert a • .mwmrc, .fvwmrc, .twmrc, ... .xinitrc vagy a .xsession úgy indította a wm-t hogy, ...... • xmodmap – Konfiguráljunk sajat .xinitrc-t, .xsession (vnc esetén .vnc/xstartup), melyben nem a wm indítása az utolsó • xhost parancs. (cp ~szebi/.xsession) • xrdb • Indítani kell egy új wm-t (twm, /usr/dt/bin/dtwm, fvwm2). (leválasztott process !!!) • app-defaults (/usr/X/lib/X11/app-defaults) • /usr/X/lib/X11/xdm/Xsession UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 25 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 26 - Üres X program Üres X program/2 #include <X11/Xlib.h> screen = DefaultScreen(display); #include <stdio.h> wMain = XCreateSimpleWindow(display, DefaultRootWindow(display), main(int argc, char *argv[]) { 0, 0, DisplayWidth(display,screen) / 2, Display *display; DisplayHeight(display, screen) / 2, Window wMain; WhitePixel(display, screen), int screen; WhitePixel(display, screen), XEvent event; BlackPixel(display, screen)); if ((display = XOpenDisplay(argc ? while(1) argv[1]: NULL)) == NULL) { XNextEvent(display, &event); fprintf(stderr, ”Can't open\n"); XCloseDisplay(display); exit(1); } nem éri el soha } UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 27 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 28 - hello X program hello X program/2 #include <X11/Xlib.h> if ((display=XOpenDisplay(NULL)) == NULL) { #include <X11/Xutil.h> fprintf(stderr,"cannot connect"); exit( -1 ); #include <X11/Xos.h> } #include <stdio.h> screen = DefaultScreen( display ); #define FONT "fixed" if ((font_info=XLoadQueryFont(display, FONT)) == NULL) { #define PAD 1 fprintf(stderr," Cannot open font); exit(-1); #define BORDER 1 } char Hello[] = "Hello X Window"; fth = font_info->max_bounds.ascent + main(int argc, char *argv[]) font_info->max_bounds.descent; { xsh.flags = PPosition | PSize; Display *display; int screen; xsh.height = fth + 2 * PAD; Window wMain; GC gc; xsh.width = XTextWidth(font_info, Hello, sizeof(Hello)) + 2 * PAD; XFontStruct *font_info; XGCValues