System X Window
Zadanie na laboratorium

Zakres materiału

System X Window, serwer i klient systemu X Window, zarządcy okienek, widgety, zasoby systemu X Window.

Wymagania wstępne

Przygotowanie: podstawowe pojęcia systemu X Window.

Przebieg ćwiczenia

  1. (Przygotowanie do wykonania ćwiczenia)

    Przypomnij sobie wiadomości o terminalach wirtualnych systemu Linux i przełączaniu się między tymi terminalami (Ctrl-Alt-Fn). Podłącz się do systemu na trzech kolejnych terminalach wirtualnych, na jednym będą wykonywane elementy ćwiczenia, na drugim otwórz przygotowany opis tego zadania (ten opis, który właśnie czytasz), a na trzecim otwórz sesję Emacsa (w trybie tekstowym), w której będziesz rejestrował w pliku tekstowym wyniki otrzymane w kolejnych punktach. Pamiętaj, że ekran graficzny pierwszego serwera X Window będzie na pierwszym wolnym terminalu wirtualnym (np. Ctrl-Alt-F7). Powróć do pierwszego terminala i rozpocznij wykonywanie następnego punktu.

  2. (Uruchamianie klientów)

    Zaloguj się do systemu X~Window, uruchom jakiś graficzny emulator terminala umożliwiający wykonywanie poleceń shella. Pracując w oknie terminala:

  3. (Ćwiczenie z xtermem)

    Emulator terminala xterm jest przydatnym narzędziem pracy o wielu możliwościach, szczególnie często wykorzystywanym w pracy programistycznej. Warto zapoznać się z jego możliwościami, głównie o charakterze manualnym.

    Wypróbuj operacje menu xterma: trzymając naciśnięty klawisz Control naciskaj po kolei klawisze myszy i próbuj wybrać opcje menu i sprawdzać ich znaczenie.

    Wyświetl zawartość jakiegoś pliku aby zapełnić okno xterma tekstem. Wypróbuj operacje zaznaczania myszą: naciskając lewy klawisz myszy zaznacz fragment tekstu w oknie xterma. Następnie sprawdź jak naciskanie prawego klawisza myszy rozciąga to zaznaczenie, zarówno w przód jak i w tył.

    Uruchom osobne okno jakiegoś edytora okienkowego, np. emacsa (z geometrią opracowaną wcześniej) i środkowym klawiszem wklejaj doń kolejno zaznaczone fragmenty tekstu. Upewnij się, że dobrze panujesz nad tym co i gdzie zostaje wklejone.

    Skasuj bieżące zaznaczenie w oknie xterma. Z kolei spróbuj podwójnego kliknięcia lewym klawiszem myszy (zaznacza słowo); sprawdź jak teraz działa rozciąganie zaznaczenia prawym klawiszem. Eksperymentuj z czasem: jak szybko musisz klikać myszą aby zostało to uznane przez serwer jako podwójne kliknięcie zamiast dwóch pojedynczych.

    Na koniec spróbuj potrójnego kliknięcia, co ono zaznacza, jak działa teraz rozciąganie zaznaczenia? Jaki efekt daje poczwórne kliknięcie?

  4. (Konfiguracja pracującego serwera)

    Programem xset (man xset) zmieniaj parametry wygaszacza ekranu, najpierw sprawdź aktualne ustawienia (parametr q). Ustaw bardzo krótki czas wygaszacza ekranu (s). Sprawdź możliwość ustawiania parametrów „dzwonka” (b). Sprawdź ustawienia parametrów myszy (m), znajdź optymalne dla siebie ustawienia podwójnego i potrójnego kliknięcia myszą.

    Programem xsetroot ustaw kolor tła.

  5. (Uruchamianie i zatrzymywanie serwera)

    Przełącz się na jakiś wolny termin wirtualny i uruchom „goły” serwer X Window poleceniem: X. (Na konkretnym systemie serwer X może znajdować się w katalogu, którego nie ma w zmiennej PATH. Może to być /usr/bin/X11/X, lub inny katalog tego programu.)

    Jeśli w systemie pracuje już serwer X Window, to odpalenie drugiego (lub kolejnego) serwera będzie wymagało podania argumentu :1 (dla drugiego serwera, lub :2, albo więcej, dla kolejnych). Zaloguj się na innym terminalu wirtualnym, i uruchom xterma ze skierowaniem wyświetlania na właśnie odpalony serwer X Window, podając odpowiedni argument wywołania, np.: xterm -display :0

    Serwer można zabić poleceniem kill z dowolnego terminala, lub naciskając klawisz Control-C w terminalu, w którym został uruchomiony. Na Linuksie można również zabić serwer kombinacją klawiszy Ctrl-Alt-Backspace.

  6. (Realizacja sesji przy pomocy pliku .xinitrc)

    Wpisz wypracowane poprzednio wywołania klientów do pliku .xinitrc w katalogu domowym, pamiętając o dodaniu znaku & na końcu każdego wiersza wywołującego klienta okienkowego (jest to zbędne dla programów natychmiast kończących pracę, jak xset). Jako ostatnią pozycję w pliku wpisz wywołanie xterm'a z opcją -title GLOWNY, lecz bez znaku &.

    Następnie uruchom serwer X Window poleceniem xinit. Zaobserwuj jak zakończenie wykonywania wszystkich klientów powoduje automatyczne zakończenie pracy serwera X Window. Powtórz eksperymenty usuwając znak & z niektórych wywołań, a potem także dodając go do ostatniego wywołania xterm'a (głównego).

    Uruchom grę xtetris (lub inną grę wskazaną przez prowadzącego) i grając przez 5 minut spróbuj osiągnąć maksymalny wynik. Pokaż koledze wynik zarejestrowany w tabelce wyników i wpisz go w sprawozdaniu z wykonania ćwiczenia.

  7. (Praca z zarządcą okien TWM)

    Po uruchomieniu sesji X Window w oknie xterma uruchom zarządcę okien TWM. Wypróbuj:

    Zmień treść pliku .xinitrc tak aby program twm był ostatnim wywoływanym klientem (bez &). Sprawdź, że zakończenie pracy zarządcy okien powoduję teraz zakończenie sesji serwera X Window. To jest przydatny i często używany sposób pracy.

    Następnie zapoznaj się z dokumentacją twm (man twm) i posługując się tą dokumentacją:

    Przejrzyj listę innych flag sterujących pracą TWM'a (np. NoTitleFocus, RandomPlacement, OpaqueMove), wypróbuj je, i ostatecznie opracuj plik konfiguracyjny .twmrc. Sprawdź, że działa tak jak chcesz.

    Treść plików konfiguracyjnych .xinitrc i .twmrc opracuj tak aby była zrozumiała (komentarze) i aby łatwo można było je w dalszym ciągu modyfikować i rozwijać.

    Do pliku sprawozdania z ćwiczenia wklej zmiany dokonane w pliku .twmrc (czyli różnice w odniesieniu do systemowej wersji tego pliku).

    Uwaga: TWM normalnie realizuje naturalne zachowanie serwera zwane focus-follows-mouse, tzn. poruszanie myszą powoduje, że aktywne jest okno nad którym znajduje się kursor myszy. (Tak samo zachowuje się serwer w braku zarządcy okien.) Okno, które staje się aktywne nie „wypływa” automatycznie na wierzch, a tylko zaczyna ono (a ściślej związany z nim klient) otrzymywać wszystkie zdarzenia z klawiatury i myszy. Inne typowe zachowanie serwera zwane click-to-focus, pozwala zachować aktywność okno niezależnie od ruchów myszy. Zmianę okna aktywnego wywołuje się wtedy poprzez kliknięcie w wybranym oknie myszą. (Użytkownicy komputerów dzielą się na zwolenników jednego albo drugiego zachowania systemu okienkowego, i potrafią toczyć między sobą zażarte dysputy. Określ swoje preferencje w tym sporze.) TWM posiada na włączenie pewnej wersji zachowania click-to-focus, przez uruchomienie swojej funkcji f.focus, standardowo uruchamianej w menu TWM'a. Jednak inni zarządcy okien pozwalają na bezpośrednie przełączanie się pomiędzy tymi dwoma podstawowymi zachowaniami.

  8. (Rejestrowanie obrazów z ekranu)

    Zapoznaj się z programami xwd i xwud i wypróbuj zarejestrowanie obrazu zestawu okien na monitorze programem xwd. Sprawdź programem xwud czy obraz poprawnie się zarejestrował, a następnie spróbuj przekonwertować go na format JPEG (podpowiedź: spróbuj programem convert). Wyświetl obrazek programem display i sprawdź jego własności.

    Nie wklejaj otrzymanych obrazków do sprawozdania, ani nie wysłaj ich prowadzącemu!

  9. (Praca w sieci)

    Podłącz się do zdalnego serwera, ustaw na nim zmienną środowiskową DISPLAY na ekran lokalnego serwera X Window, i uruchom przykładowe proste klienty.

    Sprawdź stan autoryzacji xhost wyświetlania w lokalnym serwerze. Spowoduj zakaz wyświetlania zdalnym klientom, oraz następnie zezwolenie na wyświetlanie dla wybranego adresu IP. Sprawdź czy te ustawienia działają (np. współpracując z kolegą).

    Następnie wyłącz zgodę na wyświetlanie xhost, sprawdź, że lista xhost jest pusta, i przekaż klucz autoryzacyjny sesji X Window na wybrany zdalny komputer, poleceniem podobnym do poniższego:
    xauth extract - $DISPLAY | ssh diablo.ict.pwr.wroc.pl /usr/openwin/bin/xauth merge -

    Uwaga: jeśli na zdalnym komputerze posiadasz konto ze wspólnym systemem plików (tak jak to się ma pomiędzy diablo a panamintem) to przekazywanie kluczy autoryzacyjnych pomiędzy tymi komputerami nie ma sensu, ponieważ klucz jest i tak zapisany we współdzielonym katalogu, i klienty z obu komputerów od razu mają do nich dostęp. W takim przypadku możesz, współpracując z kolegą, jemu/jej przesłać swój klucz autoryzacyjny (sprawdź jak w tym celu naleźy wywołać program ssh). Następnie sprawdź, że klucz działa, tzn. że klienty wywoływane przez kolegę ze wskazaniem Twojego serwera śa prawidłowo wyświetlane.

    Następnie wygeneruj programem xauth nowy klucz autoryzacyjny, i sprawdź, że z komputera/ów, którym poprzednio wysłałeś/aś klucz już nie można podłączyć się do Twojego serwera.

    Podłącz się do zdalnego serwera unixowego wywołaniem ssh -X. Sprawdź, że w zdalnej sesji utworzyła się „magicznie” zmienna DISPLAY z dziwnym ustawieniem nieistniejącego serwera. Sprawdź działanie klientów. Opracuj alternatywne rozwiązanie automatycznego wywoływania klientów do pliku .xinitrc. Odnotuj w sprawozdaniu.

  10. (Praca z zasobami)

    Zapoznaj się z notacją zasobów (nazwy zasobów i klas, ścieżka specyfikacji zasobu), i znajdź nazwy kilku przykładowych zasobów dla wybranego klienta (np. xclock). Do badania zasobów pracującego klienta przydatny jest program editres, którym można ustawić wartości dowolnych zasobów, a następnie zapisać plik zapamiętujący wybrane ustawienia. Do stwierdzenia jakie znaczenie mają poszczególne zasoby, oraz jakie mogą przyjmować wartości konieczne jest przeczytanie opisu klienta (np. man xclock). Sprawdź, że po zapisaniu ustawień zasobów na pliku i jego załadowaniu do serwera (xrdb merge nazwapliku), kolejne uruchamiane wersje danego klienta stosują się do tych ustawień zasobół. (Program editres teoretycznie pozwala na dynamiczną modyfikację wartości zasobów pracujących klientów, ale praktycznie większość klientów ignoruje te polecenia, jak wyjaśniono w opisie programu editres.

    Przeczytaj opis zasobów emacs'a i eksperymentując z ustawianiem wybranych zasobów programem xrdb, dobierz optymalne wartości trzech (lub więcej) wybranych zasobółw. Nie korzystaj z żadnych plików (np. .Xdefaults albo .Xresources, ani innych), tylko wykonaj ustawienia zasobów z poziomu shella. Na przykład, mogą to być: geometria okna, czytelne kolory (-bg -fg -bd), oraz czytelną, łatwą do pracy czcionkę (liste dostępnych czcionek można uzyskać programem xlsfonts, a interakcyjnie przeglądać i wybierać czcionki programem xfontsel). Sprawdź, że kopie emacsa'a uruchamiane z różnych komputerów realizują ustawione wartości zasobów. Wpisz wybraną specyfikację zasobów do pliku .Xdefaults na lokalnym komputerze. Zatrzymaj i ponownie uruchom serwer X Window, i upewnij się, że emacs konfiguruje się w oczekiwany sposób. Wpisz opracowane specyfikacje zasobów do sprawozdania.

  11. (Praca z zarządcą ekranów xdm)

    Uruchom serwer X Window z żądaniem połączenia się ze zdalnym zarządca ekranów xdm pracującym na diablo, bądź na innym serwerze, którego specyfikację poda prowadzący ćwiczenia. Zaloguj się na zdalny system, sprawdź jaka konfiguracja zostanie uruchomiona, jakie jest ustawienie zmiennej DISPLAY, jaki pracuje zarządca okien. Sprawdź jak i skąd można konfigurować elementy systemu: konfigurację sesji .xsession, konfigurację zarządcy okien, ustawienia zasobów. Jak działają uprawnienia, co można kontrolować z systemu lokalnego? Sformułuj krótkie wnioski w sprawozdaniu.

  12. (Praca z polską lokalizacją)

    Dowiedz się od prowadzącego ćwiczenia jak zalogować się lub po zalogowaniu wybrać środowisko z polską lokalizacją, na przykład pl_PL.ISO8859-2. Sprawdź jak wpisuje się polskie litery do różnych elementów systemu: xterm'a, emacs'a, netscape'a. Sprawdź czy używane czcionki poprawnie wyświetlają polskie litery. Jeśli któryś z klientów nie wyświetla polskich liter (sprawdź xterm), spróbuj wywołać go z ustawieniem czcionki (opcja -fn) odpowiadającej wybranej polskiej lokalizacji. Sprawdź jakim zasobem można ustawić wybieranie tej czcionki na stałe. Sformułuj krótkie wnioski w sprawozdaniu.

  13. (Porównanie własności różnych zarządców okien)

    Uruchamiaj kolejno kilku różnych zarządców okien podanych przez prowadzącego (na przykład: blackbox, fluxbox, icewm, wmaker, openbox). Zapoznaj się z ich zachowaniem w domyślnej konfiguracji, sposobem rozmieszczania przez nich okien klientów, operacjami zarządcy okien uruchamianymi myszą, i możliwościami interakcyjnej konfiguracji zarządcy okien.

    Następnie zapoznaj się z dokumentacją każdego z nich, i sprawdź czy jest możliwa jego konfiguracja przez plik(i) konfiguracyjny(e), i/lub jak w plikach konfiguracyjnych zapisywana jest konfiguracja ustawiona interakcyjnie.

    W szczególności sprawdź, czy można/łatwo jest ustawić zachowanie serwera focus-follows-mouse oraz click-to-focus.

    Oceń który z przetestowanych zarządców okien byłby najlepszym kandydatem na wystartowanie prostej i niezawodnej sesji. Dopracuj jego optymalną konfigurację, i zanotuj szczegóły.

  14. (Opracowanie konfiguracji pulpitu)

    Na podstawie wykonanych wcześniej ćwiczeń opracuj konfigurację pulpitu nadającą się do normalnej bieżącej pracy. Konfiguracja powinna składać się z:

    Pliki konfiguracyjne opatrz komentarzami pozwalającymi w przyszłości łatwiej edytować je ręcznie (lub automatycznie, jeśli istnieją odpowiednie do tego narzędzia).

Zadanie domowe

  1. (Porównanie własności innego serwera X Window)

    Sprawdź na innym komputerze (innych komputerach), do którego/ych masz dostęp, z zainstalowanym serwerem X Window, czy ustawienia wypracowane w tym ćwiczeniu nadal działają poprawnie:

  2. (Środowiska KDE i/lub Gnome)

    Uzyskaj dostęp do komputeraz z poprawnie zainstalowanym Linuxem i systemem X Window ze środowiskiem KDE lub Gnome. Sprawdź jak w tym środowisku działają poznane mechanizmy systemu X Window, jak realizowany jest plik .xinitrc. Sprawdź jak nazywa sie program zarządcy okien, jakie ma możliwości, jakie elementy zachowania serwera wymusza. Sprawdź jak możesz konfigurować zachowanie tego zarządcy okien i całe środowisko programem kdecenter ??? Spróbuj ustawić zachowania click-to-focus oraz focus-follows-mouse.

  3. (Uruchamianie serwera X Window w środowisku Microsoft Windows)

    Uzyskaj dostęp do komputera z zainstalowanym systemem Microsoft Windows podłączonym do sieci. Sprawdź czy jest na nim serwer X Window, jeśli nie to ściągnij taki serwer z diablo, zainstaluj. Sprawdź działanie wszystkich przećwiczonych mechanizmów. W szczególności może nie udać się uruchamianie zarządcy okien, albo niektóre jego ustawienia, ponieważ niektóre serwery X Window pracujące w środowisku Microsoft Windows traktują lokalne środowisko okienkowe jako zarządcę okien.