Laboratorium 4 - Praca z uniksowym interpreterem poleceń oraz systemem X Window

Zakres materiału

Wykonywanie poleceń, potoki, skrypty, zmienne systemowe, system X Window, serwer i klient systemu X Window, zarządcy okienek, praca zdalna.

Przygotowanie do zajęć

Przed przystąpieniem do zajęć należy przypomnieć sobie podstawowe pojęcia dotyczące pracy w systemie Unix oraz systemu X Window. Przypomnij sobie ułatwienia, jakie oferuje w pracy powłoka użytkownika bash (historia, przyrostowe wyszukiwanie wstecz wykonanych poleceń (Ctrl-r), uzupełnianie nazw (Tab)), sposób uruchamiania przetwarzania potokowego i przekierowywania strumieni danych. Upewnij się, że rozumiesz działanie skryptów załączonych jako materiały do tego ćwiczenia (omówionych na wykładzie). Przypomnij sobie także 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

Praca z systemem X Window

  1. (Przygotowanie do wykonania ćwiczenia)

    Podłącz się do systemu na trzech kolejnych tekstowych terminalach wirtualnych, na pierwszych dwóch będą wykonywane elementy ćwiczenia, na trzecim zaś otwórz przygotowany opis tego zadania (ten opis, który właśnie czytasz np. przeglądarką internetową lynx). Pamiętaj, że ekran graficzny pierwszego serwera X Window będzie dostępny na pierwszym wolnym terminalu wirtualnym (w systemach opartych na Debianie często terminal wirtualny nr 7 (Ctrl-Alt-F7)).

    Jeśli w systemie działa podstawowy serwer X Window uruchamiany samoczynnie przez system, możesz go wykorzystać do wyświetlania opisu tego zadania. W takim przypadku, gdy w trakcie wykonywania ćwiczenia pojawi potrzeba uruchomienia serwera X Window, należy każdorazowo uruchamiać drugi serwer X Window o numerze :1 (polecenie X :1). Aby klienty komunikowały się z tak uruchomionym serwerem muszą otrzymać argument -display :1.

    Powróć do pierwszego terminala tekstowego i rozpocznij wykonywanie następnego punktu.

  2. (Uruchamianie i zatrzymywanie serwera, uruchomienie pierwszego klienta)

    Z tekstowego terminala wirtualnego uruchom serwer X Window poleceniem X (jeśli ma to być drugi serwer to z argumentem :1; może zdarzyć się, że w danym systemie program X znajduje się w katalogu, którego nazwa nie jest umieszczona w zmiennej środowiskowej PATH, zawierającej listę katalogów, w których domyślnie poszukiwane są programy - wówczas należy poszukać go w katalogach, w których typowo jest on umieszczany: /usr/bin/, /usr/openwin/bin/, /usr/bin/X11/). Wydanie tego polecenia, oprócz uruchomienia serwera, powinno spowodować automatyczne przełączenie na terminal wirtualny z uruchomionym serwerem.

    Proces serwera można unicestwić z poziomu dowolnego terminala poleceniem kill uzupełnionym identyfikatorem procesu serwera (PID), lub naciskając klawisz Ctrl-C w terminalu, w którym został on uruchomiony. Na Linuksie można również zabić serwer kombinacją klawiszy Ctrl-Alt-Backspace (jeśli taka możliwość nie została zablokowana przez administratora).

    Przełącz się na drugi tekstowy terminal wirtualny i uruchom graficzny emulator terminala xterm ze skierowaniem wyświetlania na świeżo uruchomiony serwer X Window, podając odpowiedni argument wywołania, np.: xterm -display :0. Sprawdź w terminalu graficznym efekt wydanego polecenia.

  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 własności 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, 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. W tym wykonaj następujące eksperymenty:

    Zapoznaj się z dokumentacją każdego z badanych zarządców okien 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 ł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 &.

    Unicestwij bieżącą sesję serwera X Window wraz z jego wszystkimi klientami. Następnie ponownie 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. (Porównanie własności różnych środowisk pulpitu X Window)

    Środowiska graficzne pulpitu X Window to kompletne zestawy ustawień, konwencji, specjalnych klientów i parametrów, konfigurowane w czasie logowania się do sesji X Window.

    Sprawdź jaki wybór środowisk graficznych posiada Twój komputer (powinny być dostępne do wyboru na ekranie logowania). Uruchamiaj je kolejno (na przykład: Gnome, XFCE, WindowMaker), i przeprowadź podstawowe porównania. Po pierwsze, sprawdź własności zarządcy okien uruchomionego w danym środowisku, podobnie jak było to robione w punkcie „Porównanie własności zarządców okien''. Po drugie, oceń funkcjonalność i ergonomię całego środowiska. Oceń również możliwość jego konfiguracji i dostosowania do Twoich preferencji.

  8. (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 nie ma potrzeby przekazywania kluczy autoryzacyjnych pomiędzy tymi komputerami, 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.

Praca z interpreterem poleceń

  1. (Przygotowanie do wykonania ćwiczenia)

    Uruchom dwa emulatory terminala xterm, jeden działający na komputerze diablo, drugi na panamincie. Upewnij się, że twoim interpreterem poleceń jest w nich powłoka bash (echo $SHELL). Testuj wykonywane polecenia/skrypty na obu systemach.

  2. (Wyświetlanie informacji o wielkości katalogów)

    Utwórz alias lhs (list human sorted) dla polecenia, które wyświetli listę podkatalogów bieżącego katalogu, posortowaną według ich wielkości, z podaniem tej wielkości w formacie czytelnym dla człowieka (odpowiednio do wielkości katalogu w bajtach, kilobajtach, megabajtach)

  3. (Wykonywanie operacji na plikach o nazwie pasującej do wzorca)

    Napisz polecenie powłoki, które z bieżącego katalogu i jego wszystkich podkatalogów usunie pliki pasujące do podanego wzorca (np. pliki kopii zapasowych robionych przez emacsa - *~, #*#).

  4. (Przeszukiwanie ostatnio modyfikowanych plików)

    Napisz polecenie powłoki, które w plikach zmodyfikowanych w ostatnim czasie (tygodniu/miesiącu) wyszukają wskazaną frazę.

  5. (Modyfikacja nazw plików)

    Napisz polecenie powłoki, które wszystkim plikom w formacie JPEG/PNG z katalogu bieżącego zmieni rozszerzenia na pisane małymi literami.

  6. (Skryp wykonujący operacje porządkowe na plikach ze zdjęciami i przygotowujący na ich podstawie archiwum)

    Napisz skrypt, który ze wskazanego katalogu skopiuje wszystkie pliki ze zdjęciami w formacie JPEG/PNG, zmieni skopiowanym plikom rozszerzenia na pisane małymi literami, zastąpi występujące w nazwach plików spacje znakiem podkreślenia, zmieni rozmiar zdjęć do wskazanego argumentem podanym w wywołaniu skryptu i w końcu utworzy archiwum z tak przygotowanych plików.

  7. (Powiadamianie o wydarzeniu)

    Napisz skrypt, który będzie wysyłał pocztą elektroniczną powiadomienie, że jest już dostępne połączenie ze wskazanym serwerem.

  8. (Pobieranie treści z internetu)

    Przeanalizuj dołączony do zadania skrypt, który pobiera ze strony internetowej userfriendly losowo wybrany komiks i wyświetla go. Zmodyfikuj skrypt tak, by pobierał i wyświetlał losowy cytat ze strony en.wikiquote.org/wiki/Wikiquote:Quote_of_the_Day. (Jak widać z konstrukcji dołączonego skryptu zadanie wymaga analizy struktury pobieranej strony www. W tym celu pobierz stronę z wikiquote i zauważ, że znajdujące się w niej linie z cytatami zawierają znacznik <dd>. By z uzyskanych linii z cytatami usunąć wszystkie znaczniki html można posłużyć się poleceniem sed -e 's/<[^>]*>//g', do wybrania jednej linii z wielu z pliku może posłużyć odpowiednia kombinacja poleceń headtail, liczbę losową można uzyskać poleceniem $RANDOM.)

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ą zarządcy okien 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.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 (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!

  5. (Praca z zarządcą ekranów xdm)
    (ten element można ćwiczyć tylko pod warunkiem posiadania sprawnego połączenia sieciowego do Internetu, 256 kb/s lub więcej)

    Ponownie uruchom serwer X Window z żądaniem połączenia się ze zdalnym zarządca ekranów xdm pracującym na jakimś zdalnym serwerze (spróbuj np. diablo.ict.pwr.wroc.pl, lub 192.168.4.150):
        X -query serwer.ip.adres :1
    

    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.

    Dodatkowo/alternatywnie uruchom program Xephyr, który jest klientem X Window (a więc trzeba go uruchomić na jakimś działającym serwerze) i jednocześnie tworzy nowy serwer o zadanym numerze:

        Xephyr -screen 1024x768 -display :0 -query server.ip.adres :1
    

    W oknie Xephyra zaloguj się na zdalny system, sprawdź konfigurację. Odpal emulator terminala. Spróbuj uruchamiać na serwerze Xephyr klienty z wyświetlaniem na serwer bazowy i w przeciwnym kierunku.

  6. (Praca z polską lokalizacją)

    Dowiedz się jak zalogować się lub po zalogowaniu wybrać środowisko z polską lokalizacją, na przykład pl_PL.ISO8859-2. Sprawdź aktualne ustawienia lokalizacji (locale). 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.

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

  8. (Ś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 się 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.

  9. (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 ze strony www na diablo, zainstaluj. Sprawdź działanie wszystkich przećwiczonych mechanizmów. W szczególności może nie udać się uruchamianie zarządcy okien, albo modyfikacja niektórych jego ustawień, ponieważ niektóre serwery X Window pracujące w środowisku Microsoft Windows traktują lokalne środowisko okienkowe jako zarządcę okien.

Sprawozdanie

Sprawozdanie powinno zawierać:

About this document ...

This document was generated using the LaTeX2HTML translator Version 2008 (1.71)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -html_version 3.2,latin2,unicode -split 0 -no_navigation PProg_lab_04

The translation was initiated by Robert Muszynski on 2013-11-11


Robert Muszynski 2013-11-11