Learn Linux 101: Install and configure X11

Plik konfiguracyjny X Window

W początkach X-ów konfigurowanie wyświetlacza oznaczało posiadanie rozległej wiedzy o jego możliwościach i umiejętność wyrażania informacji nie tylko o rozdzielczości, ale także o wartościach synchronizacji poziomej i pionowej, głębi kolorów i tak dalej. Od czasu pojawienia się Video Electronics Standards Association (VESA) i protokołów Display Data Channel (DDC), które pozwalają wyświetlaczowi komunikować te możliwości do karty graficznej, a tym samym do komputera, konfiguracja stała się znacznie bardziej automatyczna. Jest to korzystne, ponieważ oczekujemy teraz, że będziemy mogli zabrać naszego notebooka gdziekolwiek i po prostu podłączyć dostępny zewnętrzny monitor lub projektor.

Konfigurowanie myszy, trackballa lub klawiatury również stało się bardziej automatyczne. Ogólnie rzecz biorąc, po prostu podłączasz urządzenie, często poprzez połączenie USB i działa.

Jednakże, jak w przypadku większości rzeczy w Linuksie, istnieje bazowy mechanizm konfiguracyjny, który możesz wykorzystać. W rzeczywistości, implementacja Xorg w X uzyskuje informacje konfiguracyjne z kilku źródeł. Głównym plikiem konfiguracyjnym jest xorg.conf, wraz z plikami zawartymi w katalogu xorg.conf.d. Zazwyczaj znajdują się one w /etc/X11. Dodatkowa konfiguracja może pochodzić z opcji wiersza poleceń, zmiennych środowiskowych, autodetekcji i domyślnych ustawień awaryjnych.

Plik konfiguracyjny xorg.conf i pliki w katalogu xorg.conf.d są zorganizowane w sekcje, które mogą być podane w dowolnej kolejności. Ogólny format sekcji jest pokazany na Listingu 1.

Listing 1. Układ sekcji w xorg.conf

 Section "SectionName" SectionEntry ... EndSection

Pokaż więcejPokaż więcej ikona

Xorg z opcją -configure. Polecenie Xorg jest w rzeczywistości dowiązaniem symbolicznym do polecenia X znajdującego się zwykle w /usr/bin. Musisz uruchomić polecenie Xorg jako root i upewnić się, że żaden serwer X nie jest uruchomiony. Jednym ze sposobów na to jest edycja zwrotki GRUB2, aby uruchomić system w trybie wieloużytkownikowym bez X-ów. Tradycyjnie jest to runlevel 3. Po prostu edytuj wpis menu startowego, które chcesz uruchomić i dodaj 3 na końcu linii `linux boot/vmlinuz…’ jak pokazano na rysunku 2.

Rysunek 2. Bootowanie w tryb wieloużytkownikowy bez X

Jeśli używasz systemd, możesz użyć systemd.unit=multi-user.target zamiast 3.

Xorg -configure ładuje dostępne sterowniki urządzeń i sonduje sprzęt. Działa na wielu systemach, ale ma problemy na niektórych systemach, według strony man. Dokumentacja Fedory zaleca używanie wyświetlacza :1 zamiast domyślnego :0, więc możesz spróbować Xorg :1 -configure, jeśli zwykły Xorg -configure nie działa.

Przykładowy plik wygenerowany tą metodą na moim systemie openSUSE Tumbleweed jest pokazany na Listingu 2.

Listing 2. Przykład xorg.conf

Zakładając, że Twój wyświetlacz obsługuje DDC, jak większość nowoczesnych wyświetlaczy, możesz użyć polecenia xrandr, aby zapytać o jego możliwości. Listing 4 pokazuje informacje drm dla notebooka z podłączonym wyświetlaczem i odpowiednie dane wyjściowe z xrandr.

Listing 4. Użycie xrandr do określenia możliwości wyświetlacza

XkbVariantokreśla, które warianty dwóch układów powinny być używane. W przypadku układu us używany jest jego domyślny wariant. W przypadku układu sk używany jest jego wariant qwerty. Opcja XkbOptions wskazuje, że użytkownicy mogą przełączać się między układami za pomocą klawisza CapsLock.

Listwa 5. Uaktualnianie konfiguracji klawiatury

localectl. Jednak localectl status pokazuje, że te zmiany zostały odebrane po ponownym uruchomieniu systemu, jak pokazano na Listingu 6.

Listing 6. Wyświetlanie stanu klawiatury za pomocą localectl

Menedżery wyświetlania należą do trzech ogólnych kategorii.

  1. Menedżery okien kafelkowych dzielą ekran na kafelki i zapisują każdy kafelek oddzielnie od innych. Wydajność jest ogólnie dobra.
  2. Menedżery okien układają poszczególne okna na ekranie w stos w liście znanej jako Z-order. Kiedy nowe okno otrzymuje fokus, jest umieszczane na szczycie listy Z, a wszystkie niższe okna są przerysowywane. Może to być powolne, szczególnie przy drobnych zmianach, ale opracowano kilka optymalizacji.
  3. Kompozytowe menedżery okien są zwykle menedżerami stosu, które przechowują bufor dla każdego okna, a następnie łączą je w pojedynczy bufor do wyświetlenia bez potrzeby przerysowywania każdego pojedynczego okna, a następnie nadpisywania go następnym wyższym w kolejności Z. Pozwala to również na efekty takie jak przezroczystość. Pozwala to również na takie efekty jak przezroczystość.

Rysunek 3 pokazuje przykład kafelkowego menedżera okien I3. Zaczynasz z pustym pulpitem, a następnie tworzysz okno, takie jak okno terminala. Zajmuje ono cały ekran. Następnie możesz otworzyć inne okno, które podzieli oryginalny kafelek na dwa. Jeśli następnie otworzysz kolejne, ekran zostanie podzielony na trzy kafelki. Możesz wybrać tworzenie nowych kafelków poziomo lub pionowo. W tym przykładzie, zdecydowałem się podzielić oryginalny środkowy kafelek zawierający grę sudoku pionowo, aby utworzyć kolejne małe okno terminala. Następnie podzieliłem go poziomo, aby dodać okno xlcock.

Rysunek 3. Kafelkowy menedżer okien I3

Zazwyczaj możesz przenosić okna między wirtualnymi pulpitami, co bardzo pomaga, jeśli masz otwartych wiele dużych okien.

Możesz otworzyć listę dostępnych aplikacji jako menu na górze ekranu i wybierać aplikacje przez powolne przewijanie w poziomie lub szybciej przez wpisanie części lub całości nazwy, takiej jak 'xclock’.

W przeciwieństwie do menedżerów okien z kafelkami, menedżery okien z układaniem w stos umożliwiają posiadanie okien o dowolnym rozmiarze obsługiwanym przez wyświetlacz, w tym okien, które mogą zachodzić na krawędź wyświetlacza. Rysunek 4 jest przykładem menedżera okien Openbox pokazującego cztery nakładające się na siebie okna oraz menu umożliwiające otwieranie nowych aplikacji.

Rysunek 4. Menedżer okien Openbox z układaniem w stos

Podstawowe menedżery okien z układaniem w stos działają na zasadzie przerysowywania wszystkich okien na ekranie, gdy okno z fokusem zmienia się, jest przenoszone, zamykane lub zmieniane jest jego rozmiar. Może to powodować wielokrotne przepisywanie różnych obszarów ekranu, ponieważ przetwarzany jest cały rząd Z. Algorytmy mogą być użyte do zminimalizowania ilości niepotrzebnych przepisań.

Ulepszeniem podstawowej idei układania w stos jest kompozytowy menedżer okien. Taki menedżer okien przechowuje bufor zawartości każdego okna i łączy je lub komponuje w jedno okno. Tylko zaktualizowane części muszą być zapisane do bufora karty graficznej. Compiz jest jednym z przykładów kompozytowego menedżera okien, podczas gdy środowiska graficzne takie jak KDE i GNOME również używają kompozytowych menedżerów okien.

Środowisko graficzne generalnie zapewnia w pełni funkcjonalne doświadczenie użytkownika, włączając w to takie rzeczy jak graficzne powitanie logowania, graficzne menu systemowe, zasobnik do wyświetlania widżetów, takich jak pora dnia, ikony otwartych aplikacji i tak dalej. Zestaw zintegrowanych aplikacji zazwyczaj zapewnia spójne wrażenia dla użytkownika. Większość menedżerów okien jest znacznie lżejsza niż pełne środowisko pulpitu.

Rysunek 5 ilustruje koncepcję przezroczystości w kompozytowym menedżerze okien lub środowisku pulpitu. Przytrzymaj lewy przycisk myszy (przycisk 1) na belce tytułowej okna terminala, przygotowując się do jego przesunięcia. Wyświetlacz zmieni się tak, by pokazać, jakie okna znajdują się poniżej tego konkretnego obszaru. Może to pomóc w przeniesieniu jednego okna z góry na drugie, gdy chcesz, aby oba były widoczne.

Rysunek 5. Przezroczystość na pulpicie KDE Plasma

Rysunek 6 ilustruje środowisko GNOME 3.28 na Fedorze. Kliknięcie przycisku Działania w lewym górnym rogu tego ekranu otwiera po lewej stronie ekranu ikonowaną listę ulubionych i pokazuje zestaw uruchomionych aplikacji jako małe okienka. Możesz kliknąć ulubiony program, kliknąć małe okno lub użyć pola wyszukiwania u góry ekranu, aby wyszukać program. W tym konkretnym przykładzie kliknąłem dzień i godzinę na górnym pasku, aby otworzyć widżet, który pokazuje kilka komunikatów, takich jak dostępne aktualizacje lub ostatnie wykonane polecenie, a także dodatkowe informacje o dacie i godzinie. Ikony w prawym górnym rogu umożliwiają dostęp do takich funkcji, jak głośność głośnika, ustawienia sieci, opcje dostępności oraz opcje zamykania, wylogowywania i ponownego uruchamiania systemu.

Rysunek 6. Aktywności i widżety środowiska Fedora GNOME

Wspomniałem, że środowiska graficzne często zawierają zintegrowane aplikacje pomagające w zarządzaniu różnymi aspektami pulpitu lub systemu. Rysunek 7 pokazuje okno dialogowe ustawień Fedora GNOME 3.28 otwarte przy ustawieniach wyświetlania. Ten przykład pochodzi z notebooka z zewnętrznym monitorem Viewsonic. Typowe wybory w tym przypadku to połączenie dwóch ekranów jako pojedynczego wyświetlacza lub odbicie zawartości jednego ekranu na drugim. W tym przypadku wybieramy połączenie dwóch ekranów z wbudowanym wyświetlaczem logicznie na prawo od zewnętrznego monitora.

Rysunek 7. Okno dialogowe Fedora GNOME Ustawienia ekranu

Jak możesz zmienić rozdzielczość ekranu w pliku xorg.conf, możesz także powiedzieć kompozytorowi, aby przeskalował okno do 100% lub 200%. Dostępne skalowanie może zależeć od rozmiaru monitora, jak również od konkretnego pulpitu, którego używasz. Ja również posiadam monitor UHD (4K) i oczy, które nie są w stanie odczytać bardzo małej natywnej rozdzielczości tekstu. Więc na tym monitorze często używam współczynnika skalowania 200%.

Zauważ, że zmiany dokonane przy użyciu ustawień GNOME nie aktualizują xorg.conf. Zamiast tego ustawienia te są zapisywane w pliku .config/monitors.xml w katalogu domowym. GNOME przechowuje także inne ustawienia monitorów i klawiatury w bazie danych dconf, którą także można znaleźć w katalogu domowym. Umieszczenie tych ustawień w katalogu domowym oznacza, że dotyczą one tylko Ciebie. Inni użytkownicy mogą mieć inne ustawienia.

Jeśli masz zainstalowanych kilka środowisk graficznych lub menedżerów okien, możesz się zastanawiać, jak wybrać między nimi. Możesz uruchomić komputer w trybie wieloużytkownikowym, jak opisano wcześniej w tym poradniku, a następnie uruchomić polecenie takie jak startx, aby uruchomić X z odpowiednim menedżerem. Jeśli posiadasz środowisko graficzne, takie jak GNOME, które udostępnia powitanie, prawdopodobnie będziesz miał możliwość wyboru ustawień na ekranie powitania. Rysunek 8 pokazuje wybory zainstalowane w moim systemie Fedora 28.

Rysunek 8. Powitanie Fedory GNOME 3 z wyborem WM

Zarządzanie dostępem do serwera X i wyświetlanie aplikacji zdalnie

Do tej pory widzieliście przykłady X-ów działających na komputerze biurkowym z jednym, a może dwoma monitorami. Serwer X traktuje pojedynczy wyświetlacz jako zbiór monitorów, które współdzielą wspólny zestaw urządzeń wejściowych.

Więc notebook pokazany na rysunku 7 ma jeden wyświetlacz, mimo że ma wbudowany monitor i monitor zewnętrzny. W tym przykładzie, oba monitory działają tak, jakby były ze sobą połączone. Tworzy to jeden logiczny ekran, który umożliwia przenoszenie okien pomiędzy monitorami, a nawet dzielenie ich na części. Systemy wieloużytkownikowe zwykle mają wiele wyświetlaczy, więc potrzebny jest sposób na ich opisanie.

X używa trzyczęściowej nazwy dla wyświetlaczy w postaci hostname:displaynumber.screennumber, gdzie hostname jest nazwą hosta komputera, displaynumber jest liczbą zaczynającą się od 0, która opisuje konkretny wyświetlacz, a screennumber ma zastosowanie, jeśli dwa lub więcej monitorów są traktowane jako oddzielne ekrany, a nie jako jeden logiczny ekran. Zarówno nazwa hosta, jak i numer ekranu mogą być pominięte, więc najczęstszą notacją wyświetlania, jaką można zobaczyć, jest :0. Możesz zobaczyć swoje bieżące ustawienie w zmiennej środowiskowej DISPLAY, jak pokazano na Listingu 7.

Listing 7. Zmienna środowiskowa DISPLAY

ian@attic5-u18:~$ echo $DISPLAY:0

Pokaż więcejPokaż więcej ikona

DISPLAY pozwoli każdemu użytkownikowi zapisywać dane wyjściowe na ekranie, ale X ma pewne ograniczenia kontroli dostępu. Pokażę trzy sposoby łączenia się z serwerem X.

  1. Użyj ssh z przekierowaniem X
  2. Użyj Xauthority i xauth
  3. użyj kontroli hosta lub użytkownika z xhost

Najbezpieczniejszym sposobem używania X na innym ekranie jest użycie przekierowania X (czasami nazywanego tunelowaniem). Musi to być włączone na serwerze SSH, z którym się łączysz, za pomocą linii X11Forwarding yes w pliku konfiguracyjnym, /etc/ssh/sshd_config. Musisz także włączyć ją na kliencie, podając opcję -X (to duża litera X) w poleceniu ssh. Listing 8 porównuje co się stanie jeśli użyję su - jane aby przełączyć się na użytkownika jane w moim systemie, a następnie użyję ssh -X jane@localhost. W obu przypadkach próbuję uruchomić polecenie xclock, aby wyświetlić mały zegar na moim ekranie.

Lista 8. X forwarding

DISPLAY jest ustawiona na localhost:10.0. Serwer sshd efektywnie tworzy dla Ciebie serwer X na systemie docelowym. Nie chcesz, żeby to kolidowało z jakimkolwiek prawdziwym serwerem X w systemie. Dlatego plik konfiguracyjny, /etc/ssh/sshd_config, zawiera linię X11DisplayOffset 10 określającą offset początkowy (od 0) dla serwerów X przez ssh. Domyślnie jest to 10, co zwykle wystarcza dla stacji roboczej z jednym użytkownikiem, ale może wymagać zwiększenia w systemie z wieloma użytkownikami. Drugiemu połączeniu ssh z serwerem zostałoby przypisane wyświetlenie 11 i tak dalej.

Drugą metodą umożliwiającą innym łączenie się z serwerem X jest metoda Xauthority. Plik Xauthority zawiera informacje o autoryzacji używane podczas łączenia się z serwerem X. Zmienna środowiskowa XAUTHORITY określa nazwę aktualnie używanego pliku, albo pliku generowanego przez system, takiego jak /run/user/1000/gdm/Xauthority w moim systemie Ubuntu 18, albo własnego pliku .Xauthority.

Użyj polecenia xauth, aby wyświetlić listę, wyodrębnić lub scalić nowe autorytety. użyj opcji -f, aby określić plik Xauthority inny niż ten w zmiennej środowiskowej XAUTHORITY. Możesz podać polecenia xauth w wierszu poleceń lub uruchomić program i używać poleceń z jego wnętrza. Listing 9 pokazuje kilka przykładów i wyodrębnia moją autoryzację dla wyświetlacza :0 do pliku o nazwie auth-ian.

Listing 9. Wyciąganie informacji o uprawnieniach przy użyciu xauth

XAUTHORITY. Użytkownik jane może wtedy wyświetlać aplikacje na moim wyświetlaczu.

Listwa 10. Łączenie informacji o uprawnieniach przy użyciu xauth

xhost. Na stacji roboczej możesz użyć tego polecenia, aby umożliwić sobie otwieranie programów graficznych jako inny użytkownik. Polecenie xhost bez opcji wyświetla bieżącą listę kontroli dostępu. Użyj opcji + z nazwą, aby zezwolić na dostęp do dodatkowych systemów lub użytkowników. Listing 11 pokazuje, jak dodać użytkownika john na moim systemie lokalnym do listy kontroli dostępu, a następnie pokazuje użytkownika john otwierającego graficzny program xclock.

Listing 11. Użycie xhost do włączenia pojedynczego użytkownika lokalnego

xhost +local:, jak pokazano na Listingu 12. Zwróć uwagę na dwukropek (:) na końcu local.

Listing 12. Using xhost to enable all local non-networked users

– zamiast +, aby usunąć wpisy, które zostały włączone. Zobacz strony man lub info xhost dla dodatkowych opcji.

Dla bezpieczeństwa powinieneś użyć tunelowania SSH lub ewentualnie innego rozwiązania takiego jak Virtual Network Computing (VNC) zamiast xauth lub xhost. VNC jest poza zakresem tego tutoriala ale zapewnia lepszą wydajność niż tunelowanie SSH.

Gdy coś pójdzie nie tak

Przy tak wielu możliwych źródłach informacji o konfiguracji X musisz wiedzieć gdzie szukać informacji w logach. Błędy związane z twoją indywidualną sesją X mogą być zlokalizowane w .xsession-errors lub ewentualnie .xsession-errors-:0 w twoim katalogu domowym. Przyrostek :0 jest dla błędów na wyświetlaczu :0.

Główny dziennik X-ów znajduje się w /var/log. Jego nazwa to zwykle /var/log/Xorg.0.log, gdzie 0 jest numerem twojego wyświetlacza. Numer ten będzie inny, jeśli nie używasz wyświetlacza :0.

Wayland, nowy kompozytowy menedżer okien

Ostatnio został opracowany nowy serwer wyświetlania i protokół kompozytowy o nazwie Wayland. W tym modelu aplikacje, same tworzą zawartość swoich okien w buforze poza ekranem. Kompozytor i serwer są zintegrowane. Intencją Waylanda jest dostarczenie prostszego i bardziej wydajnego rozwiązania niż X. Wayland w większości ponownie wykorzystuje istniejące sterowniki i infrastrukturę, co czyni ten projekt możliwym.

W przeciwieństwie do X, Wayland nie ma projektu transparentnego dla sieci. Inne rozwiązania, takie jak VNC mogą być używane, jeśli potrzebne jest zdalne wyświetlanie okien.

Weston jest referencyjnym kompozytorem implementującym Waylanda. GNOME, KDE, Enlightenment i kilka innych menedżerów okien obsługuje Wayland. Zestawy narzędzi takie jak Qt 5 i GTK+ również obsługują Wayland. W momencie pisania (grudzień 2018) zarówno Fedora, jak i Ubuntu dostarczają z Waylandem jako domyślnym serwerem wyświetlania.

Serwer Xorg zawiera teraz XWayland, który pozwala istniejącym aplikacjom X na uruchamianie z kompozytorem Wayland.

Większość obecnych implementacji nadal ma wybór uruchamiania X lub Waylanda dla każdej sesji. Zobacz Rysunek 7 dla przykładu, jak powitanie GMS pozwala wybrać typ sesji. W Fedorze domyślnie GNOME jest uruchamiane na Waylandzie.

Można też sprawdzić w czasie uruchamiania bez konieczności logowania. Jeśli używasz Waylanda, ustawiona będzie zmienna środowiskowa WAYLAND_DISPLAY. W systemach używających systemd, możesz użyć polecenia loginctl do określenia numeru sesji logowania, a następnie użyć go ponownie do określenia typu sesji. Listing 13 pokazuje te narzędzia, najpierw na systemie Fedora 28 używającym Waylanda, a następnie na systemie Ubuntu 18 używającym Xorg.

Listing 13. Określanie, czy używasz X czy Waylanda

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.