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
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
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
UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 29 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 30 -
5 hello X program/3 hello X program/4 wMain = XCreateSimpleWindow(display, DefaultRootWindow(display), XSelectInput(display, wMain, ExposureMask | xsh.x, xsh.y, xsh.width, xsh.height, BORDER, KeyPressMask | ButtonPressMask | BlackPixel(display,screen), StructureNotifyMask); WhitePixel(display,screen)); XMapWindow(display, wMain); XSetStandardProperties(display, wMain,"hello", while(1) { "hello_icon",NULL, argv, argc, &xsh); int x,y; eseményhurok xswa.colormap = DefaultColormap(display, screen); unsigned int width, height; xswa.bit_gravity = CenterGravity; XEvent event; XChangeWindowAttributes(display, wMain, XNextEvent(display, &event); CWColormap | CWBitGravity , &xswa); gcv.font = font_info->fid; switch (event.type) { gcv.foreground = BlackPixel(display, screen); case ConfigureNotify: gcv.background = WhitePixel(display, screen); width = event.xconfigure.width; gc = XCreateGC(display, wMain, height = event.xconfigure.height; GCFont | GCForeground | GCBackground, &gcv); break;
UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 31 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 32 -
hello X program/5 Motifhello case Expose: while(XCheckTypedEvent(display,Expose, &event)); x = (width - XTextWidth(font_info, Hello, #include
UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 33 - UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 34 -
Motifhello/2
topLevel = XtInitialize(argv[0], "Motifhello", NULL, 0, &argc, argv);
hello = XtCreateManagedWidget("hello", xmLabelWidgetClass,topLevel, NULL, 0);
XtRealizeWidget(topLevel); XtMainLoop(); }
UNIX alapok © BME-IIT Sz.I. 2012.11.21-30. - 35 -
6