Documentation: Arquitetura da Sessão Linux

20

Estou procurando uma boa documentação de descrição geral descrevendo a pilha de daemons e serviços envolvidos em uma sessão moderna do Linux. Apesar de ter lido várias documentações sobre dbus, e systemd, ainda não entendi bem.

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

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

  • Quais processos devem ser iniciados e por quê? Estou procurando uma resposta independente da área de trabalho, independentemente de o Gnome, KDE, FVWM ou um simples shell ser iniciado.

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

Estou perguntando, porque eu descobri que tenho um zoológico inteiro de daemons em execução logo após a inicialização: systemd-journald, systemd-udevd, dbus-daemon, systemd-logind. Mas não o suficiente: além destes, Correr PDF-viewer ultra-leve zathura ainda preenche minha sessão com dbus-launch, dbus-daemon, at-spi2-registryd, e at-spi-bus-launcher, o último lançamento ainda outro dbus-daemon. Nenhum deles já esteve lá antes, nenhum foi convidado, mas eles ficarão em casa, me dando uma sensação assustadora, até que eu saia. Tenho certeza de que estou perdendo alguma coisa aqui ...

Outro exemplo: após o login, tenho uma systemdcorrida com o UID dos meus usuários, mas não tenho ideia do que deve fazer (desde a versão 206, acho que não devo usá-la como gerenciador de sessões, certo?). Ele tem um processo filho (sd-pam), sobre o qual não consegui encontrar documentação.

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

Para esclarecer minha perspectiva: “nos velhos tempos”, bastava saber que loginlançaria meu shell de login ( bashexecutando ~/.profile) e, a partir desse ponto, eu poderia continuar construindo uma sessão, dependendo das circunstâncias, talvez iniciando screenou startx.

Stefan
fonte
4
Esta pergunta não pode ser respondida porque cada distro faz suas próprias coisas. Pior ainda, os ambientes de área de trabalho que o KDE e o GNOME diferem bastante, o que acontece depois que o X Windowing System foi iniciado. Pior ainda, as distros mudam sua maneira de fazer isso - você menciona o systemd, que é relativamente novo. Agora, se você deseja uma resposta independente de distribuição, é "o kernel do Linux inicia o init e tudo depende de como o init está configurado". Essa resposta é tão superficial quanto ampla, enquanto que para cada resposta profunda você terá que restringir sua pergunta pelo menos às versões de distribuição.
precisa saber é o seguinte
11
por favor, divida sua pergunta. Por exemplo, eu poderia dizer para você procurar gnome-session e startkde como o processo "root session" que precisaria de mais explicações.
Thorsten Staerk
11
@ thorsten-staerk: “não pode ser respondido porque todas as distros fazem suas próprias coisas”. Então você está dizendo que eu não posso supor que deamons estão rodando? Eu realmente não posso acreditar nisso. Desculpe, mas dividir a pergunta não daria a resposta que estou procurando. Mas tentarei reformular “Desktop independente de desktop”: estou procurando o menor denominador comum, ou o conjunto mínimo de daemon em execução (e justificativa para cada um deles), esperado em uma sessão. Como eles interagem, e como este conjunto muda com diferentes tipos de sessão (há uma dbusd em uma sessão de terminal via SSH?)
Stefan
11
O Linux está sendo executado em dispositivos que não têm nada além de uma tela LCD. Também está sendo executado em telefones celulares que não possuem uma AppStore e nem uma câmera. Também está sendo executado em um Samsung Galaxy e em mainframes. Pode - fazendo sentido - usar vários Terabytes de RAM e pode caber em alguns kilobytes. Receio que o menor denominador comum de uma sessão do Linux seja o Linux e você tenha a "liberdade de escolha" que às vezes é feia para escolher o que mais você precisa. Para uma área de trabalho, tentarei listar os denominadores comuns mais baixos, mas é melhor você fazer perguntas sobre o dbus, em vez de "tudo".
Thorsten Staerk

Respostas:

8

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

Quando um PC típico com Linux como Fedora, SUSE ou Ubuntu for inicializado, as etapas serão as seguintes:

  1. BIOS executa auto-verificação
  2. O BIOS carrega o setor de inicialização e o executa
  3. O gerenciador de inicialização como grub ou lilo é executado
  4. O menu de inicialização é mostrado (opcional)
  5. O kernel está carregado
  6. O disco RAM inicial está carregado
  7. Kernel é executado
  8. O kernel executa init
  9. O init executa, dependendo da sua distribuição, versão e configuração

    • Scripts de inicialização do SysV ou
    • systemd ou
    • arrivista

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 geralmente não é visível aos usuários, por exemplo, um aplicativo que chama o gerenciador de janelas para colocar sua própria janela em foco
  • login que permite que os usuários efetuem login nos terminais CTRL_ALT_F *. O processo de login como visto pelo ps -A será, no caso de systemd, systemd-logind (pode variar novamente de acordo com a distribuição)
  • udev que tem muitos nomes, por exemplo, para mim eu acho isso com ps -A como systemd-udevd. Ele atribui, por exemplo, o dispositivo manipula em / dev / aos dispositivos que você conecta, por exemplo, um disco USB
  • cron que executará comandos com base em uma tabela de tempo em / etc / crontab, e também possui um recurso "@reboot" para iniciar comandos na inicialização.

10) o processo de logon, tratado pelo systemd, aguardará o logon em um terminal virtual; normalmente é possível acessar um pressionando CTRL_ALT_F1

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

12) o gerenciador de exibição iniciará o sistema gráfico. Praticamente não há sistema gráfico, exceto o Xorg (o hildon é para dispositivos embarcados).

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


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


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

15) Normalmente, o KDE inicia todos os arquivos executáveis ​​em ~ / .kde / Autostart e os arquivos .desktop em / etc / xdg / autostart (consulte agendando tarefas ).

16) Quando o usuário efetuar login graficamente e clicar em um ícone para abrir um console, normalmente o bash será executado. O Bash primeiro executará .bashrc e, em seguida,

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

Thorsten Staerk
fonte
11
Esta é uma visão geral boa e genérica das etapas para iniciar um sistema Linux. O software específico (por exemplo, grub, lilo, u-boot) muda, mas a função é a mesma. Eu suspeito que você esteja mais interessado no processo init, portanto, concentre-se nas etapas 8 e 9. O sysvinit (/ etc / inittab) é praticamente obsoleto em favor do systemd OR upstart. Ambos podem executar / monitorar serviços sysvinit.
dturvene
Nenhum aplicativo chama via d-bus para obter a janela em foco. -
Robert Siemer
0

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

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

Por outro lado, há muita documentação: as páginas de manual de cada software, uma boa explicação sobre o que é o D-Bus , as listas de discussão dos desenvolvedores, o Google e assim por diante. Portanto, reserve alguns anos e leia todos os documentos dos pacotes que lhe interessam. Se você precisar mais rapidamente, faça algumas boas perguntas no Unix e Linux .

Boa sorte.

Comunidade
fonte
Saber tudo sobre como operar um batedor elétrico não me diz nada sobre como o bolo é feito. “Leia todos os documentos de pacotes que lhe interessam” - essa é uma resposta bastante inútil. A documentação que você mencionou me disse o que essas coisas fazem. Mas eu quero saber para que eles são usados. “Basta fazer boas perguntas” - minha pergunta é simples e direta: onde está a documentação?
Stefan
11
Talvez você precise aprender a pedir a resposta esperada. Neste caso, eu gostaria de apontar-lhe um FAQ muito útil Como Fazer Perguntas de maneira esperta
0

Antes de fornecer 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 criado em torno do Kernel Linux "Sessão em um Sistema Linux ==" Algum conjunto de programas de usuário relacionados em execução em um sistema Linux "

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

Francamente, a expectativa de que exista algum tipo de documentação abrangente do sistema que ofereça todos os componentes é uma expectativa que não será atendida na maioria das partes do mundo de código aberto. Os desenvolvedores de código aberto estão escrevendo programas para resolver (ou resolver novamente!) Os problemas específicos com os quais se preocupam - para que eles apenas documentem essa parte - se isso! :-)

Você pode ter mais sorte com os manuais disponíveis nas distribuições comerciais de linux, porém, dada a natureza conservadora da maioria, você pode argumentar que os lançamentos não são "modernos"!

O conselho principal que eu daria é que os sistemas unix / linux de um senso muito geral são heiráquicos. Eu costumava dizer às pessoas que gostava de sistemas nix porque eu poderia começar com init e, a partir daí, entender tudo o que estava acontecendo em um sistema. Systemd e amigos mudaram um pouco isso, mas o princípio básico é o mesmo - comece de cima para baixo e trabalhe para baixo - os "programas que compõem uma sessão" geralmente são aqueles que começaram a partir do ponto em que você entra na herdeira. Portanto, se você usar o ssh, provavelmente obterá o shell padrão, pois é assim que o ssh funciona. Se você fizer login através de uma interface gráfica, obterá o que for iniciado pelo seu gerenciador de login, pois é assim que ele funciona.

Muitas estruturas de desktop tornam isso um pouco mais difícil, executando vários daemons de serviço no nível do usuário ou do sistema - e, às vezes, eles são iniciados sob demanda quando o primeiro programa que precisa deles - olha as opções de linha de comando do programas que você está executando, há opções bastante prováveis ​​para interromper esse comportamento e executar o aplicativo no modo "vazio".

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 - é apenas o modo como uma determinada distribuição funciona para uma determinada método de login / acesso e isso é específico da distribuição, da área de trabalho e do método de login.

tjb63
fonte