Quando houver problemas, pode ser bom entender o que acontece nos bastidores para conectar um usuário a uma sessão da GUI e obter um Unity (ou outro gerenciador de janelas) para abrir uma área de trabalho.
fonte
Quando houver problemas, pode ser bom entender o que acontece nos bastidores para conectar um usuário a uma sessão da GUI e obter um Unity (ou outro gerenciador de janelas) para abrir uma área de trabalho.
Aqui está a cadeia de eventos:
O kernel inicia o processo init como o número do processo 1. Isso é recente para o Ubuntu 12.04.
Trabalhos iniciados estão em /etc/init/
Página de manual: man init
Logs: log do kernel ( dmesg
; copiado para /var/log/syslog
) /var/log/upstart/jobname.log
, outros logs determinados pelos trabalhos iniciados.
Fonte: /etc/init/lightdm.conf
O trabalho inicial é executado /usr/sbin/lightdm
. Provavelmente, podemos esperar que isso seja convertido em uma systemd
unidade de serviço ao longo do tempo.
Página de manual:,man lightdm
Também: 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
Fonte: man lightdm e/var/log/lightdm/lightdm.log
o lightdm get começou bastante tarde no processo de inicialização; Por exemplo, o sistema dbus já deve estar iniciado, o sistema de arquivos deve estar pronto e o sistema de exibição gráfica deve estar pronto.
O lightdm cria um arquivo xauthority e inicia o X, iniciando-o no VT 7, o terminal virtual que você obtém se pressionar Alt+ Ctrl+ F7. Quando o X é iniciado, o lightdm sinaliza para que o programa da tela inicial de Plymouth seja encerrado. É essencial que isso aconteça após o início de todos os tty (1-6).
Desde julho de 2013, os itens de suporte Mir foram adicionados ao lightdm, mas esses não são usados por padrão para sistemas de desktop a partir de 14.04.
X tenta usar os drivers mais avançados possíveis. Seus próprios drivers são carregados /usr/lib/xorg/modules/
. Observe que existem drivers de kernel e drivers do xorg para muitos dispositivos, com os drivers do xorg quase certamente usando os do kernel. dri e glx são recursos importantes, em particular, para gráficos avançados de alto desempenho. Os logs são armazenados para o X in /var/log/Xorg.0.log
.
Há comunicação pelo dbus do sistema sobre esse "assento" e possíveis nomes de usuário são adquiridos. O lightdm usa X para desenhar a tela. O unity-greeter é usado para ajudar no processo.
Conforme você seleciona os vários possíveis IDs de usuário, a imagem de fundo desse ID de usuário é usada.
lightdm get é o nome de possíveis gerenciadores de janelas / sistemas /usr/share/xsessions/*.desktop
.
As informações da conta são adquiridas por meio do serviço de contas accounts daemon através do dbus.
lightdm e greeter usam o PAM para autenticar o usuário. Uma vez autenticado, o PAM iniciará um daemon gnome-keyring-daemon com a opção --login e alimentará a senha do usuário para que ele possa desbloquear o chaveiro de login do usuário, se presente. Veja https://live.gnome.org/GnomeKeyring/Pam e man 8 pam_unix para obter mais informações. O PAM armazena informações de logon /var/log/auth.log
e é controlado por /etc/pam.conf
(quase vazio) e /etc/pam.d/*
. Em particular, veja /etc/pam.d/lightdm
e /etc/pam.d/lightdm-autologin
.
Depois que o usuário é autenticado, os privilégios são eliminados e um arquivo é gravado para ~user/.dmrc
descrever a sessão. Por exemplo:
[Desktop]
Session=ubuntu
ou
[Desktop]
Session=awesome
Os .desktop
arquivos a partir de /usr/share/xsessions/*.desktop
agora determinam o restante da sequência de inicialização.
Por exemplo, aqui está o 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
O /usr/sbin/lightdm-session
script shell é executado com os argumentos g nome-session --session=ubuntu
(sic .-- 'ubuntu', não 'unity')
Logs:?
Logs de erro: Logs de ~/.xsession-errors
processo iniciados: ~/.cache/upstart/*
Origem:/usr/sbin/lightdm-session
/usr/sbin/lightdm-session
então segue estas etapas:
Corre:
/etc/profile, $HOME/.profile
/etc/xprofile $HOME/.xprofile
; /etc/X11/Xresources
e $HOME/.Xresources
, se existirem, carrega o mapa do teclado com setxbmap usando o conteúdo de
/etc/X11/Xkbmap
e $HOME/.Xkbmap
; /etc/X11/Xmodmap
e$HOME/.Xmodmap
/etc/X11/xinit/xinitrc.d
; executa os scripts Xsession em /etc/X11/Xsession.d/*
, usando as opções /etc/X11/Xsession.options
.
Um deles inicia o ssh-agent (redundante), outro é executado $HOME/.xsessionrc
. Outro inicia o session-dbus (ssh-agent e session-dbus conforme permitido no Xsession.options
arquivo acima ). Esta sessão dbus é útil para comunicações entre processos relacionados a esta sessão de usuário único.
O ssh-agent pode manter as teclas ssh para a sessão se elas forem adicionadas ssh algum tempo durante a sessão, mas o gnome-keyring-daemon faz a mesma coisa.
/etc/X11/Xsession.d/50_check_unity_support
é executado /usr/lib/nux/unity_support_test
e, se falhar, exporta LIBGL_ALWAYS_SOFTWARE=1
para o ambiente, para que llvmpipe
seja usado para renderizar o software na área de trabalho.
Começando com o Ubunu 13.10:
/etc/X11/Xsession.d/00upstart
define a variável UPSTART
para 1
.
/etc/X11/Xsession.d/99upstart
verifica essa variável e se set substitui init --user
os outros itens definidos como $STARTUP
. Assim, o iniciante no modo de usuário inicia esses trabalhos iniciados /usr/share/upstart/sessions
. Um deles é o gnome-session.conf
que inicia o gnome-session.
A menos que já tenha sido feito, finalmente o lightdm-session inicia um gerenciador de janelas ou, para a unidade, o item acima inicia o gerenciador de sessões do gnome-session.
Parece que o lightdm-session assume o papel tradicional de xsession. Sua página de manual está em http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . O lightdm considera um wrapper de sessão.
Página de manual: http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
Logs:?
Fonte: página de manual
O gnome-session é usado para o Unity, mas não por incrível, por padrão, por exemplo. Veja os arquivos .desktop acima.
O gnome-session inicia o programa especificado em / usr / share / gnome-session / sessions / e inicia aplicativos em ~ / .config / autostart / e / etc / xdg / autostart.
Aqui está um exemplo 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
Outro, /etc/xdg/autostart/gnome-keyring-ssh.desktop, inicia o gnome-keyring-daemon com a opção --start, concluindo o início desse processo daemon e armazenando informações importantes sobre ele no ambiente para uso potencial por ssh.
A partir de uma lista ps aux, parece que o gnome-session inicia os gerenciadores de janelas com o dbus-launch.
Página do manual : http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
Logs:?
Fonte: página de manual, exame do arquivo de configuração
Aqui está o arquivo awesome.desktop em / usr / share / xsessions / usado pelo lightdm-session:
[Desktop Entry]
Encoding=UTF-8
Name=awesome
Comment=Highly configurable framework window manager
TryExec=awesome
Exec=awesome
Como você pode ver, a entrada simplesmente faz com que o incrível gerenciador de janelas seja executado. Ele lê seus próprios arquivos de configuração, incluindo /etc/xdg/awesome/rc.lua do pacote awesome. Pode ser configurado com $ HOME / .config / awesome / rc.lua.
Fonte: exame do arquivo de configuração
Aqui está o arquivo ubuntu.desktop em / 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
Isso inicia a sessão do gnome descrita em /usr/share/gnome-session/sessions/ubuntu.session
Aqui está esse arquivo:
[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
O programa IsRunnableHelper executado pelo gnome-session no 12.04 determina se a unidade pode ser executada ou se o ubuntu-2d será executado. Se cometer um erro e disser que a unidade pode funcionar e não pode, há problemas. Escolha o ubuntu-2d manualmente no lightdm, se isso acontecer com você. Enquanto ele retorna um código de retorno, podemos ver o que está fazendo executando-o com a opção -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 a versão 12.10 e posterior, o hardware não suportado usa o software llvmpipe para renderizar o que o hardware não pode. Seu arquivo de configuração é mais simples que o acima. Veja acima como está habilitado.
Podemos ver nos arquivos acima que o gnome-session deve iniciar o daemon de configurações e iniciar o compiz com a finalidade de executar um gerenciador de janelas e quaisquer painéis.
Página do manual : http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
Logs:?
Fonte: http://en.wikipedia.org/wiki/Compiz , exame do sistema de arquivos
Uma vez iniciado, o compiz executa vários plugins. Antes das 12.10, o gnome-settings é usado para defini-las. Eles podem ser alterados com o ccsm (gerenciador de configurações do compiz) ou com o gconf-editor. As configurações do plug-in são armazenadas em apps / compiz-1 / general / screen0 / options em active_plugins. Duplicatas me fizeram ter segfaults com compiz. Eles são armazenados no diretório inicial do usuário, no diretório ~ / .gconf /, organizado como acima. Os valores reais são armazenados nos arquivos% gconf.xml lá.
Desde a 12.10, esses plugins são armazenados em binário no seu arquivo ~ / .config / dconf / user. O método dconf ou gsettings de armazenar configurações é mais recente. Você pode ver todas essas configurações com dconf dump /org/gnome/
.
O Unityshell é um desses plugins. Ele usa o projeto nux como um kit de ferramentas incorporado. As imagens são desenhadas em texturas no espaço tridimensional com valores de transparência especificados. Eles são processados pelo compiz e enviados ao llvm ou aos drivers gráficos avançados para que os mecanismos gráficos sejam compostos no hardware gráfico do computador do sistema e renderizá-los. Geralmente, isso é o contrário de renderizar imagens diretamente em um buffer de moldura, como era feito de maneira mais tradicional. Essa complicada cadeia de eventos é o que requer drivers mais avançados e, às vezes, solicita o uso de drivers gráficos proprietários no Ubuntu.
ps aux
. Você também pode verificar o arquivo ~ / .dmrc para o parâmetro Sessioncat ~/.dmrc
. Veja acima. A Sessão = ubuntu significa que você está usando o Compiz e unidade juntos (e esse é o padrão.xsessions/ubuntu.desktop
arquivo em outro arquivo e esperava terminar com o mesmo comportamento, mas sem sucesso (mais detalhes nesta pergunta ). Existe algo de especial naubuntu.desktop
xsession padrão ?