Zadanie na laboratorium --- System X Window

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

Szczegółowy zakres zadań wykonywanych w trakcie laboratorium ustala prowadzący.

  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) przy pomocy tekstowej przeglądarki www (np. links, links2 lub lynx), a na trzecim otwórz sesję Emacsa (w trybie tekstowym), w której będziesz rejestrował 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 i zatrzymywanie serwera, uruchamianie klientów)

    Uruchom „goły” serwer X Window poleceniem: X lub /usr/openwin/bin/X lub /usr/lib/X11/X lub /etc/X11/X. (Na niektórych systemach może to być jeszcze inne polecenie.)

    Zaloguj się z drugiej konsoli tekstowej (na Linuksie przełączanie między konsolami tekstowymi przez Ctrl-Alt-Fn gdzie Fn to odpowiedni klawisz funkcyjny). Uruchom emulator terminala xterm podając serwer X Window w argumencie wywołania, np.: xterm -display kajko103:0

    Powróć do ekranu serwera, najedź myszą na okno xterm'a, i pracując w tym oknie:

    Serwer można zabić poleceniem kill Unixa 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.

  3. (Ćwiczenia z xtermem)

    xterm jest niezwykle 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 xterm'a 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. emacs'a (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 xterm'a. 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ź ustawienia parametrów myszy (m), znajdź optymalne dla siebie ustawienia podwójnego i potrójnego kliknięcia myszą.

    Programem xsetroot ustaw kolor tła.

    Wpisz wybrane ustawienia xset do pliku .xinitrc i dołącz go sprawozdania z wykonania ćwiczenia.

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

  6. (Praca z zasobami)

    Przeczytaj opis zasobów, z których korzysta xterm i ustaw programem xrdb dowolnie wybrane 3 zasoby tak, aby sprawdzić, że ustawione wartości działają poprawnie. Nie korzystaj z pliku .Xdefaults (ani .Xresources, itp.), tylko wykonaj ustawienia zasobów z wiersza poleceń. Sprawdź, że kopie xterm'a uruchamiane na różnych komputerach realizują ustawione wartości zasobów. Skasuj ustawione zasoby, a następnie ustaw je ponownie z innego komputera, i ponownie sprawdź, czy wszystkie kopie klienta je realizują. Wpisz do sprawozdania całą wykonaną sekwencję wywołań xrdb (z podaniem, z którego komputera zostały wykonane), oraz krótko opisz jaki był efekt podanego ustawienia zasobów.

    Przeczytaj opis zasobów emacs'a i dobierz geometrię 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). 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.

  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 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ą:

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

  8. (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 komputerze. Spowoduj zakaz wyświetlania zdalnym klientom, oraz zezwolenie na wyświetlanie. Skonfrontuj wyświetlanie na serwerze kolegi.

    Następnie wyłącz zgodę na wyświetlanie, sprawdź, że lista xhost jest pusta, i przekaż klucz autoryzacyjny sesji X Window na zdalny komputer:
    xauth extract - $DISPLAY | ssh diablo /usr/openwin/bin/xauth merge -

    Sprawdź, że uruchamiane klienty działają poprawnie, podczas gdy klienty uruchamiane przez kolegę nie mają już dostępu. Opracuj wywołanie klienta na zdalnym komputerze, które możnaby umieścić w pliku .xinitrc aby startował zawsze automatycznie. (Na przykład, moglibyśmy chcieć wyświetlać sobie zegar xclock ze zdalnego komputera.) Wpisz opracowane wywołania do sprawozdania.

    Z kolei wyłącz lokalnego zarządcę okien. Włącz wybranego zarządcę okien ze zdalnego komputera. Skąd bierze on swoją konfigurację? Skonfiguruj jego pracę tak jak wcześniej skonfigurowałeś/aś lokalnego zarządcę okien. Zanotuj w sprawozdaniu wykonane czynności. Jeśli nie dało się tego do końca tak samo skonfigurować, lub mimo wszystko są pewne różnice w zachowaniu, odnotuj te różnice w sprawozdaniu.

    Podłącz się do zdalnego serwera 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.

Zadania dodatkowe

  1. (Zachowanie zarządcy okien)

    Twm normalnie realizuje tzw. zachowanie: focus-follows-mouse, poruszanie myszą powoduję, że aktywne jest okno nad którym znajduje się kursor myszy. Nie powoduje to automatycznego „wypłynięcia” okna na wierzch, lecz okno aktywne (a raczej związany z nim klient) otrzymuje wtedy wszystkie zdarzenia z klawiatury i myszy.

    Możliwe jest inne zachowanie zarządcy okien, tzw.: click-to-focus. Zachowanie to można spowodować ustawiając zmienną NoTitleFocus. Wypróbuj oba zachowania. Sprawdź również działanie funkcji „focus” i „unfocus” wywoływanych normalnie z menu głównego twm'a, które są specyficzną własnością tego zarządcy okien.

    Użytkownicy kommputerów dzielą się na zwolenników jednego albo drugiego zachowania. Określ swoje preferencje. Nie sugeruj się wcześniejszymi doświadczeniami z systemami okienkowymi, tylko wygodą pracy i poczuciem naturalności. W tym celu uruchom emacsa, netscape'a, acroreada, i emulator terminala xterm, i próbuj pracować pisząc coś w emacsie, od czasu do czasu uruchamiając polecenia w xtermie, i czytając dokumenty w acroreadzie lub netscape'ie.

    Przejrzyj listę pozostałych flag sterujących pracą twm'a (np. RandomPlacement, OpaqueMove), wypróbuj je, i ostatecznie opracuj plik konfiguracyjny. Sprawdź, że działa tak jak chcesz. Dołącz treść tego pliku do sprawozdania z ćwiczenia.

  2. (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 .xinitrc, 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.

  3. (Inni zarządcy okien)

    Wyłącz twm'a i uruchom innego zarządcę okien wskazanego przez prowadzącego zajęcia. Zapoznaj się z jego dokumentacją, sposobem konfiguracji menu, sposobem rozmieszczania przez niego okien klientów. Znajdź sposób zaprogramowania zachowań click-to-focus oraz {\em focus-follows-mouse} dla tego zarządcy. Opisz to w sprawozdaniu z wykonania ćwiczenia.

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

  5. (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.

  6. (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 TIFF (podpowiedź: spróbuj programem convert).