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.
źródło
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.
Oto łańcuch wydarzeń:
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 systemd
czasem zostanie to przekształcone w jednostkę serwisową.
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.log
i jest kontrolowany przez /etc/pam.conf
(prawie pusty) i /etc/pam.d/*
. W szczególności patrz /etc/pam.d/lightdm
i /etc/pam.d/lightdm-autologin
.
Po uwierzytelnieniu użytkownika uprawnienia są usuwane i zapisywany jest plik ~user/.dmrc
opisujący sesję. Na przykład:
[Desktop]
Session=ubuntu
lub
[Desktop]
Session=awesome
Te .desktop
pliki /usr/share/xsessions/*.desktop
teraz 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-session
Skrypt jest uruchamiany z g argumenty nome-session --session=ubuntu
(sic .-- „ubuntu”, a nie „jedność”)
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
; /etc/X11/Xresources
a $HOME/.Xresources
jeśli istnieją, ładuje mapę klawiatury setxbmap przy użyciu zawartości
/etc/X11/Xkbmap
i $HOME/.Xkbmap
; /etc/X11/Xmodmap
i$HOME/.Xmodmap
/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.options
pliku). 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_support
uruchamia się, /usr/lib/nux/unity_support_test
a jeśli się nie powiedzie, eksportuje LIBGL_ALWAYS_SOFTWARE=1
się do środowiska, dzięki czemu llvmpipe
oprogramowanie zostanie renderowane na pulpicie.
Począwszy od Ubunu 13.10:
/etc/X11/Xsession.d/00upstart
ustawia zmienną UPSTART
na 1
.
/etc/X11/Xsession.d/99upstart
sprawdza 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.conf
rozpoczę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.
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.
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.
Ź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.
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.
ps aux
. Możesz także sprawdzić plik ~ / .dmrc dla parametru Sessioncat ~/.dmrc
. Patrz wyżej. Sesja = ubuntu oznacza, że używasz compiz i jedności razem (i to jest domyślne.xsessions/ubuntu.desktop
plik 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ślnejubuntu.desktop
Xsession?