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.
fuente
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.
Aquí está la cadena de eventos:
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 systemd
unidad de servicio con el tiempo.
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.log
y está controlado por /etc/pam.conf
(casi vacío) y /etc/pam.d/*
. En particular, ver /etc/pam.d/lightdm
y /etc/pam.d/lightdm-autologin
.
Una vez que el usuario se autentica, se eliminan los privilegios y se escribe un archivo para ~user/.dmrc
describir la sesión. Por ejemplo:
[Desktop]
Session=ubuntu
o
[Desktop]
Session=awesome
Los .desktop
archivos a partir de /usr/share/xsessions/*.desktop
ahora 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-session
script de shell se ejecuta con los argumentos g nome-session --session=ubuntu
(sic .-- 'ubuntu', no 'unity')
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
; /etc/X11/Xresources
y $HOME/.Xresources
, si existen, carga el mapa del teclado con setxbmap usando el contenido de
/etc/X11/Xkbmap
y $HOME/.Xkbmap
; /etc/X11/Xmodmap
y$HOME/.Xmodmap
/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.options
archivo 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_support
se ejecuta /usr/lib/nux/unity_support_test
y, si falla, las exportaciones LIBGL_ALWAYS_SOFTWARE=1
al entorno llvmpipe
se utilizarán para renderizar el escritorio del software.
Comenzando con Ubunu 13.10:
/etc/X11/Xsession.d/00upstart
establece la variable UPSTART
en 1
.
/etc/X11/Xsession.d/99upstart
comprueba 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.conf
que 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.
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.
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.
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.
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.
ps aux
. También puede verificar el archivo ~ / .dmrc para el parámetro Sessioncat ~/.dmrc
. Véase más arriba. La Sesión = ubuntu significa que estás usando compiz y unity juntos (y eso es lo predeterminado.xsessions/ubuntu.desktop
en otro archivo y esperaba terminar con el mismo comportamiento, pero sin ningún éxito (más detalles en esta pregunta ). ¿Hay algo especial en laubuntu.desktop
xsession predeterminada ?