Como uma sessão de GUI de usuário de desktop é iniciada com o Ubuntu 12.04-14.04
Aqui está a cadeia de eventos:
O kernel do Ubuntu Linux e o upstart
O kernel inicia o processo de inicialização como processo número 1. Isso é novidade para o Ubuntu 12.04.
As tarefas de inicialização 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 por jobs iniciados.
Origem: /etc/init/lightdm.conf
O job upstart executa /usr/sbin/lightdm
. Provavelmente, podemos esperar que isso seja convertido em uma unidade de serviço systemd
ao longo do tempo.
Lightdm
Página do manual: man lightdm
, Também: Wiki do Ubuntu: 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: homem lightdm e /var/log/lightdm/lightdm.log
O lightdm get começou bem tarde no processo init; Por exemplo, o sistema dbus deve ser iniciado, o sistema de arquivos deve estar pronto e o sistema de exibição de gráficos deve estar pronto.
lightdm cria um arquivo xauthority e então inicia o X, iniciando-o no VT 7, o terminal virtual que você obtém se pressionar Alt + Ctrl + F7 . Quando X é iniciado, os sinais lightdm para o programa da tela inicial de Plymouth são encerrados. É essencial que isso aconteça depois que todos os ttys (1-6) tiverem começado.
Desde julho de 2013, os itens de suporte do Mir foram adicionados ao lightdm, mas esses não são usados por padrão nos 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 de /usr/lib/xorg/modules/
. Note que existem drivers de kernel e drivers xorg para muitos dispositivos, com os drivers xorg quase certamente usando os drivers do kernel. O dri e o glx são características importantes, em particular, para gráficos avançados de alto desempenho. Os logs são armazenados para X em /var/log/Xorg.0.log
.
Existem comunicações através do sistema dbus sobre este "assento" e possíveis nomes de usuário são adquiridos. lightdm usa X para desenhar a tela. unidade-greeter é usado para ajudar no processo.
Quando você seleciona os vários IDs possíveis, essa imagem de fundo do usuário é usada.
lightdm obtém os nomes dos possíveis gerenciadores de janelas / sistemas de /usr/share/xsessions/*.desktop
.
A informação da conta é adquirida através do daemon accountservice accounts sobre o dbus.
lightdm e o greeter usam o PAM para autenticar o usuário. Uma vez autenticado, o PAM iniciará um daemon do gnome-keyring-daemon com o
- opção de login e alimentá-lo com a senha do usuário para que ele possa desbloquear o chaveiro de login do usuário, se presente. Consulte o link e o man 8 pam_unix para mais informações. O PAM armazena informações de registro em /var/log/auth.log
e é controlado por /etc/pam.conf
(quase vazio) e /etc/pam.d/*
. Em particular, consulte /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 em ~user/.dmrc
, descrevendo a sessão. Por exemplo:
[Desktop]
Session=ubuntu
ou
[Desktop]
Session=awesome
Os arquivos .desktop
de /usr/share/xsessions/*.desktop
agora determinam o restante da seqüência de inicialização.
Por exemplo, aqui está o da 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 script de shell /usr/sbin/lightdm-session
é executado com os argumentos g nome-session --session=ubuntu
(sic .-- 'ubuntu', não 'unidade')
sessão lightdm
Registros:?
Registros de Erros: ~/.xsession-errors
Logs de processo iniciados: ~/.cache/upstart/*
Origem: /usr/sbin/lightdm-session
/usr/sbin/lightdm-session
, em seguida, segue estes passos:
Execuções:
-
/etc/profile, $HOME/.profile
- %código%;
- carrega recursos de
/etc/xprofile $HOME/.xprofile
e/etc/X11/Xresources
, se eles existirem, carrega o mapa do teclado com o setxbmap usando o conteúdo de$HOME/.Xresources
e/etc/X11/Xkbmap
; - se não estiver usando o XKB, o xmodmap será usado em relação a qualquer
$HOME/.Xkbmap
e/etc/X11/Xmodmap
- executa scripts em
$HOME/.Xmodmap
; -
executa os scripts Xsession em
/etc/X11/xinit/xinitrc.d
, usando as opções em/etc/X11/Xsession.d/*
.Um desses inicia o agente ssh (redundante), outro executa
/etc/X11/Xsession.options
. Outro inicia sessão-dbus (tanto ssh-agent quanto session-dbus, conforme permitido no arquivo$HOME/.xsessionrc
acima). Esta sessão dbus é útil para comunicações entre processos relativos a esta sessão de usuário único.
O ssh-agent pode conter chaves ssh para a sessão se elas forem adicionadas por ssh durante algum tempo da sessão, mas o gnome-keyring-daemon faz a mesma coisa.
Xsession.options
runs /etc/X11/Xsession.d/50_check_unity_support
e se falhar as exportações /usr/lib/nux/unity_support_test
para o ambiente, de forma que LIBGL_ALWAYS_SOFTWARE=1
seja usado para renderizar o software na área de trabalho.
Começando com o Ubunu 13.10:
llvmpipe
define a variável /etc/X11/Xsession.d/00upstart
para UPSTART
.
1
verifica essa variável e, se definido, substitui /etc/X11/Xsession.d/99upstart
para os outros itens definidos como init --user
. Assim, o upstart do modo de usuário inicia essas tarefas de inicialização em $STARTUP
. Uma delas é /usr/share/upstart/sessions
, que inicia a sessão do gnome.
A menos que já tenha feito, finalmente a sessão lightdm inicia um gerenciador de janelas, ou por unidade, o acima inicia o gerenciador de sessões gnome-session.
Parece que a sessão lightdm assume o papel tradicional de xsession. Sua página man está no link . lightdm considera que seja um wrapper de sessão.
gerenciador de sessão gnome-session (Unity e Gnome Shells)
Manpage: link
Registros:?
Fonte: man page
gnome-session é usado para Unity, mas não para 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 os aplicativos de ~ / .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 daemon-gnome-keyring com a opção --start, completando 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 janela com o dbus-launch.
Gerentes de janela
Gerenciador impressionante de janelas
Página man: link
Registros:?
Fonte: página man, exame do arquivo de configuração
Aqui está o arquivo awesome.desktop em / usr / share / xsessions / usado por 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 gerenciador de janelas impressionantes seja executado. Ele lê seus próprios arquivos de configuração, incluindo /etc/xdg/awesome/rc.lua do pacote incrível. Pode ser configurado com $ HOME / .config / awesome / rc.lua.
Unidade
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
Isto inicia a sessão 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 em 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 ele 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 o 12.10 e posterior, hardware não suportado usa o software llvmpipe para processar o que o hardware não pode. Seu arquivo de configuração é mais simples que o acima. Veja acima como está ativado.
Podemos ver nos arquivos acima que o gnome-session deve iniciar o daemon de configurações e iniciar o compiz para executar um gerenciador de janelas e painéis.
compiz
Página man: link
Registros:?
Fonte: link , exame do sistema de arquivos
Depois que o compiz é iniciado, ele executa vários plugins. Antes de 12.10 gnome-settings são usados para defini-los. Eles podem ser alterados com o ccsm (gerenciador de configurações de configuração do compiz) ou com o gconf-editor. As configurações do plugin são armazenadas em apps / compiz-1 / general / screen0 / options em active_plugins. Duplicatas me fizeram ter segfaults com compiz. Estes são armazenados no diretório home do usuário no diretório ~ / .gconf / organizado como acima. Os valores reais são armazenados nos arquivos% gconf.xml.
Desde 12.10 estes 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 gnome-session.conf
.
Unityshell é um desses plugins. Ele usa o projeto nux como um kit de ferramentas embutido. Imagens são desenhadas em texturas no espaço tridimensional com valores de transparência especificados. Eles são processados pelo compiz e enviados para o llvm ou para os drivers gráficos avançados para que os mecanismos gráficos do hardware gráfico do computador compor e renderizá-los. Geralmente, isso é o oposto de renderizar imagens diretamente para um framebuffer como foi feito de forma 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.