====== Praca w środowisku X Window ======
- Co właściwie znaczy słowo Ubuntu?
- W starym afrykańskim narzeczu "Nie umiem zainstalować Debiana"...
/* nadesłał: Piotr Konsek, IS 2012 */
===== DO_PRZYGOTOWANIA =====
Samodzielnie należy przed tym laboratorium przygotować:
* podstawy X Window z wykładu
* przypomnieć sobie informacje o SSH
===== WPROWADZENIE =====
==== Cechy X====
* sieciowe środowisko rozproszone klient/serwer
* środowisko "okienkowe
* przenośne - niezależność od platformy sprzętowej i programowej
* przezroczyste (ang. //transparent//) sieciowo
* architektura klient/serwer
* architektura rozproszona (w sieci)
* wsparcie dla budowy GUI w różnych warstwach
* zapewnienie wysokopoziomowych usług dla aplikacji z GUI
* różne implementacje: [[http://www.x.org|X.org]], [[http://xfree86.org/|XFree86]]
==== Sieciowe środowisko rozproszone klient/serwer====
* serwer udostępnia zasoby: wyświetlacz (wyjście), sposoby wprowadzania danych (klawiatura, mysz, tablety, itp.), czcionki
* klienty - aplikacje korzystające z wyświetlacza serwera
* komunikacja pomiędzy X klientami (XC) i serwerami (XS) przez X Protokół
* dostęp do XS jest autoryzowany
==== Co to jest DISPLAY====
Z punktu widzenia XC i użytkownika, każdy XS udostępnia szereg DISPLAYs:
hostname:displaynumber.screennumber
Z DISPLAYem wiążą się też urządzenia wejściowe, np. klawiatura, mysz.
==== XClients i Xterm====
* aplikacje wykorzystujące X do komunikacji z użytkownikiem, to XClients
* XS udostępniają DISPLAY dla XC.
* wszystkie XC mogą korzystać z usług X (czcionki, klawiatura, zasoby, itp.)
* przy uruchamianiu przyjmują podobne argumenty, np.:
-display a.b.c.d:x:y.z
-geometry WxH+XO+YO
-fn "*courier*"
* uruchamianie powłok interaktywnych: ''xterm'' i pochodne, np. ''rxvt''.
==== Czcionki====
* XS udostępnia XC czcionki
* spis źródeł czcionek: ''xset q''
* podanie adresu XFontSerwera:
xset fp+ tcp/hostname:port/cataloguelist
* obsługiwane sa standardowo czcionki bitmapowe i wektorowe w kilku formatach
* nazwa czcionki ma postać:
-foundry-family-weight-slant-set_width-style-pixels-points-horizdpi-vertdpi-spacing-avwidth-charset-encoding
==== Kolory====
X zapewnia szereg możliwości podawania kolorów:
rgb://
, , := h | hh | hhh | hhhh
#RGB (4 bits each)
#RRGGBB (8 bits each)
#RRRRGGGGBBBB (16 bits each)
rgbi://
zdefiniowane nazwy symbolicznej
==== Klawiatura====
* X zapewnia uniwersalne metody dostępu do różnych klawiatur.
* Sterowanie mapami klawiatury jest 2-poziomowe: kody klawiszy + symbole znaków
* Do zarządzania: ''xmodmap'' ''xkbsel''
==== Zasoby====
* X Resources służą do modyfikowania i konfigurowania środowiska pracy aplikacji
* zarządzanie przez ''xrdb'' i ''-xrm''
* przykłady:
XTerm*cursorColor: gold
XTerm*scrollBar: on
emacs*Geometry: 80x65-0-0
emacs*Background: rgb:5b/76/86
emacs*Foreground: white
emacs*Font: 6x10
==== Windowmanager====
* X nie ingeruje w wygląd okna aplikacji
* w szczególności nie obsługuje wyglądu elementów dekorujących okna
* zajmują się tym specjalne klienty - windowmanagery
* wm są niezależne od innych klientów,
* zarządzają otwieranymi oknami, fokusem, komunikacją, dekoracjami okna
* mają własny interfejs użytkownika
* zarządzają podanym DISPLAYem
==== Sesja====
* otwieranie na lokalnej maszynie: ''xinit''
* otwieranie na zdalnym XS: ''xdm'', (XDMCP)
* istnieje wiele różnych implementacji poza xdm, np. wdm, gdm, kdm
* zarządzaniem otwartą sesją może zajmować się ''xsm''
==== Bezpieczeństwo====
Istnieje kilka metod autoryzacji dostępu do XS:
* Host Access
* MIT-MAGIC-COOKIE-1
* XDM-AUTHORIZATION-1
* SUN-DES-1
* MIT-KERBEROS-5
Zarządzanie przez ''xauth'' (ew. ''xhost'')
==== X i SSH====
* standardowe połączenia X są nieszyfrowane
* SSH zapewnia tzw. X11 Forwarding
* połączenia zdalnych XC są automatycznie przekazywane do XS przez szyfrowany kanał
* jest do tego używany dynamicznie tworzony wirtualny DISPLAY
==== Środowiska zintegrowane====
Środowiska typu desktop zapewniają wysoki poziom integracji pracujących w nich aplikacji od strony API i GUI, przykłady:
* OpenWindows: http://docs.sun.com/app/docs/doc/806-2901
* CDE: http://www.opengroup.org/cde
* Next/Open/GNUStep, http://www.gnustep.org
* XFce: http://www.xfce.org
* KDE: http://www.kde.org
* GNOME: http://www.gnome.org
* Enlightenment: http://www.enlightenment.org
===== ĆWICZENIA =====
==== - Co to jest DISPLAY====
* wyświetlić wartość zmiennej środowiskowej DISPLAY
* z jakich części się składa?
==== - XClients i Xterm====
* uruchomić ''xterm''
* uruchomić ''xclock''
* uruchomić ''xeyes''
* uruchomić ''xmessage "tekst"''
* uruchamiać w.w. z różnymi wartościami parametr ''geometry'' (położenie i rozmiar!)
==== - Serwer i parametry====
* oglądnąć informacje o displayu (XS) ''xdpyinfo''
* przeglądnąć listę klientów przez ''xlsclients''
* oglądnąć informacje o wybranym oknie (kliencie) ''xwininfo''
* oglądnąć informacje o wybranym oknie (kliencie) ''xprop''
* prześledzić zdarzenia związane z klientem ''xev''
* usunąć wybrany XC przez ''xkill''
==== - Clipboard====
Przećwiczyć wbudowany mechanizm "schowka":
* zaznaczyć tekst w wybranym oknie tekstowym przy pomocy LMB
* wkleić do innego okna tekstowego przez MMB
==== - Czcionki====
* wyświetlić przez ''xset'' ścieżkę dostępu do czcionek
* wyświetlić przez ''xlsfonts'' dostępne czcionki
* uruchomić ''xfontsel'', nazwa wybranej czcionki jest zachowywana w schowku
* uruchomić ''xterm ''z czcionką wybraną w.w. programem
* przeprowadzić eksperymenty dla różnych czcionek i klientów
* wyświetlić wybraną czcionkę przez ''xfd''
==== - Kolory====
* wyświetlić przez ''xcolors'' dostępne kolory
* przez program ''xcolorsel'' wybrać kolor/y
* uruchomić ''xterm'' z wybranymi kolorami (przez parametry linii poleceń)
==== - Zasoby====
* zmienić wybrane zasoby ''xterm''
* sprawdzić jakie zasoby opisują w.w. XC,
* dopisać je do pliku //.Xdefaults//
* dodać zmienione zasoby do XS przez ''xrdb''
* sprawdzić wpływ na nowo uruchamiane instancje XC
* powtórzyć ćwiczenie dla innych XC (np. ''xedit'')
==== - Windowmanager====
* przy uruchomionych kilku klientach zmieniać WM, np. poprzez menu Programs/WindowManagers
* jak zmiana wm wpływa na pracujące aplikacje?
* w obrębie jednego wm zmieniać wygląd dekoracji (np. w IceWM: MenuThemes, w WMakerze: Workspace/Appearance)
* zmienić środowisko samego WM (WMaker: WindowManagers/Modules/Preferences, ew. WPrefs)
* sprawdzić działanie wszystkich 3 klawiszy myszy na różnych obszarach, np. w root window, wewnąrz okna, na belce tytułowej, na krawędzi, na przyciskach.
==== - Bezpieczeństwo====
Przetestować podstawowy mechanizm autoryzacji:
* wypisać listę hostów uprawnionych do otwierania okien na XS: ''xhost''
* dopisać do listy hostów uprawnionych do otwierania okien na XS adres komputera na którym pracuje 2. osoba.
xhost +costam.ia.agh.edu.pl
xhost +pcb424.b4
xhost +student.uci.agh.edu.pl
* spróbować otworzyć okno xterm z ich terminala na swoim XS zadając wartość DISPLAY z linii poleceń
xterm -display pc100.ia.agh.edu.pl:0.0
* w nowo otwartym oknie na 2. terminalu sprwadzić do kogo należy powłoka, np.: ''whoami''
* UWAGA! powyższe nie będzie działało, jeżeli wszyscy są zalogowani przez XDM na jednym komputerze, np. charon! (wtedy przez ''xhost'' należałoby dodać adres/nazwe charona)
* wyłączyć kontrolę dostępu ''xhost +'', jaki jest efekt?
* włączyć kontrolę dostępu ''xhost -''
* jak widać powyższa metoda kontroli dostępu przez adresy IP jest ograniczona, bardziej zaawansowane są opisane na stronie podręcznika Xsecurity
* dla zaawansowanych: skonfigurować dostęp przez ''xauth''
==== - X i SSH====
* uruchomić przez SSH XClienty ze zdalnego serwera
* prześledzić otwieranie sesji SSH:
ssh -vX deathstar
ssh -vX charon
* jaki jest ustawiony na nim DISPLAY; dlaczego?
* jak uruchomić zdalną aplikację x-ową?
==== - Sesja====
* stworzyć/rozbudować plik //~/.xsession//
* dopisać uruchamianie dodatkowych klientów
* wymusić uruchomienie zadanego wm, np. dopisując na końcu ''wmaker'' lub ''icewm'' -> Uwaga: należy najpierw sprawdzić, czy dany wm jest zainstalowany!
* co się stanie, jeżeli się dopisze ''exec icewm''? dopisać coś po tej linijce, jaka jest różnica?
* o ile to możliwe z sesji failsafe uruchomić inne wm
* standardowe wyjście błędów poleceń uruchamianym przez wm jest przekierowane do pliku //.xsession-errors//