Cosa succede sotto le copertine per accedere e avviare Unity o un'altra interfaccia utente grafica?


55

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:


86

Come inizia una sessione della GUI di un utente desktop con Ubuntu 12.04-14.04

Ecco la catena di eventi:

Il kernel di Ubuntu Linux e l'avvio

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 systemdun'unità di servizio nel tempo.

lightdm


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.loged è controllato da /etc/pam.conf(quasi vuoto) e /etc/pam.d/*. In particolare, vedi /etc/pam.d/lightdme /etc/pam.d/lightdm-autologin.

Una volta che l'utente è autenticato, i privilegi vengono eliminati e viene scritto un file per ~user/.dmrcdescrivere la sessione. Per esempio:

[Desktop]
Session=ubuntu

o

[Desktop]
Session=awesome

I .desktopfile da /usr/share/xsessions/*.desktopora 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-sessionscript della shell viene eseguito con gli argomenti g nome-session --session=ubuntu (sic .-- 'Ubuntu', non 'unità')

lightdm-session


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;
  • carica risorse da /etc/X11/Xresourcese $HOME/.Xresources, se esistono, carica la mappa della tastiera con setxbmap usando i contenuti di /etc/X11/Xkbmape $HOME/.Xkbmap;
  • se non si utilizza XKB utilizza xmodmap rispetto a qualsiasi esistente /etc/X11/Xmodmape$HOME/.Xmodmap
  • esegue gli script /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.optionsfile 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_supportviene eseguito /usr/lib/nux/unity_support_teste se fallisce l'esportazione LIBGL_ALWAYS_SOFTWARE=1nell'ambiente in modo che llvmpipeverrà utilizzato per il rendering del desktop del software.

A partire da Ubunu 13.10: /etc/X11/Xsession.d/00upstartimposta la variabile UPSTARTsu 1. /etc/X11/Xsession.d/99upstartcontrolla 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.confche 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.

gestore sessioni gnome-session (Unity e Gnome Shells)


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.

Gestori di finestre

Fantastico Window Manager


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.

Unità


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.

compiz


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.


Come posso sapere se il mio sistema esegue Awesome, Unity o Compiz?
James,

@james Probabilmente puoi verificare la presenza di compiz o fantastico nell'elenco dei processi. Lo ottieni con un comando come 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.
John S Gruber

Risposta eccezionale, che consente di ottenere una buona conoscenza del processo senza conoscenze preliminari! Seguendo la tua descrizione, ho provato a replicare xsessions/ubuntu.desktopin 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.desktopxsession predefinita ?
Annuncio N

Anzi, farei +10 se potessi. Meglio del doc ...
Anello Ø

Grazie per averlo scritto. Puoi aggiornarti su come sono cambiate le cose per le versioni più recenti di Ubuntu?
exic
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.