문서 : 리눅스 세션의 아키텍처


20

최신 Linux 세션과 관련된 데몬 및 서비스 스택을 설명하는 좋은 개요 설명서를 찾고 있습니다. 에 대한 다양한 문서를 읽은 있지만 dbus, 그리고 systemd, 나는 아직도 큰 그림을하지 않습니다.

특히, 나는이 질문에 대한 답을 찾고 있습니다 (질문에 답하지 말고 내가 찾고있는 문서의 종류를 분명히해야합니다).

  • 로그인 후, 어떤 프로세스가 사용자 세션의 루트입니까?

  • 어떤 프로세스를 시작해야하며 그 이유는 무엇입니까? Gnome, KDE, FVWM 또는 간단한 쉘이 시작되었는지에 상관없이 데스크탑에 독립적 인 답변을 찾고 있습니다.

  • 이 모든 데몬은 어떤 역할을합니까? 그들 중 어떤 사람이 혼자서 달려 다른 사람에게 달려 있습니까? 누구, 왜, 얼마나 오래 시작해야합니까? 누가 그 동물원을 유지해야합니까?

내가 바로 부팅 후 실행 데몬의 전체 동물원을 발견하기 때문에 내가 부탁 해요 : systemd-journald, systemd-udevd, dbus-daemon, systemd-logind. 그러나 충분하지 : 이들은 그렇다, 초경량 PDF 뷰어를 실행하면 zathura 내 세션 웁니다 dbus-launch, dbus-daemon, at-spi2-registryd, 및 at-spi-bus-launcher, 후자의 발사 또 다른를 dbus-daemon. 그들 중 아무도 거기에 가본 적이 없으며 아무도 초대받지 않았지만 그들은 집 밖으로 머물면서 내가 로그 아웃 할 때까지 소름 끼치는 느낌을 줄 것입니다. 여기에 뭔가 빠진 것 같습니다 ...

또 다른 예 : 로그인 후 systemd사용자 UID 로 실행 중이지만 어떻게 해야하는지 전혀 모릅니다 (버전 206부터 세션 관리자로 사용 하지 않아야한다고 생각 합니까?). 자식 프로세스 (sd-pam)가 있는데 문서를 찾지 못했습니다.

그들은 무엇을합니까? 이 설정의 아이디어는 무엇입니까?

내 관점을 명확히하기 위해 :“오래된 날”에 login로그인 쉘 ( bash, 실행 ~/.profile)을 시작 한다는 것을 아는 것으로 충분했으며 , 그 시점부터 상황에 따라 시작 screen또는 시작에 따라 세션을 계속 구축 할 수있었습니다 startx.


4
모든 배포판이 자체 작업을 수행하므로이 질문에 대답 할 수 없습니다. 더 나쁜 것은 데스크톱 환경 KDE와 그놈은 X 윈도우 시스템이 시작된 후 발생하는 상황과 크게 다릅니다. 그러나 더 나쁜 것은 배포판이 작업 방식을 바꾸는 것입니다. 배포에 무관 한 답변을 원한다면 "리눅스 커널은 init를 시작하고 다른 모든 것은 init가 어떻게 구성되어 있는지에 달려있다"입니다. 이 답변은 광범위 할 정도로 얕지만 모든 깊은 답변에 대해 최소한 배포 버전으로 질문을 좁혀 야합니다.
Thorsten Staerk

1
질문을 나누십시오. 예를 들어, 더 많은 설명이 필요한 "루트 세션"프로세스로 gnome-session 및 startkde를 찾도록 지시 할 수 있습니다.
Thorsten Staerk

1
@ thorsten-staerk :“모든 배포판이 자체적으로 수행하기 때문에 대답 할 수 없습니다.”그래서 당신은 어떤 데몬이 달리고 있는지에 대한 가정을 할 수 없다고 말하는가? 나는 그것을 믿을 수 없다. 죄송하지만 질문을 분리해도 원하는 답변을 얻을 수 없습니다. 그러나 나는“데스크탑에 구애받지 않는”문구를 바꾸려고 노력할 것입니다. 저는 세션에서 예상되는 가장 낮은 공통 분모 또는 최소 실행 데몬 (및 각각에 대한 정당화)을 찾고 있습니다. 그들이 어떻게 상호 작용하고 어떻게이 세트가 다른 종류의 세션으로 바뀌는가 (SSH를 통해 터미널 세션에 dbusd가 있습니까?)
stefan

1
Linux는 LCD 디스플레이 만있는 장치에서 실행되고 있습니다. 또한 AppStore가없고 카메라가없는 휴대폰에서도 실행됩니다. 또한 삼성 갤럭시와 메인 프레임에서 실행됩니다. 몇 테라 바이트의 RAM을 사용할 수 있으며 몇 킬로바이트에 맞을 수 있습니다. 나는 리눅스 세션에서 가장 낮은 공통 분모가 리눅스라는 것을 두려워하며, 때때로 당신이 필요로하는 것을 선택하기에는 추악한 "선택의 자유"를 가지고있다. 데스크탑의 경우 최저 공통 분모를 나열하려고하지만 "모든 것"대신 dbus에 대한 질문을하는 것이 좋습니다.
Thorsten Staerk

답변:


8

나는 당신의 질문에 너무 매료되어 linuxintro에서 대답했습니다 . 귀하의 질문에 맞는 답변은 다음과 같습니다.

Fedora, SUSE 또는 Ubuntu와 같은 Linux를 사용하는 일반적인 PC를 부팅 할 때 단계는 다음과 같습니다.

  1. BIOS는 자체 검사를 실행합니다
  2. BIOS가 부팅 섹터를로드하고 실행합니다
  3. grub 또는 lilo와 같은 부트 로더가 실행됩니다
  4. 부팅 메뉴가 표시됩니다 (선택 사항)
  5. 커널이로드되었습니다
  6. 초기 RAM 디스크가로드되었습니다
  7. 커널이 실행됩니다
  8. 커널은 init를 실행
  9. 배포, 버전 및 구성에 따라 init이 실행됩니다.

    • SysV 초기화 스크립트 또는
    • 체계화 또는
    • 건방진 녀석

이 모든 프로그램의 의미는 다음과 같은 서비스를 시작하는 것입니다

  • 한 응용 프로그램이 다른 실행중인 응용 프로그램의 함수를 호출 할 수 있도록 응용 프로그램 간 통신을 허용하는 dbus . 이것은 일반적으로 사용자에게 보이지 않는 것입니다. 예를 들어, 자신의 창을 포커스하기 위해 창 관리자를 호출하는 응용 프로그램
  • 사용자가 CTRL_ALT_F * 터미널에 로그인 할 수있는 로그인 . ps -A에 표시된 로그인 프로세스는 systemd-logind 인 경우 (배포에 따라 다를 수 있음)
  • 많은 이름을 가진 udev , 예를 들어 나를 위해 ps -A를 systemd-udevd로 찾습니다. 예를 들어 USB 디스크와 같이 연결하는 장치에 / dev /의 장치 핸들을 할당합니다.
  • cron 은 / etc / crontab의 시간표를 기반으로 명령을 실행하며 부팅시 명령을 시작하는 "@reboot"기능도 가지고 있습니다.

10) systemd가 처리하는 로그인 프로세스는 가상 터미널에서 로그인을 기다립니다. 일반적으로 CTRL_ALT_F1을 누르면 도달 할 수 있습니다.

11) 일반적으로 기본적으로 init 프로세스는 디스플레이 관리자를 시작합니다 (예 : kdm (KDE 디스플레이 관리자) 또는 xdm).

12) 디스플레이 관리자가 그래픽 시스템을 시작합니다. Xorg 이외의 그래픽 시스템은 거의 없습니다 (임의의 경우 임베디드 장치 용).

13) 디스플레이 관리자가 Xorg 서버에 로그인 화면을 표시하도록 조언합니다


이제 시작이 완료되고 컴퓨터는 사용자가 로그인하기를 기다립니다.


14) 디스플레이 관리자의 사용자 로그인시 KDE, GNOME 또는 XFCE4와 같은 데스크탑 환경이 시작됩니다. 사용자의 KDE 세션에 대한 루트 프로세스는 startkde, 그놈에 대한 루트 프로세스는 gnome-session, XFCE4에 대한 루트 프로세스는 xfce4-session입니다.

15) KDE는 일반적으로 ~ / .kde / Autostart에서 모든 실행 파일을 시작하고 / etc / xdg / autostart에서 .desktop 파일을 시작합니다 ( 예약 작업 참조 ).

16) 사용자가 그래픽으로 로그인하고 아이콘을 클릭하여 콘솔을 열면 일반적으로 bash가 실행됩니다. Bash는 먼저 .bashrc를 실행합니다.

17) 사용자가 로그인 쉘을 열면 암호 또는 인증 된 키를 통해 로그인해야합니다. 그는 CTRL_ALT_F1 콘솔에서 또는 로컬 호스트와 같은 컴퓨터에 ssh'ing하여이를 수행 할 수 있습니다. 그런 다음 /etc/profile.d 및 .bashrc의 .sh 스크립트가 실행됩니다.


1
이것은 리눅스 시스템을 시작하는 단계에 대한 좋은 일반적인 개요입니다. 특정 소프트웨어 (예 : grub, lilo, u-boot)는 변경되지만 기능은 동일합니다. init 프로세스에 가장 관심이 있다고 생각하므로 8 단계와 9 단계에 집중하십시오. sysvinit (/ etc / inittab)는 systemd OR upstart를 위해 거의 사용되지 않습니다. 이 두 가지 모두 sysvinit 서비스를 실행 / 모니터링 할 수 있습니다.
12

창을보기 위해 d-bus를 통한 앱 호출이 없습니다. -
로버트 Siemer

0

대답은 42입니다. Thorsten Staerk은 이미 주석에서 주요 문제를 설명했습니다.

큰 그림을 얻으려면 수백만의 자원 봉사자와 회사가 Linux 및 Open Source 소프트웨어를 작성하고 유지 관리해야합니다. 따라서 성장을 따라 가기가 쉽지 않습니다.

반면, 모든 소프트웨어에 대한 맨 페이지, D-Bus에 대한 설명 , 개발자 메일 링리스트, Google 등 많은 문서가 있습니다. 몇 년의 시간이 걸리고 관심있는 모든 문서를 읽으십시오. 더 빨리 필요한 경우 Unix & Linux 에서 좋은 질문을하십시오 .

행운을 빕니다.


전기 털을 조작하는 방법에 대한 모든 것을 아는 것은 케이크가 어떻게 만들어 지는지에 대해 아무것도 말해주지 않습니다. “관심있는 모든 패키지 문서를 읽으십시오”– 이것은 다소 쓸모없는 답변입니다. 언급 한 문서는 이러한 일을 알려줍니다. 그러나 나는 그들이 무엇을 사용하는지 알고 싶습니다. “단지 좋은 질문 만하십시오”– 나의 질문은 간단하고 직선적입니다. 문서는 어디에 있습니까?
스테판

1
아마도 당신은 당신이 기대하는 답변을 얻는 방법을 배우는 것이 필요할 것입니다. 이 경우 나는 매우 유용한 질문에 당신을 가리 키도록하고 싶습니다 스마트 웨이 질문을하기위한 방법

0

내 대답의 버전을 제공하기 전에 몇 가지 정의로 시작하겠습니다.

Linux == '운영 체제 커널 "Linux 시스템 =="리눅스 시스템에서 실행되는 일부 종류의 시스템 "Linux 시스템에서 세션 =="리눅스 시스템에서 실행중인 일부 관련 사용자 프로그램 "

커널에서 멀어 질수록 두 "시스템"은 실제로 공통점이 거의 없습니다. "현대 리눅스 세션"에 대한 의미있는 정의가 실제로 없다는 의미입니다.

솔직히 모든 구성 요소를 제공하는 일종의 중요한 시스템 문서가 있어야한다는 기대는 오픈 소스 세계의 대부분에서 충족되지 않을 것으로 예상됩니다. 오픈 소스 개발자는 관심있는 특정 문제를 해결 (또는 해결)하는 프로그램을 작성하고 있으므로 해당 부분 만 문서화하면됩니다. :-)

상용 리눅스 배포판과 함께 제공되는 매뉴얼을 사용하면 더 좋은 행운을 얻을 수 있지만, 대부분의 보수적 인 특성을 고려하면 릴리스가 "현대"가 아니라고 주장 할 수 있습니다!

내가 줄 주요 조언은 유닉스 / 리눅스 시스템이 매우 일반적인 의미를 가지고 있다는 것입니다. 나는 사람들에게 내가 init로 시작할 수 있기 때문에 nix 시스템을 좋아한다고 말하고 거기에서 시스템에서 일어나는 모든 것을 이해했습니다. 체계화되고 친구들이 조금 바뀌었지만 기본 원리는 동일합니다. 상단에서 시작하여 아래로 내려갑니다. "세션을 구성하는 프로그램"은 일반적으로 당신이 가라치에 들어가는 시점에서 시작된 것들입니다. 따라서 ssh를 사용하면 ssh가 작동하는 방식이므로 기본 쉘이 무엇이든 얻을 수 있습니다. 그래픽 인터페이스를 통해 로그인하면 로그인 관리자가 시작하는 방식대로 로그인 관리자가 시작한 모든 것을 얻게됩니다.

다양한 데스크탑 프레임 워크는 다양한 사용자 또는 시스템 레벨 서비스 데몬을 실행하여이를 조금 더 어렵게합니다. 때로는이를 필요로하는 첫 번째 프로그램이 시작될 때 요청에 따라 시작될 수도 있습니다. 실행중인 프로그램의 경우이 동작을 중지하고 "베어"모드에서 응용 프로그램을 실행할 수있는 옵션이 있습니다.

불행히도 이것은 "개별 프로그램 문서를 읽는 것"이 ​​모든 것을 이해하는 유일한 방법이며 세션에 대한 "최소 데몬 세트"가 없다는 것을 의미합니다-주어진 배포판이 주어진 것에 대해 작동하는 방식이 있습니다 로그인 / 액세스 방법 및 배포, 데스크탑 및 로그인 방법에 따라 다릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.