Co dzieje się pod przykryciem, aby zalogować się i uruchomić Unity lub inny graficzny interfejs użytkownika?

55

W przypadku problemów dobrze jest zrozumieć, co dzieje się pod przykryciem, aby zalogować użytkownika do sesji GUI i uzyskać Unity (lub innego menedżera okien), który uruchomi pulpit.

John S Gruber
źródło

Odpowiedzi:

86

Jak rozpoczyna się sesja GUI użytkownika pulpitu w Ubuntu 12.04-14.04

Oto łańcuch wydarzeń:

Jądro Ubuntu Linux i aktualizacja

Jądro rozpoczyna proces inicjowania jako proces nr 1. Jest to nowsza wersja dla Ubuntu 12.04.

Rozpoczęto prace upstart /etc/init/


Strona podręcznika: man init

Dzienniki: dziennik jądra ( dmesg; skopiowany do /var/log/syslog) /var/log/upstart/jobname.log, inne dzienniki określone przez uruchomione zadania.

Źródło: /etc/init/lightdm.conf


Wykonane zostanie zadanie początkowe /usr/sbin/lightdm. Prawdopodobnie możemy się spodziewać, że z systemdczasem zostanie to przekształcone w jednostkę serwisową.

Lightdm


Strona podręcznika:,man lightdm Również: Ubuntu Wiki: LightDM

Dzienniki:

/var/log/syslog
/var/log/lightdm/lightdm.log
/var/log/lightdm/*

## for PAM:
/var/log/auth.log

## for the Xorg X server:
/var/log/Xorg.0.log

Źródło: man lightdm and/var/log/lightdm/lightdm.log


lightdm zaczyna się dość późno w procesie inicjacji; Na przykład system dbus musi być już uruchomiony, system plików musi być gotowy, a system wyświetlania grafiki musi być gotowy.

lightdm tworzy plik xauthority, a następnie uruchamia X, uruchamiając go na VT 7, wirtualnym terminalu, który otrzymasz po naciśnięciu Alt+ Ctrl+ F7. Po uruchomieniu X sygnały lightdm sygnalizują, że program powitalny Plymouth się zakończył. Ważne jest, aby stało się to po uruchomieniu wszystkich tty (1-6).

Od lipca 2013 r. Elementy obsługi Mir zostały dodane do lightdm, ale nie są one domyślnie używane w systemach stacjonarnych od 14.04.

X próbuje użyć najbardziej zaawansowanych sterowników. Jego własne sterowniki są ładowane z /usr/lib/xorg/modules/. Zauważ, że istnieją zarówno sterowniki jądra, jak i sterowniki xorg dla wielu urządzeń, przy czym sterowniki xorg prawie na pewno korzystają ze sterowników jądra. dri i glx są ważnymi cechami, w szczególności dla zaawansowanej grafiki o wysokiej wydajności. Dzienniki są przechowywane dla X w /var/log/Xorg.0.log.

System dbus komunikuje się na temat tego „stanowiska” i uzyskuje możliwe nazwy użytkowników. lightdm używa X do rysowania ekranu. unity-greeter służy do pomocy w procesie.

Podczas wybierania różnych możliwych identyfikatorów użytkownika używany jest obraz tła identyfikatora użytkownika.

lightdm get to nazwy potencjalnych menedżerów okien / systemów /usr/share/xsessions/*.desktop.

Informacje o kontach są uzyskiwane za pośrednictwem demona kont usługi przez dbus.

lightdm i greeter używają PAM do uwierzytelnienia użytkownika. Po uwierzytelnieniu PAM uruchomi demona gnome-keyring-daemon z opcją --login i poda mu hasło użytkownika, aby mógł odblokować brelok logowania użytkownika, jeśli jest obecny. Więcej informacji na stronie https://live.gnome.org/GnomeKeyring/Pam and man 8 pam_unix. PAM przechowuje dane logowania /var/log/auth.logi jest kontrolowany przez /etc/pam.conf(prawie pusty) i /etc/pam.d/*. W szczególności patrz /etc/pam.d/lightdmi /etc/pam.d/lightdm-autologin.

Po uwierzytelnieniu użytkownika uprawnienia są usuwane i zapisywany jest plik ~user/.dmrcopisujący sesję. Na przykład:

[Desktop]
Session=ubuntu

lub

[Desktop]
Session=awesome

Te .desktoppliki /usr/share/xsessions/*.desktopteraz określić resztę sekwencji startowej.

Oto przykład dla Unity:

[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gnome-session-3.0

/usr/sbin/lightdm-sessionSkrypt jest uruchamiany z g argumenty nome-session --session=ubuntu (sic .-- „ubuntu”, a nie „jedność”)

sesja lightdm


Dzienniki:?
Dzienniki błędów: ~/.xsession-errors
uruchomione dzienniki procesów: ~/.cache/upstart/*
Źródło:/usr/sbin/lightdm-session


/usr/sbin/lightdm-session następnie wykonuje następujące kroki:

Działa:

  • /etc/profile, $HOME/.profile
  • /etc/xprofile $HOME/.xprofile;
  • ładuje zasoby z, /etc/X11/Xresourcesa $HOME/.Xresourcesjeśli istnieją, ładuje mapę klawiatury setxbmap przy użyciu zawartości /etc/X11/Xkbmapi $HOME/.Xkbmap;
  • jeśli nie używasz XKB używa xmodmap przeciwko dowolnemu istniejącemu /etc/X11/Xmodmapi$HOME/.Xmodmap
  • uruchamia skrypty w /etc/X11/xinit/xinitrc.d;
  • uruchamia skrypty Xsession /etc/X11/Xsession.d/*przy użyciu opcji z /etc/X11/Xsession.options.

    Jeden z nich uruchamia ssh-agent (redundantny), inny wykonuje $HOME/.xsessionrc. Kolejny uruchamia sesję-dbus (zarówno ssh-agent, jak i sesja-dbus, jak dozwolone w powyższym Xsession.optionspliku). Ta sesja dbus jest przydatna do komunikacji między procesami dotyczącymi tej sesji jednego użytkownika.

ssh-agent może zatrzymać klucze ssh do sesji, jeśli są one dodawane przez jakiś czas podczas sesji, ale gnome-keyring-daemon robi to samo.

/etc/X11/Xsession.d/50_check_unity_supporturuchamia się, /usr/lib/nux/unity_support_testa jeśli się nie powiedzie, eksportuje LIBGL_ALWAYS_SOFTWARE=1się do środowiska, dzięki czemu llvmpipeoprogramowanie zostanie renderowane na pulpicie.

Począwszy od Ubunu 13.10: /etc/X11/Xsession.d/00upstartustawia zmienną UPSTARTna 1. /etc/X11/Xsession.d/99upstartsprawdza tę zmienną i jeśli zestaw zastępuje init --user inne elementy ustawione na $STARTUP. Zatem upstart w trybie użytkownika uruchamia te zadania upstart w /usr/share/upstart/sessions. Jednym z nich jest gnome-session.confrozpoczęcie sesji gnome.

O ile nie zostało to jeszcze zrobione, w końcu lightdm-session uruchamia menedżera okien lub, dla jedności, powyższe uruchamia menedżera sesji gnome.

Wygląda na to, że sesja lightdm przyjmuje tradycyjną rolę xsession. Jego strona podręcznika znajduje się pod adresem http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . lightdm uważa, że ​​jest to opakowanie sesji.

Menedżer sesji gnome (powłoki Unity i Gnome)


Manpage: http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
Logi :?

Źródło: strona podręcznika man


Sesja gnome jest używana na przykład dla Unity, ale domyślnie nie jest świetna. Zobacz powyższe pliki .desktop.

gnome-session uruchamia określony program z / usr / share / gnome-session / session / i uruchamia aplikacje od ~ / .config / autostart / i / etc / xdg / autostart.

Oto jeden przykład z / etc / xdg / autostart:

$cat /etc/xdg/autostart/nm-applet.desktop
[Desktop Entry]
Name=Network
Comment=Manage your network connections
Icon=nm-device-wireless
Exec=nm-applet
Terminal=false
Type=Application
NoDisplay=true
NotShowIn=KDE;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Component=general
X-GNOME-Autostart-enabled=true
X-Ubuntu-Gettext-Domain=nm-applet

Kolejny, /etc/xdg/autostart/gnome-keyring-ssh.desktop, uruchamia demona gnome-keyring-demona z opcją --start, kończąc proces uruchamiania tego demona i przechowując ważne informacje o nim w środowisku do potencjalnego wykorzystania przez ssh.

Z listy ps aux wydaje się, że sesja gnome uruchamia menedżery okien z uruchomieniem dbus.

Menedżerowie okien

Niesamowity menedżer okien


Strona podręcznika : http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
Dzienniki:?

Źródło: strona podręcznika man, badanie pliku konfiguracyjnego


Oto plik awesome.desktop w / usr / share / xsessions / używany przez lightdm-session:

[Desktop Entry] 
Encoding=UTF-8
Name=awesome
Comment=Highly configurable framework window manager
TryExec=awesome
Exec=awesome

Jak widać, wpis po prostu powoduje uruchomienie niesamowitego menedżera okien. Czyta własne pliki konfiguracyjne, w tym /etc/xdg/awesome/rc.lua z niesamowitego pakietu. Można go skonfigurować za pomocą $ HOME / .config / awesome / rc.lua.

Jedność


Źródło: badanie pliku konfiguracyjnego


Oto plik ubuntu.desktop w / usr / share / xsessions /:

[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gnome-session-3.0

To rozpoczyna sesję gnome opisaną w /usr/share/gnome-session/sessions/ubuntu.session

Oto ten plik:

[GNOME Session]
Name=Ubuntu
RequiredComponents=gnome-settings-daemon;
RequiredProviders=windowmanager;panel;
DefaultProvider-windowmanager=compiz
DefaultProvider-panel=compiz
IsRunnableHelper=/usr/lib/nux/unity_support_test
FallbackSession=ubuntu-2d
DesktopName=Unity

Program IsRunnableHelper uruchamiany przez sesję gnome w 12.04 określa, czy można uruchomić jedność, czy też uruchomi się ubuntu-2d. Jeśli popełni błąd i powie, że jedność może działać, a nie może, są kłopoty. Wybierz ubuntu-2d ręcznie w lightdm, jeśli tak się stanie. Chociaż zwraca kod powrotu, możemy zobaczyć, co robi, uruchamiając go z opcją -p.

$ /usr/lib/nux/unity_support_test -p
OpenGL vendor string:   X.Org R300 Project
OpenGL renderer string: Gallium 0.4 on ATI RS690
OpenGL version string:  2.1 Mesa 8.0.2

Not software rendered:    yes
Not blacklisted:          yes
GLX fbconfig:             yes
GLX texture from pixmap:  yes
GL npot or rect textures: yes
GL vertex program:        yes
GL fragment program:      yes
GL vertex buffer object:  yes
GL framebuffer object:    yes
GL version is 1.4+:       yes

Unity 3D supported:       yes

W wersji 12.10 i nowszej nieobsługiwany sprzęt używa oprogramowania llvmpipe do renderowania tego, czego nie potrafi sprzęt. Jego plik konfiguracyjny jest prostszy niż powyższy. Zobacz powyżej, jak to jest włączone.

Z powyższych plików możemy zobaczyć, że sesja gnome musi uruchomić demona ustawień i uruchomić compiz w celu uruchomienia menedżera okien i dowolnych paneli.

compiz


Strona podręcznika : http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
Dzienniki:?
Źródło: http://en.wikipedia.org/wiki/Compiz , badanie systemu plików


Po uruchomieniu compiz uruchamia różne wtyczki. Do 12.10 używa się ustawień gnome do ich zdefiniowania. Można je zmienić za pomocą ccsm (menedżer ustawień konfiguracji compiz) lub za pomocą edytora gconf. Ustawienia wtyczek są przechowywane w aplikacjach / compiz-1 / general / screen0 / options pod active_plugins. Duplikaty spowodowały, że mam problemy z compiz. Są one przechowywane w katalogu osobistym użytkownika w katalogu ~ / .gconf / zorganizowanym jak wyżej. Rzeczywiste wartości są tam przechowywane w plikach% gconf.xml.

Od 12.10 wtyczki te są przechowywane binarnie w twoim pliku ~ / .config / dconf / user. Metoda przechowywania ustawień dconf lub gsettings jest nowsza. Możesz zobaczyć wszystkie te ustawienia za pomocą dconf dump /org/gnome/.

Unityshell jest jedną z tych wtyczek. Używa projektu Nux jako osadzonego zestawu narzędzi. Obrazy są rysowane na teksturach w przestrzeni trójwymiarowej o określonych wartościach przezroczystości. Są one przetwarzane przez compiz i wysyłane do llvm lub do zaawansowanych sterowników graficznych w celu umieszczenia silników graficznych w zespole sprzętowym grafiki komputerowej i ich renderowania. Ogólnie rzecz biorąc, jest to w przeciwieństwie do renderowania obrazów bezpośrednio do bufora ramki, jak to było robione bardziej tradycyjnie. Ten skomplikowany łańcuch zdarzeń wymaga bardziej zaawansowanych sterowników, a czasem podpowiada użycie zastrzeżonych sterowników graficznych w Ubuntu.

John S Gruber
źródło
Jak mogę sprawdzić, czy mój system działa w trybie Awesome, Unity lub Compiz?
James
@james Prawdopodobnie możesz sprawdzić compiz lub awesome na liście procesów. Otrzymujesz to za pomocą polecenia takiego jak ps aux. Możesz także sprawdzić plik ~ / .dmrc dla parametru Session cat ~/.dmrc. Patrz wyżej. Sesja = ubuntu oznacza, że ​​używasz compiz i jedności razem (i to jest domyślne.
John S Gruber,
Wyjątkowa odpowiedź, pozwalająca dobrze zrozumieć proces bez wymaganej wiedzy! Po twoim opisie próbowałem zreplikować xsessions/ubuntu.desktopplik w innym pliku i miałem nadzieję, że skończy się to samo zachowanie, ale bez powodzenia (więcej szczegółów w tym pytaniu ). Czy jest coś wyjątkowego w domyślnej ubuntu.desktopXsession?
Ogłoszenie
Rzeczywiście, dałbym +10, gdybym mógł. Lepsze niż dokument ...
Pierścień Ø
Dziękujemy za zapisanie tego. Czy możesz zaktualizować informacje o zmianach w nowszych wersjach Ubuntu?
exic