sieci11

background image

UNIXOWY PROTOKÓŁ GRAFICZNY ( X PROTOKÓŁ )

Unixowy protokół graficzny (X protokół) jest protokołem wysokiego poziomu
(warstwy prezentacji)

służącym do przesyłania informacji graficznej pomiędzy programem użytkowym
(X klientem),

a programem obsługującym terminal graficzny (X serwerem).

Terminal graficzny

(X terminal)

klawiatura

wskaźnik
(mysz)

komputer główny
(host)

monitor
1

monitor 2

monitor
n

X serwer

X klient

Model logiczny pary X klient - X serwer

background image

Uwaga.

1) Konfiguracja oprogramowania jest odwrotna, niż zazwyczaj (serwer w
terminalu, klient

w komputerze głównym).

2) Terminal graficzny może być zarządzany przez tylko jeden X serwer, w
komputerze głównym

może być uruchomionych wielu klientów.

3) Ogólny model jest modelem sieciowym: wiele komputerów i wiele terminali
może być połączonych

w sieć, dowolny proces na dowolnym komputerze (być może pełniącym
jednocześnie rolę terminala

graficznego) może łączyć się z dowolnym X serwerem, jeśli tylko posiada
odpowiednią autoryzację.

4) Autoryzacja (prawo do komunikowania się) może być przydzielana przez
właściciela procesu

X serwera wybranym użytkownikom sieci, wybranym komputerom lub
wszystkim użytkownikom.

W Unixie służy do tego polecenie xhost.

5) Wielu klientów może komunikować się współbieżnie z jednym X serwerem i
rywalizować

o generowane przez niego sygnały. Programy klientów powinny być tak
konstruowane, żeby

nie dezorganizowały sobie wzajemnie pracy.

background image

Uruchamiając X serwer na lokalnym komputerze, możemy wykorzystywać go na
kilka sposobów.

1. Możemy uruchomić X serwer (w trybie „ekranowym” (

panning

) lub „ukrytym”)

aby jedynie

czekał na zgłoszenia X klientów z innych komputerów (musimy przedtem
udzielić im autoryzacji).

X klienci mogą być następnie uruchomieni w trybie tekstowym (przez nas lub
innego upoważnionego

użytkownika) i komunikować się z naszym X serwerem wyświetlając informację
graficzną i pobie-

rając sygnały od klawiatury i myszy (kiedy okno X serwera jest aktywne). Na
pozostałej części

ekranu możemy jednocześnie obserwować wykonywanie programów na
komputerze lokalnym.

2. Możemy otworzyć sesję graficzną w analogiczny sposób, jak otwieramy sesję
pracy z systemem

unixowym w trybie tekstowym, tj. rozpoczynając od podania nazwy swojego
konta i hasła. Sesja

może być otwarta zarówno na komputerze lokalnym (jeśli pracuje on pod
systemem Unix), jak

i odległym. Aby otworzyć sesję, komunikujemy się z programem xdm (

X Display

Manager

) za

pośrednictwem protokołu XDMCP (

X Display Manager Control Protocol

). xdm

współpracuje

z procesem zarządcy sesji (

session manager

), który w trybie graficznym pełni

analogiczną rolę,

jak shell zgłoszony w przypadku sesji w trybie tekstowym - czas jego
wykonywania wyznacza czas

trwania sesji graficznej.

background image

Otwarcie sesji graficznej powoduje, że nasz ekran staje się ekranem terminala
graficznego podłączo-

nego do lokalnego lub odległego systemu unixowego. Każdy typ xdm ma swoją
szatę graficzną

ekranu powitalnego i okienka logowania (

login widget

). Po pomyślnym

zalogowaniu się nadzór nad

obrazem na ekranie pełni współpracujący z xdm zarządca okien (

window

manager

).

xdm rozpoznaje trzy podstawowe rodzaje pakietów inicjujących komunikację
przez XDMCP:

- query (polecenie X -query host) - powoduje zgłoszenie zamiaru otwarcia sesji
graficznej na

danym komputerze;

- broadcast (polecenie X -broadcast) - powoduje zgłoszenie zamiaru otwarcia
sesji graficznej na

dowolnym komputerze w sieci lokalnej (pierwszym, który dobrowolnie się
zgłosi i umożliwi to);

- indirect (polecenie X -indirect host) - powoduje, że dany komputer rozsyła
pakiety broadcast

w swojej sieci lokalnej w imieniu zgłaszającego się, a potem przekazuje mu
listę hostów (w postaci

menu), które zaoferowały możliwość otwarcia na nich sesji graficznej.

Uwaga

Otwarcie sesji graficznej powoduje automatyczne utworzenie zmiennej
środowiska DISPLAY przez

xdm (i późniejsze dziedziczenie jej przez proces zarządcy okien i inne procesy X
klientów).

background image

X serwer nie musi być programem unixowym. Różne X serwery pracujące pod
różnymi systemami

operacyjnymi na rozmaitym sprzęcie mogą mieć bardzo zróżnicowane własności
(jeśli chodzi

o rozdzielczość, paletę kolorów, zbiory czcionek, zbiory wykonywanych funkcji i
inne). Prawidłowo

skonstruowane programy użytkowe (X klienci) powinny na początku testować
możliwości X serwera,

z którym aktualnie się komunikują, i dostosowywać się do nich.

Unixowa biblioteka funkcji Xlib jest interfejsem programów w języku C do
protokołu graficznego

(funkcjonującego zazwyczaj w oparciu o protokół TCP lub protokół do komunikacji
lokalnej). Jest

to biblioteka niskiego poziomu (oferująca funkcje typu otwarcie/zamknięcie
terminala graficznego,

otwarcie/zamknięcie okna na terminalu, nakreślenie linii prostej, łuku okręgu lub
wypisanie tekstu).

Na jej bazie powstały biblioteki wyższego poziomu, np. Xt (X toolkit) oferujące
obsługę bardziej

złożonych obiektów, takich jak przyciski, menu rozwijalne czy okienka dialogowe.

Kompilacja programów w języku C korzystających z biblioteki Xlib wymaga
umieszczenia w programie

odpowiednich plików nagłówkowych oraz podania opcji kompilatora powodującej
dołączenie odpo-

wiednich funkcji bibliotecznych do programu wynikowego.

( W naszym przypadku: gcc -L/usr/X11R6/lib -lX11 nazwa.c )

background image

Najważniejsze funkcje i struktury danych

Funkcje Xlib operują na standardowych strukturach danych, do których dostęp jest
możliwy zazwyczaj

tylko za ich pośrednictwem. Struktury te są logicznym obrazem fragmentów
sprzętu, na którym

operuje X serwer:

{Uwaga: do tej pory nie istnieją polskie odpowiedniki wielu

nazw angielskich}

terminal graficzny

(display)

- odpowiada pojęciu graficznej stacji roboczej (z

urządzeniami we/wy)

ekran

(screen)

- odpowiada obrazowi na ekranie monitora

okno

(window)

- odpowiada oknu (zwykle jednemu z wielu) wyświetlanemu na

ekranie

mapa pikselowa

(pixmap)

- odpowiada obszarowi w pamięci operacyjnej

przechowującemu obraz,

który może być wyświetlony w oknie

rysowisko

(drawable)

- wspólna nazwa dla okien i map pikselowych

i wiele innych.

background image

Istotnym pojęciem jest pojęcie zdarzenia, które może dotyczyć zarówno użycia
klawiatury lub

wskaźnika (myszy), jak i rozwoju wydarzeń na ekranie - przesłonięcia/odsłonięcia
okna, zmiany

okna aktywnego i innych. Program klienta może być wykonywany w trybie
asynchronicznym

(z kolejkowaniem zdarzeń poszczególnych rodzajów) lub w trybie
synchronicznym (wielokrotnie

wolniejszym, wykorzystywanym głównie do celów diagnostycznych).

Aby móc wykonywać operacje na oknach, X serwer musi komunikować się z
zarządcą okien

(window manager)

. Proces ten jest specjalnym klientem X serwera, który musi

być aktywny przez cały

czas działania X serwera. Decyduje on o wszystkich szczegółach technicznych
związanych

z wyświetlaniem okien, które nie są ujęte w specyfikacji X protokołu.

Uwaga.

Programy X klientów mogą decydować o tym, czy chcą, czy też nie chcą
korzystać z usług zarządcy

okien (i wyświetlać obraz w postaci „surowych” okien nieprzemieszczalnych po
ekranie).

background image

Display XOpenDisplay (char nazwa);

Zwraca: wskaźnik do struktury typu Display w przypadku sukcesu;

wskaźnik pusty (NULL) w przypadku błędu.

nazwa - łańcuch pusty lub o postaci:

adres:numer.ekran gdzie

adres - adres sieciowy komputera (o postaci zależnej od używanego
protokołu warstwy

transportowej, w przypadku protokołu TCP może być cyfrowy lub
symboliczny (jeśli

dostępny jest serwer nazw), może też być pusty - wtedy dobierany
jest jeden z proto-

kołów w dziedzinie Unixa)

numer - numer terminala graficznego (zazwyczaj podajemy tu 0, większe
liczby mogą się

pojawić, jeśli jeden komputer steruje kilkoma „nieinteligentnymi”
graficznymi

stacjami roboczymi)

ekran - numer monitora domyślnego w zestawie graficznej stacji roboczej
(tę część wraz

z kropką pomijamy, jeśli stacja robocza ma tylko jeden monitor)

background image

Działanie: ustanawia połączenie między procesem wywołującym tę funkcję a X
serwerem o podanym

adresie i zapisuje uzyskane informacje o X serwerze w strukturze, do
której zwraca wskaźnik.

W przypadku, jeśli zamiast nazwy został podany łańcuch pusty, pobiera
nazwę domyślną

zapisaną w zmiennej środowiska DISPLAY.

Uwaga.

Niektóre systemy unixowe tworzą automatycznie zmienną DISPLAY już w
momencie zalogowania się

na nie (na przykład przy użyciu telnetu), niektóre należy skłonić do tego
odpowiednim poleceniem

(najlepiej umieszczonym w skrypcie logowania).

void XCloseDisplay (Display terminal);

terminal - wskaźnik do struktury zwrócony przez funkcję XOpenDisplay

Działanie: zapamiętuje niektóre ustawienia (na życzenie programisty) i zrywa
połączenie z X serwerem.

background image

Istnieje cała seria funkcji służących do testowania struktury utworzonej przez
funkcję XOpenDisplay

(co umożliwia dostosowanie działania programu do możliwości X serwera).

Żeby można było cokolwiek wyświetlić na ekranie terminala, należy otworzyć na
nim okno. Okazuje

się to nadspodziewanie skomplikowaną czynnością, bo trzeba określić mnóstwo
różnych atrybutów -

rozmiary okna, szerokość ramki, kolory ramki i tła, czy korzystamy z usług
zarządcy okien, czy okno

ma samo odtwarzać brakujące fragmenty po odsłonięciu itd. Możemy też
zasugerować początkowe

położenie okna na ekranie (co w przypadku korzystania z usług zarządcy okien
niekoniecznie musi

być spełnione). Niektóre z tych atrybutów określamy oddzielnymi funkcjami, a
niektóre podajemy

jako argumenty funkcji tworzącej okno (XCreateWindow). Dalsze czynności są
jeszcze bardziej

skomplikowane (określenie palety kolorów, kontekstu graficznego itd.).

Początkującym programistom może trochę ułatwić pracę korzystanie z wartości
domyślnych

(funkcje Default Screen, DefaultVisual, XCreateSimpleWindow i inne).


Document Outline


Wyszukiwarka

Podobne podstrony:
sieci1
sieci1
Sieci1 09
Sieci1
Topologie sieci1
sieci1
Sieci1 7
SIECI12
Sieci10
SIECI10

więcej podobnych podstron