¿Qué sucede debajo de las cubiertas para iniciar sesión y poner en marcha Unity u otra interfaz gráfica de usuario?

55

Cuando hay problemas, puede ser bueno entender lo que sucede debajo de las cubiertas para registrar a un usuario en una sesión de GUI y obtener un Unity (u otro administrador de ventanas) para abrir un escritorio.

John S Gruber
fuente

Respuestas:

86

Cómo se inicia una sesión GUI de usuario de escritorio con Ubuntu 12.04-14.04

Aquí está la cadena de eventos:

El kernel de Ubuntu Linux y el advenedizo

El kernel inicia el proceso de inicio como número de proceso 1. Esto es un arranque para Ubuntu 12.04.

Los trabajos advenedizos están en /etc/init/


Página del manual: man init

Registros: registro del kernel ( dmesg; copiado a /var/log/syslog) /var/log/upstart/jobname.log, otros registros determinados por trabajos iniciados.

Fuente: /etc/init/lightdm.conf


El trabajo inicial se ejecuta /usr/sbin/lightdm. Probablemente podamos esperar que esto se convierta en una systemdunidad de servicio con el tiempo.

Lightdm


Página del manual:, man lightdm también: Ubuntu Wiki: LightDM

Registros:

/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

Fuente: man lightdm y/var/log/lightdm/lightdm.log


lightdm get comenzó bastante tarde en el proceso de inicio; Por ejemplo, el sistema dbus debe estar ya iniciado, el sistema de archivos debe estar listo y el sistema de visualización de gráficos debe estar listo.

lightdm crea un archivo xauthority y luego inicia X, comenzándolo en VT 7, el terminal virtual que obtienes si presionas Alt+ Ctrl+ F7. Cuando se inicia X, lightdm indica que se cierre el programa de pantalla de presentación de Plymouth. Es esencial que esto suceda después de que todos los tty (1-6) hayan comenzado.

Desde julio de 2013, los elementos de soporte de Mir se han agregado a lightdm, pero no se utilizan de forma predeterminada para los sistemas de escritorio a partir de 14.04.

X intenta utilizar los controladores más avanzados posibles. Sus propios controladores se cargan desde /usr/lib/xorg/modules/. Tenga en cuenta que existen controladores de kernel y controladores xorg para muchos dispositivos, y los controladores xorg casi seguramente usan los del kernel. dri y glx son características importantes, en particular, para gráficos avanzados de alto rendimiento. Los registros se almacenan para X en /var/log/Xorg.0.log.

Hay comunicaciones a través del sistema dbus sobre este "asiento" y se adquieren posibles nombres de usuario. lightdm usa X para dibujar la pantalla. Unity-greeter se utiliza para ayudar en el proceso.

A medida que selecciona los diversos ID de usuario posibles, se utiliza la imagen de fondo de ese ID de usuario.

lightdm get son los nombres de posibles administradores / sistemas de ventanas de /usr/share/xsessions/*.desktop.

La información de la cuenta se adquiere a través del servicio de cuentas accounts-daemon a través de dbus.

lightdm y greeter usan PAM para autenticar al usuario. Una vez autenticado, PAM iniciará un demonio gnome-keyring-daemon con la opción --login y lo alimentará con la contraseña del usuario para que pueda desbloquear el llavero de inicio de sesión del usuario, si está presente. Consulte https://live.gnome.org/GnomeKeyring/Pam y man 8 pam_unix para obtener más información. PAM almacena información de registro /var/log/auth.logy está controlado por /etc/pam.conf(casi vacío) y /etc/pam.d/*. En particular, ver /etc/pam.d/lightdmy /etc/pam.d/lightdm-autologin.

Una vez que el usuario se autentica, se eliminan los privilegios y se escribe un archivo para ~user/.dmrcdescribir la sesión. Por ejemplo:

[Desktop]
Session=ubuntu

o

[Desktop]
Session=awesome

Los .desktoparchivos a partir de /usr/share/xsessions/*.desktopahora determinan el resto de la secuencia de inicio.

Por ejemplo, este es el de 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

El /usr/sbin/lightdm-sessionscript de shell se ejecuta con los argumentos g nome-session --session=ubuntu (sic .-- 'ubuntu', no 'unity')

sesión de lightdm


Registros:?
Registros de errores: registros de ~/.xsession-errors
procesos iniciados: ~/.cache/upstart/*
fuente:/usr/sbin/lightdm-session


/usr/sbin/lightdm-session luego toma estos pasos:

Carreras:

  • /etc/profile, $HOME/.profile
  • /etc/xprofile $HOME/.xprofile;
  • carga recursos de /etc/X11/Xresourcesy $HOME/.Xresources, si existen, carga el mapa del teclado con setxbmap usando el contenido de /etc/X11/Xkbmapy $HOME/.Xkbmap;
  • si no usa XKB usa xmodmap contra cualquier existente /etc/X11/Xmodmapy$HOME/.Xmodmap
  • ejecuta scripts en /etc/X11/xinit/xinitrc.d;
  • ejecuta los scripts de Xsession en /etc/X11/Xsession.d/*, usando las opciones en /etc/X11/Xsession.options.

    Uno de ellos inicia ssh-agent (redundante), otro se ejecuta $HOME/.xsessionrc. Otro inicia session-dbus (tanto ssh-agent como session-dbus según lo permitido en el Xsession.optionsarchivo anterior ). Esta sesión dbus es útil para las comunicaciones entre procesos con respecto a esta sesión de usuario único.

ssh-agent puede mantener las claves ssh para la sesión si se agregan ssh en algún momento durante la sesión, pero gnome-keyring-daemon hace lo mismo.

/etc/X11/Xsession.d/50_check_unity_supportse ejecuta /usr/lib/nux/unity_support_testy, si falla, las exportaciones LIBGL_ALWAYS_SOFTWARE=1al entorno llvmpipese utilizarán para renderizar el escritorio del software.

Comenzando con Ubunu 13.10: /etc/X11/Xsession.d/00upstartestablece la variable UPSTARTen 1. /etc/X11/Xsession.d/99upstartcomprueba esa variable y, si se establece, sustituye init --user a los otros elementos establecidos en $STARTUP. Por lo tanto, el modo de inicio en modo de usuario inicia esos trabajos de inicio /usr/share/upstart/sessions. Uno de esos es el gnome-session.confque inicia la sesión de gnome.

A menos que ya lo haya hecho, finalmente lightdm-session inicia un administrador de ventanas, o por unidad, lo anterior inicia el administrador de sesión de gnome-session.

Parece que lightdm-session toma el rol tradicional de xsession. Su página de manual está en http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . lightdm lo considera un envoltorio de sesión.

Administrador de sesión de sesión de gnome (Unity y Gnome Shells)


Página de manual: http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
Registros:?

Fuente: página man


gnome-session se usa para Unity, pero no es impresionante por defecto, por ejemplo. Consulte los archivos .desktop anteriores.

gnome-session inicia el programa especificado desde / usr / share / gnome-session / sessions / e inicia aplicaciones desde ~ / .config / autostart / y / etc / xdg / autostart.

Aquí hay un ejemplo de / 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

Otro, /etc/xdg/autostart/gnome-keyring-ssh.desktop, inicia gnome-keyring-daemon con la opción --start, completa el inicio de ese proceso de daemon y almacena información importante sobre él en el entorno para su uso potencial por ssh

De una lista de ps aux parece que gnome-session inicia gestores de ventanas con dbus-launch.

Administradores de ventanas

Awesome Window Manager


Página de manual : http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
Registros:?

Fuente: página del manual, examen del archivo de configuración


Aquí está el archivo awesome.desktop en / usr / share / xsessions / utilizado por lightdm-session:

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

Como puede ver, la entrada simplemente hace que se ejecute el impresionante administrador de ventanas. Lee sus propios archivos de configuración, incluidos /etc/xdg/awesome/rc.lua del increíble paquete. Se puede configurar con $ HOME / .config / awesome / rc.lua.

Unidad


Fuente: examen del archivo de configuración


Aquí está el archivo ubuntu.desktop en / 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

Esto inicia la sesión de gnome descrita en /usr/share/gnome-session/sessions/ubuntu.session

Aquí está ese archivo:

[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

El programa IsRunnableHelper ejecutado por gnome-session en 12.04 determina si se puede ejecutar la unidad o si se ejecutará ubuntu-2d. Si comete un error y dice que la unidad puede funcionar y no puede, hay problemas. Elija ubuntu-2d manualmente en lightdm si eso le sucede. Si bien devuelve un código de retorno, podemos ver qué está haciendo ejecutándolo con la opción -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

Para 12.10 y versiones posteriores, el hardware no compatible utiliza el software llvmpipe para representar lo que el hardware no puede. Su archivo de configuración es más simple que el anterior. Vea arriba para ver cómo está habilitado.

Podemos ver en los archivos anteriores que gnome-session debe iniciar el daemon de configuración y comenzar a compiz para ejecutar un administrador de ventanas y cualquier panel.

compiz


Página de manual : http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
Registros:?
Fuente: http://en.wikipedia.org/wiki/Compiz , examen del sistema de archivos


Una vez que se inicia compiz, ejecuta varios complementos. Antes de 12.10, los ajustes de gnomo se utilizan para definirlos. Se pueden cambiar con ccsm (compiz config settings manager) o con gconf-editor. La configuración del complemento se almacena en apps / compiz-1 / general / screen0 / options en active_plugins. Los duplicados me han provocado problemas con compiz. Estos se almacenan en el directorio de inicio del usuario en el directorio ~ / .gconf / organizado como se indicó anteriormente. Los valores reales se almacenan en archivos% gconf.xml allí.

Desde 12.10, estos complementos se almacenan en binario en su archivo ~ / .config / dconf / user. El método dconf o gsettings para almacenar configuraciones es más nuevo. Puede ver todas estas configuraciones con dconf dump /org/gnome/.

Unityshell es uno de estos complementos. Utiliza el proyecto nux como un kit de herramientas integrado. Las imágenes se dibujan en texturas en un espacio tridimensional con valores de transparencia especificados. Estos son procesados ​​por compiz y enviados a llvm o a controladores gráficos avanzados para tener los motores gráficos en el compuesto de hardware gráfico de la computadora del sistema y renderizarlos. En general, esto es opuesto a renderizar imágenes directamente en un framebuffer como se hacía más tradicionalmente. Esta complicada cadena de eventos es lo que requiere controladores más avanzados, y a veces provoca el uso de controladores gráficos propietarios en Ubuntu.

John S Gruber
fuente
¿Cómo puedo saber si mi sistema ejecuta Awesome, Unity o compiz?
James
@james Probablemente puedas buscar compiz o impresionante en la lista de procesos. Lo obtienes con un comando como ps aux. También puede verificar el archivo ~ / .dmrc para el parámetro Session cat ~/.dmrc. Véase más arriba. La Sesión = ubuntu significa que estás usando compiz y unity juntos (y eso es lo predeterminado.
John S Gruber
¡Respuesta excepcional, que permite comprender el proceso sin conocimientos previos! Siguiendo su descripción, intenté replicarlo xsessions/ubuntu.desktopen otro archivo y esperaba terminar con el mismo comportamiento, pero sin ningún éxito (más detalles en esta pregunta ). ¿Hay algo especial en la ubuntu.desktopxsession predeterminada ?
Anuncio N
De hecho, haría +10 si pudiera. Mejor que el documento ...
Anillo Ø
Gracias por escribir esto. ¿Puedes actualizar cómo cambiaron las cosas para las nuevas versiones de Ubuntu?
exic