====== 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//