Documentation: Arquitetura da Sessão Linux

20

Estou procurando uma boa documentação geral descrevendo a pilha de daemons e serviços envolvidos em uma sessão moderna do Linux. Apesar de ter lido documentação variada sobre dbus e systemd , Eu ainda não entendi o quadro geral.

Em particular, estou procurando respostas para essas perguntas (não responda perguntas, eles devem apenas esclarecer que tipo de documentação eu estou procurando para):

  • Após o login, qual processo é a raiz da sessão do usuário?

  • Quais processos devem ser iniciados e por quê? eu estou procurando uma Resposta independente de desktop, não importa se o Gnome, o KDE, o FVWM ou um simples o shell é iniciado.

  • Qual o papel de todos esses daemons? Qual deles iria correr sozinho, o que depende dos outros? Qual deles deve ser iniciado por quem, por que e por como longo? E quem deve manter esse zoológico?

Estou perguntando, porque descobri que tenho um zoológico de daemons funcionando bem após a inicialização: systemd-journald , systemd-udevd , dbus-daemon , %código%. Mas não o suficiente: Além destes, executando ultra-leve O visualizador de PDF systemd-logind mais preenche minha sessão com zathura , dbus-launch , dbus-daemon e at-spi2-registryd , o último lançando ainda outro at-spi-bus-launcher . Nenhum deles esteve lá antes, nenhum foi convidado, mas eles ficarão em casa, me dando um arrepiante sentindo, até eu sair. Tenho certeza que estou sentindo falta de algo aqui ...

Outro exemplo: após o login, tenho um dbus-daemon em execução com o UID dos meus usuários, mas eu não tenho idéia do que fazer (desde a versão 206 eu acho que sou não supostamente para usar isso como gerente de sessão, certo?). Tem um processo filho systemd , que eu não encontrou documentação sobre.

O que eles fazem? Qual é a ideia por trás dessa configuração?

Para esclarecer minha perspectiva: Nos "velhos tempos", bastava saber que (sd-pam) lançaria meu shell de login ( login , executando bash ) e A partir desse ponto, eu poderia continuar a criar uma sessão, dependendo das circunstâncias, talvez lançando ~/.profile ou screen .

    
por stefan 28.12.2013 / 00:20

3 respostas

8

Estou tão fascinado pela sua pergunta que eu respondi no linuxintro . Aqui está a resposta personalizada para sua pergunta:

Quando um PC típico com Linux como Fedora, SUSE ou Ubuntu inicializa, os passos são os seguintes:

  1. O BIOS executa a autoverificação
  2. o BIOS carrega o setor de inicialização e o executa
  3. Bootloader como grub ou lilo é executado
  4. Bootmenu é mostrado (opcional)
  5. O kernel é carregado
  6. O disco RAM inicial é carregado
  7. O kernel é executado
  8. O kernel executa o init
  9. o init é executado, dependendo da sua distribuição, versão e configuração

    • SysV scripts de inicialização ou
    • systemd ou
    • upstart

O sentido de todos esses programas é iniciar serviços como

  • dbus que permite a comunicação entre aplicativos para que um aplicativo possa chamar funções de outro aplicativo em execução. Isso é algo que geralmente não é visível para os usuários, por exemplo, um aplicativo chamando o gerenciador de janelas para colocar sua própria janela em foco
  • login que permite aos usuários efetuar login nos terminais CTRL_ALT_F *. O processo de login como visto por ps -A no caso de systemd ser systemd-logind (pode variar novamente por distribuição)
  • udev que tem muitos nomes, por exemplo para mim eu acho isso com ps -A como systemd-udevd. Atribui por exemplo o dispositivo manipula em / dev / para dispositivos que você conecta, por exemplo um disco USB
  • cron que executará comandos baseados em uma tabela de horários em / etc / crontab e também terá um recurso "@reboot" para iniciar comandos na inicialização.

10) o processo de login, manipulado pelo systemd irá aguardar um login em um terminal virtual, um é geralmente acessível pressionando CTRL_ALT_F1

11) normalmente e por padrão, o processo de inicialização iniciará o gerenciador de exibição, por exemplo, kdm (gerenciador de exibição do KDE) ou xdm

12) o gerenciador de exibição iniciará agora o sistema gráfico. Não há praticamente nenhum sistema gráfico, mas o Xorg (o hildon é para dispositivos embarcados).

13) o gerenciador de exibição irá aconselhar o servidor Xorg a exibir uma tela de login

Agora a inicialização está completa e o computador aguarda o login do usuário.

14) no login do usuário, o gerenciador de exibição iniciará um ambiente de área de trabalho como o KDE, o GNOME ou o XFCE4. O processo-raiz para a sessão do usuário no KDE será chamado de startkde, o processo-raiz para o GNOME será chamado de gnome-session, o processo-raiz para o XFCE4 será chamado xfce4-session

15) O KDE normalmente inicia todos os arquivos executáveis de ~ / .kde / Autostart e os arquivos .desktop de / etc / xdg / autostart (veja agendamento de tarefas ).

16) Quando o usuário tiver logado graficamente e clicar em um ícone para abrir um console, normalmente o bash será executado. Bash irá primeiro executar o .bashrc então

17) Quando o usuário abre um shell de log, isso significa que ele precisa fazer o login por senha ou por uma chave autorizada. Ele pode fazer isso no console CTRL_ALT_F1 ou ssh'ing em um computador, por exemplo, localhost. Então os scripts .sh de /etc/profile.d e .bashrc serão executados.

    
por 11.01.2014 / 20:52
0

A resposta é 42. Thorsten Staerk já explicou o problema principal nos comentários.

Para ajudá-lo a ter uma visão geral, você precisa saber que o Linux e o software Open Source são escritos e mantidos por milhões de voluntários e empresas. Então, não é fácil acompanhar o crescimento.

Por outro lado, há muita documentação: as man-pages de cada software, uma boa explicação do que D-Bus é, as listas de discussão dos desenvolvedores, Google e assim por diante. Portanto, reserve alguns anos e leia todos os documentos dos pacotes nos quais está interessado. Se precisar mais rápido, faça algumas perguntas no Unix & Linux .

Boa sorte.

    
por 05.01.2014 / 02:11
0

Antes de dar minha versão da resposta, deixe-me começar com algumas definições

Linux == 'Um kernel do sistema operacional " Sistema Linux == "Algum tipo de sistema construído em torno do kernel do Linux" Sessão em um sistema Linux == "Algum conjunto de programas de usuários relacionados rodando em um sistema linux"

Quanto mais você se afasta do kernel, menos provável que quaisquer dois "sistemas" realmente tenham algo em comum. O que significa que não há realmente nenhuma definição sensata de uma "Sessão Moderna Linux"

Francamente, a expectativa de que deveria haver algum tipo de documentação abrangente do sistema que forneça a você todos os componentes é uma expectativa que não será satisfeita na maioria das partes do mundo do código aberto. Desenvolvedores de código aberto estão escrevendo programas para resolver (ou re-resolver!) Os problemas específicos com os quais se importam - então eles apenas documentarão essa parte - se é assim! : -)

Você pode ter mais sorte com os manuais disponíveis nas distribuições comerciais do Linux, no entanto, dada a natureza conservadora da maioria deles, você pode argumentar que seus lançamentos não são "modernos"!

O principal conselho que eu daria é que um sentido muito geral sistemas unix / linux são heiráquicos. Eu costumava dizer às pessoas que eu gostava de sistemas nix porque eu podia começar com o init e, a partir daí, entender tudo o que estava acontecendo em um sistema. Systemd e amigos mudaram isso um pouco, mas o princípio básico é o mesmo - começar no topo e trabalhar para baixo - os "programas que compõem uma sessão" são geralmente aqueles que começaram no ponto em que você entra na heirachy. Então, se você estiver usando ssh, você provavelmente obterá qualquer que seja seu shell padrão, já que é assim que o ssh funciona. Se você efetuar login por meio de uma interface gráfica, obterá o que é iniciado por seu gerenciador de login, pois é assim que seu gerenciador de login funciona

Muitas das estruturas de desktop tornam isso um pouco mais difícil, executando vários daemons de serviço de nível de usuário ou de sistema - e algumas vezes, eles serão iniciados sob demanda por um quando o primeiro programa que precisa deles começar - observe a linha de comando opções dos programas que você está executando, há opções muito prováveis para parar esse comportamento e executar o aplicativo no modo "bare".

Infelizmente, isso significa que "ler a documentação de programas individuais" é a única maneira de entender tudo e que não há um "conjunto mínimo de daemons" para uma sessão - há apenas a maneira como uma determinada distribuição funciona para um determinado método de login / acesso, e essa distribuição, área de trabalho e método de login específico.

    
por 08.01.2014 / 08:39