In caso di problemi, potrebbe essere utile capire cosa succede sotto le copertine per accedere a un utente in una sessione della GUI e ottenere un Unity (o un altro gestore di finestre) per far apparire un desktop.
In caso di problemi, potrebbe essere utile capire cosa succede sotto le copertine per accedere a un utente in una sessione della GUI e ottenere un Unity (o un altro gestore di finestre) per far apparire un desktop.
Risposte:
Ecco la catena di eventi:
Il kernel avvia il processo di inizializzazione come processo numero 1. Questo è avviato per Ubuntu 12.04.
Sono in corso lavori di avvio /etc/init/
Pagina man: man init
Log: log del kernel ( dmesg
; copiato in /var/log/syslog
) /var/log/upstart/jobname.log
, altri log determinati dai lavori avviati.
Fonte: /etc/init/lightdm.conf
Viene eseguito il processo di avvio /usr/sbin/lightdm
. Probabilmente possiamo aspettarci che questo venga convertito in systemd
un'unità di servizio nel tempo.
Pagina man:, man lightdm
anche: Ubuntu Wiki: LightDM
logs:
/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
Fonte: man lightdm e/var/log/lightdm/lightdm.log
lightdm get è iniziato abbastanza tardi nel processo di init; Ad esempio, il dbus di sistema deve essere già avviato, il filesystem deve essere pronto e il sistema di visualizzazione grafica deve essere pronto.
lightdm crea un file xauthority e quindi avvia X, avviandolo su VT 7, il terminale virtuale che si ottiene se si preme Alt+ Ctrl+ F7. All'avvio di X, i segnali lightdm consentono di chiudere il programma della schermata iniziale di Plymouth. È essenziale che ciò avvenga dopo l'inizio di tutti i tty (1-6).
Da luglio 2013 gli elementi di supporto Mir sono stati aggiunti a lightdm, ma quelli non sono usati di default per i sistemi desktop a partire dal 14.04.
X tenta di utilizzare i driver più avanzati possibili. I suoi driver vengono caricati da /usr/lib/xorg/modules/
. Nota che esistono molti driver del kernel e driver xorg per molti dispositivi, con i driver xorg che usano quasi sicuramente quelli del kernel. dri e glx sono caratteristiche importanti, in particolare, per la grafica avanzata ad alte prestazioni. I log sono memorizzati per X in /var/log/Xorg.0.log
.
Esistono comunicazioni sul dbus di sistema su questa "sede" e vengono acquisiti possibili nomi utente. lightdm usa X per disegnare lo schermo. unità-greeter è usato per aiutare nel processo.
Quando si selezionano i vari possibili userid, viene utilizzata l'immagine di backgound dell'utente.
lightdm get è il nome di potenziali gestori / sistemi di finestre da /usr/share/xsessions/*.desktop
.
Le informazioni sull'account vengono acquisite tramite il daemon account-servizio account su dbus.
lightdm e il greeter usano PAM per autenticare l'utente. Una volta autenticato, PAM avvierà un demone gnome-keyring-daemon con l'opzione --login e gli fornirà la password dell'utente in modo che possa sbloccare il keyring di login dell'utente, se presente. Vedi https://live.gnome.org/GnomeKeyring/Pam e man 8 pam_unix per maggiori informazioni. PAM memorizza le informazioni di registro /var/log/auth.log
ed è controllato da /etc/pam.conf
(quasi vuoto) e /etc/pam.d/*
. In particolare, vedi /etc/pam.d/lightdm
e /etc/pam.d/lightdm-autologin
.
Una volta che l'utente è autenticato, i privilegi vengono eliminati e viene scritto un file per ~user/.dmrc
descrivere la sessione. Per esempio:
[Desktop]
Session=ubuntu
o
[Desktop]
Session=awesome
I .desktop
file da /usr/share/xsessions/*.desktop
ora determinano il resto della sequenza di avvio.
Ad esempio, ecco quello per 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
Lo /usr/sbin/lightdm-session
script della shell viene eseguito con gli argomenti g nome-session --session=ubuntu
(sic .-- 'Ubuntu', non 'unità')
Registri:?
Log degli errori: Log dei ~/.xsession-errors
processi avviati: ~/.cache/upstart/*
Origine:/usr/sbin/lightdm-session
/usr/sbin/lightdm-session
quindi esegue questi passaggi:
corre:
/etc/profile, $HOME/.profile
/etc/xprofile $HOME/.xprofile
; /etc/X11/Xresources
e $HOME/.Xresources
, se esistono, carica la mappa della tastiera con setxbmap usando i contenuti di
/etc/X11/Xkbmap
e $HOME/.Xkbmap
; /etc/X11/Xmodmap
e$HOME/.Xmodmap
/etc/X11/xinit/xinitrc.d
; esegue gli script Xsession in /etc/X11/Xsession.d/*
, usando le opzioni in /etc/X11/Xsession.options
.
Uno di questi avvia ssh-agent (ridondante), un altro viene eseguito $HOME/.xsessionrc
. Un altro avvia session-dbus (sia ssh-agent che session-dbus come consentito nel Xsession.options
file sopra ). Questo dbus di sessione è utile per le comunicazioni tra i processi riguardanti questa sessione per singolo utente.
ssh-agent può trattenere i tasti ssh per la sessione se vengono aggiunti in qualche momento durante la sessione, ma gnome-keyring-daemon fa la stessa cosa.
/etc/X11/Xsession.d/50_check_unity_support
viene eseguito /usr/lib/nux/unity_support_test
e se fallisce l'esportazione LIBGL_ALWAYS_SOFTWARE=1
nell'ambiente in modo che llvmpipe
verrà utilizzato per il rendering del desktop del software.
A partire da Ubunu 13.10:
/etc/X11/Xsession.d/00upstart
imposta la variabile UPSTART
su 1
.
/etc/X11/Xsession.d/99upstart
controlla quella variabile e se impostato sostituisce init --user
gli altri elementi impostati su $STARTUP
. In questo modo up-start in modalità utente avvia quei lavori di avvio in /usr/share/upstart/sessions
. Uno di questi è gnome-session.conf
che avvia gnome-session.
A meno che non sia già stato fatto, finalmente lightdm-session avvia un gestore di finestre o, per unità, quanto sopra avvia il gestore di sessioni di gnome.
Sembra che lightdm-session assuma il ruolo tradizionale di xsession. La sua pagina man è su http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . lightdm lo considera un wrapper di sessione.
Manpage: http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
Registri :?
Fonte: pagina man
gnome-session è usato per Unity, ma non per fantastico di default, per esempio. Vedi i file .desktop sopra.
gnome-session avvia il programma specificato da / usr / share / gnome-session / sessioni / e avvia le applicazioni da ~ / .config / autostart / e / etc / xdg / autostart.
Ecco un esempio da / 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
Un altro, /etc/xdg/autostart/gnome-keyring-ssh.desktop, avvia gnome-keyring-daemon con l'opzione --start, completando l'avvio di quel processo daemon e memorizzando importanti informazioni al riguardo nell'ambiente per un potenziale utilizzo da parte di ssh.
Da un elenco ps aux sembra che gnome-session avvii i gestori di finestre con dbus-launch.
Pagina man: http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
Registri:?
Fonte: pagina man, esame del file di configurazione
Ecco il file awesome.desktop in / usr / share / xsessions / usato da lightdm-session:
[Desktop Entry]
Encoding=UTF-8
Name=awesome
Comment=Highly configurable framework window manager
TryExec=awesome
Exec=awesome
Come puoi vedere, la voce fa semplicemente eseguire il fantastico gestore di finestre. Legge i propri file di configurazione, incluso /etc/xdg/awesome/rc.lua dal fantastico pacchetto. Può essere configurato con $ HOME / .config / awesome / rc.lua.
Fonte: esame del file di configurazione
Ecco il file ubuntu.desktop in / 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
Questo avvia la sessione di gnome descritta in /usr/share/gnome-session/sessions/ubuntu.session
Ecco quel file:
[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
Il programma IsRunnableHelper eseguito da gnome-session in 12.04 determina se unità può essere eseguita o se verrà eseguito ubuntu-2d. Se commette un errore e dice che l'unità può funzionare e non può, ci sono problemi. Scegli ubuntu-2d manualmente in lightdm se ti succede. Mentre restituisce un codice di ritorno, possiamo vedere cosa sta facendo eseguendolo con l'opzione -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
Per la versione 12.10 e successive l'hardware non supportato utilizza il software llvmpipe per eseguire il rendering di ciò che l'hardware non può. Il suo file di configurazione è più semplice di quanto sopra. Vedi sopra per come è abilitato.
Dai file sopra possiamo vedere che gnome-session deve avviare il demone delle impostazioni e avviare compiz per eseguire un gestore di finestre e qualsiasi pannello.
Pagina man: http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
Registri:?
Fonte: http://en.wikipedia.org/wiki/Compiz , esame del file system
Una volta avviato compiz, esegue vari plugin. Prima di 12.10 vengono usate le impostazioni di gnome per definirle. Possono essere cambiati con ccsm (compiz config settings manager) o con gconf-editor. Le impostazioni del plugin sono memorizzate in app / compiz-1 / general / screen0 / options in active_plugins. I duplicati mi hanno fatto avere segfault con compiz. Questi sono memorizzati nella home directory dell'utente nella directory ~ / .gconf / organizzata come sopra. I valori effettivi sono memorizzati nei file% gconf.xml lì.
Dal 12.10 questi plugin sono archiviati in binario nel file ~ / .config / dconf / user. Il metodo dconf o gsettings per la memorizzazione delle impostazioni è più recente. Puoi vedere tutte queste impostazioni con dconf dump /org/gnome/
.
Unityshell è uno di questi plugin. Utilizza il progetto nux come toolkit incorporato. Le immagini vengono disegnate su trame nello spazio tridimensionale con valori di trasparenza specificati. Questi vengono elaborati da Compiz e inviati a llvm o ai driver grafici avanzati per avere i motori grafici sul composito hardware grafico del computer del sistema e renderli. In generale, ciò è contrario al rendering delle immagini direttamente su un framebuffer, come è stato fatto più tradizionalmente. Questa complicata catena di eventi è ciò che richiede driver più avanzati e talvolta richiede l'utilizzo di driver grafici proprietari in Ubuntu.
ps aux
. Puoi anche controllare il file ~ / .dmrc per il parametro Session cat ~/.dmrc
. Vedi sopra. Session = ubuntu significa che stai usando compiz e unità insieme (e questo è il valore predefinito.
xsessions/ubuntu.desktop
in un altro file e speravo di finire con lo stesso comportamento, ma senza successo (maggiori dettagli in questa domanda ). C'è qualcosa di speciale nella ubuntu.desktop
xsession predefinita ?