Laboratorium 4 - System X Window

Zakres materiału

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

Przygotowanie do zajęć

Przed przystąpieniem do zajęć należy przypomnieć sobie podstawowe pojęcia dotyczące systemu X Window. Przypomnij sobie wiadomości o terminalach wirtualnych systemu Linux i przełączaniu się między tymi terminalami (Ctrl-Alt-Fn). Dowiedz się, w jaki sposób w systemie X Window realizowana jest architektura klient-serwer.

Przebieg ćwiczenia

  1. (Przygotowanie do wykonania ćwiczenia)

    Podłącz się do systemu na trzech kolejnych tekstowych 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 np. przeglądarką internetową lynx), a na trzecim otwórz sesję Emacsa (w trybie tekstowym), w której będziesz rejestrował w pliku tekstowym wyniki otrzymane w kolejnych punktach zgodnie ze wskazówkami prowadzącego. 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 i zatrzymywanie serwera)

    Z poziomu tekstowego terminala wirtualnego uruchom „goły” serwer X Window poleceniem: X. (W danym 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 uruchomienie drugiego (lub kolejnego) serwera będzie wymagało podania argumentu :1 (dla drugiego serwera, lub :2, albo więcej, dla kolejnych).

    Zaloguj się na kolejnym tekstowym terminalu wirtualnym i uruchom graficzny emulator terminala xterm ze skierowaniem wyświetlania na właśnie odpalony serwer X Window, podając odpowiedni argument wywołania, np.: xterm -display :0. Sprawdź w terminalu graficznym efekt wydanego polecenia.

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

  3. (Uruchamianie klientów)

    Z poziomu graficznego emulatora terminala:

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

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

  5. (Porównanie środowisk graficznych)

    Uruchamiaj kolejno kilku różnych zarządców okien podanych przez prowadzącego (na przykład: blackbox, fluxbox, icewm, wmaker, openbox, gnome-wm). 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 ich 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.

  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ę, takich jak xset). Jako ostatnią pozycję w pliku wpisz wywołanie xterma z opcją -title GLOWNY, lecz bez znaku &.

    Następnie uruchom serwer X Window poleceniem xinit (jeśli w systemie działa już jeden serwer to poleceniem xinit -- :1). 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 xterma (głównego).

    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.

  7. (Zdalne uruchamianie programów)

    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ą).

    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, współpracując z kolegą/koleżanką, możesz przesłać jemu/jej 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 są 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 uniksowego poleceniem ssh -Y (w przypadku starszych wersji 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.

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

    Uruchom serwer X Window z żądaniem połączenia się ze zdalnym zarządcą 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?

  9. (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: xterma, emacsa, netscape'a/firefoksa. 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.

  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ów. (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 edytora emacs 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 czytelna, łatwa do pracy czcionka (listę dostępnych czcionek można uzyskać programem xlsfonts, a interakcyjnie przeglądać i wybierać czcionki programem xfontsel). Sprawdź, że kopie emacsaa 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.

  11. (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).

Zadania dodatkowe

  1. (Ćwiczenie z graficznym emulatorem terminala)

    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 Ctrl 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?

    Uruchom inne emulatory terminala: urxvt, gnome-terminal. Przejrzyj opcje z ich menu, porównaj własności zaznaczania tekstu myszą.

  2. (Konfiguracja pracującego serwera)

    Programem xset (man xset) najpierw sprawdź aktualne ustawienia serwera (parametr q), a następnie zmieniaj parametry wygaszacza ekranu. 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.

  3. (Konfiguracja TWM)

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

    Przejrzyj listę innych flag sterujących pracą TWMa (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ć.

    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 pozwala na włączenie pewnej wersji zachowania click-to-focus przez uruchomienie swojej funkcji f.focus, standardowo uruchamianej w jego menu. Jednak inni zarządcy okien pozwalają na bezpośrednie przełączanie się pomiędzy tymi dwoma podstawowymi zachowaniami.

  4. (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!

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 komputera z poprawnie zainstalowanym Linuksem 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. 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.