답변:
이벤트 체인은 다음과 같습니다.
커널은 프로세스 번호 1로 init 프로세스를 시작합니다. 이것은 Ubuntu 12.04의 시작입니다.
시작 작업은 /etc/init/
맨 페이지 : man init
로그 : 커널 로그 ( dmesg
;에 복사 됨 /var/log/syslog
), /var/log/upstart/jobname.log
시작된 작업에 의해 결정된 기타 로그.
출처: /etc/init/lightdm.conf
시작 작업이 실행 /usr/sbin/lightdm
됩니다. 아마도 systemd
시간이 지남 에 따라 서비스 단위 로 변환 될 것으로 예상 할 수 있습니다 .
매뉴얼 페이지 : man lightdm
, 또한 : Ubuntu Wiki : LightDM
로그 :
/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
출처 : man lightdm and/var/log/lightdm/lightdm.log
lightdm은 init 프로세스에서 상당히 늦게 시작되었습니다. 예를 들어, 시스템 dbus가 이미 시작되어 있어야하고 파일 시스템이 준비되어 있어야하며 그래픽 디스플레이 시스템이 준비되어 있어야합니다.
lightdm은 xauthority 파일을 만든 다음 X를 시작하여 VT 7에서 시작하여 Alt+ Ctrl+ 를 누르면 나타나는 가상 터미널 F7입니다. X가 시작되면 Plymouth 스플래시 화면 프로그램이 종료되도록 lightdm 신호가 발생합니다. 이것은 모든 tty (1-6)가 시작된 후에 발생해야합니다.
2013 년 7 월 이후로 Mir 지원 항목이 lightdm에 추가되었지만 기본적으로 14.04부터 데스크탑 시스템에 사용되지 않습니다.
X는 가능한 최신 드라이버를 사용하려고합니다. 자체 드라이버가에서로드됩니다 /usr/lib/xorg/modules/
. 많은 장치에 대해 커널 드라이버와 xorg 드라이버가 모두 있으며 xorg 드라이버는 거의 확실하게 커널 드라이버를 사용합니다. dri 및 glx는 특히 고급 고성능 그래픽에 중요한 기능입니다. X에 대한 로그는에 저장됩니다 /var/log/Xorg.0.log
.
이 "좌석"에 대해 시스템 dbus를 통해 통신하고 가능한 사용자 이름을 얻습니다. lightdm은 X를 사용하여 화면을 그립니다. 통일 인사는 과정을 돕기 위해 사용됩니다.
다양한 사용자 ID를 선택하면 해당 사용자 ID의 backgound 이미지가 사용됩니다.
lightdm get은 잠재적 인 창 관리자 / 시스템의 이름입니다 /usr/share/xsessions/*.desktop
.
계정 정보는 dbus를 통해 accountsservice 계정 데몬을 통해 획득됩니다.
lightdm 및 greeter는 PAM을 사용하여 사용자를 인증합니다. 인증되면 PAM은 --login 옵션을 사용하여 gnome-keyring-daemon 데몬을 시작하고 사용자 암호를 제공하여 사용자의 로그인 키 링이있는 경우이를 잠금 해제 할 수 있습니다. 자세한 내용은 https://live.gnome.org/GnomeKeyring/Pam 및 man 8 pam_unix를 참조하십시오. PAM은 로그 정보를 저장 /var/log/auth.log
하고 /etc/pam.conf
(거의 비어 있음) 및로 제어합니다 /etc/pam.d/*
. 특히, 참조 /etc/pam.d/lightdm
및 /etc/pam.d/lightdm-autologin
.
사용자가 인증되면 권한이 삭제되고 ~user/.dmrc
세션 을 설명 하는 파일이 작성됩니다 . 예를 들면 다음과 같습니다.
[Desktop]
Session=ubuntu
또는
[Desktop]
Session=awesome
.desktop
에서 파일 /usr/share/xsessions/*.desktop
지금은 시작 순서의 나머지 부분을 결정합니다.
예를 들어 다음은 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
/usr/sbin/lightdm-session
쉘 스크립트는 인수 g으로 실행 nome-session --session=ubuntu
(원문 .- '우분투'가 아니라 '단결')
로그 :?
오류 로그 : ~/.xsession-errors
시작된 프로세스 로그 : ~/.cache/upstart/*
소스 :/usr/sbin/lightdm-session
/usr/sbin/lightdm-session
그런 다음 다음 단계를 수행하십시오.
실행 :
/etc/profile, $HOME/.profile
/etc/xprofile $HOME/.xprofile
; /etc/X11/Xresources
와 $HOME/.Xresources
존재하는 경우의 내용 사용 setxbmap와 키보드지도로드
/etc/X11/Xkbmap
와 $HOME/.Xkbmap
; /etc/X11/Xmodmap
및$HOME/.Xmodmap
/etc/X11/xinit/xinitrc.d
; /etc/X11/Xsession.d/*
의 옵션을 사용하여 에서 Xsession 스크립트를 실행합니다 /etc/X11/Xsession.options
.
이 중 하나는 ssh-agent (중복)를 시작하고 다른 하나는을 실행 $HOME/.xsessionrc
합니다. 다른 하나는 session-dbus를 시작합니다 (위 Xsession.options
파일 에서 허용 된 ssh-agent 및 session-dbus ). 이 세션 dbus는이 단일 사용자 세션과 관련된 프로세스 간 통신에 유용합니다.
ssh-agent는 세션 중 일정 시간 동안 ssh-add 된 경우 세션의 ssh 키를 보유 할 수 있지만 gnome-keyring-daemon은 동일한 기능을 수행합니다.
/etc/X11/Xsession.d/50_check_unity_support
소프트웨어가 데스크탑을 렌더링하는 데 사용 되도록 환경으로 /usr/lib/nux/unity_support_test
내 보내지 LIBGL_ALWAYS_SOFTWARE=1
않고 실행됩니다 llvmpipe
.
Ubunu 13.10부터 :
/etc/X11/Xsession.d/00upstart
variable UPSTART
을로 설정합니다 1
.
/etc/X11/Xsession.d/99upstart
변수를 확인하고 설정된 경우로 설정된 init --user
다른 항목을 대체 합니다 $STARTUP
. 따라서 사용자 모드 upstart는에서 시작 작업을 시작합니다 /usr/share/upstart/sessions
. 그중 하나는 gnome-session.conf
그놈 세션을 시작 하는 것입니다 .
이미 완료되지 않은 경우, 마지막으로 lightdm-session은 창 관리자를 시작하거나 위와 같이 gnome-session 세션 관리자를 시작합니다.
lightdm-session은 xsession의 전통적인 역할을 담당하는 것으로 보입니다. 해당 매뉴얼 페이지는 http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html에 있습니다. lightdm은 세션 래퍼로 간주합니다.
맨 페이지 : http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
로그 :?
출처 : 맨 페이지
gnome-session은 Unity에 사용되지만 기본적으로 훌륭하지는 않습니다. 위의 .desktop 파일을 참조하십시오.
gnome-session은 / usr / share / gnome-session / sessions /에서 지정된 프로그램을 시작하고 ~ / .config / autostart / 및 / etc / xdg / autostart에서 응용 프로그램을 시작합니다.
다음은 / 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
다른 /etc/xdg/autostart/gnome-keyring-ssh.desktop은 --start 옵션을 사용하여 gnome-keyring-daemon을 시작하여 해당 데몬 프로세스의 시작을 완료하고 잠재적 인 사용을 위해 환경에 중요한 정보를 저장합니다. ssh.
ps aux 목록에서 gnome-session이 dbus-launch와 함께 창 관리자를 시작하는 것으로 보입니다.
매뉴얼 페이지 : http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
로그 :?
소스 : 매뉴얼 페이지, 구성 파일 검사
lightdm-session에서 사용하는 / usr / share / xsessions /의 awesome.desktop 파일은 다음과 같습니다.
[Desktop Entry]
Encoding=UTF-8
Name=awesome
Comment=Highly configurable framework window manager
TryExec=awesome
Exec=awesome
보시다시피, 항목은 단순히 멋진 창 관리자가 실행되도록합니다. 멋진 패키지에서 /etc/xdg/awesome/rc.lua를 포함한 자체 구성 파일을 읽습니다. $ HOME / .config / awesome / rc.lua로 구성 할 수 있습니다.
소스 : 구성 파일 검사
다음은 / usr / share / xsessions /에있는 ubuntu.desktop 파일입니다.
[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
/usr/share/gnome-session/sessions/ubuntu.session에 설명 된 그놈 세션을 시작합니다.
그 파일은 다음과 같습니다.
[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
12.04의 gnome-session에 의해 실행되는 IsRunnableHelper 프로그램은 유니티를 실행할 수 있는지 또는 ubuntu-2d를 실행할 것인지를 결정합니다. 실수를해서 화합을 할 수 있다고 말하면 문제가있는 것입니다. 그런 경우 lightdm에서 수동으로 ubuntu-2d를 선택하십시오. 리턴 코드를 리턴하는 동안 -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
12.10 이상의 지원되지 않는 하드웨어의 경우 llvmpipe 소프트웨어를 사용하여 하드웨어가 할 수없는 것을 렌더링합니다. 구성 파일이 위의 것보다 간단합니다. 활성화 방법은 위를 참조하십시오.
위의 파일에서 gnome-session이 설정 데몬을 시작하고 창 관리자 및 모든 패널을 실행하기 위해 compiz를 시작해야 함을 알 수 있습니다.
매뉴얼 페이지 : http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
로그 :?
출처 : http://en.wikipedia.org/wiki/Compiz , 파일 시스템 검사
compiz가 시작되면 다양한 플러그인을 실행합니다. 12.10 이전에는 그놈 설정이 이들을 정의하는 데 사용됩니다. ccsm (compiz config 설정 관리자) 또는 gconf-editor를 사용하여 변경할 수 있습니다. 플러그인 설정은 active_plugins 아래의 apps / compiz-1 / general / screen0 / options에 저장됩니다. 중복으로 인해 compiz와 함께 segfaults가 발생했습니다. 이들은 위와 같이 구성된 ~ / .gconf / 디렉토리의 사용자 홈 디렉토리에 저장됩니다. 실제 값은 % gconf.xml 파일에 저장됩니다.
12.10부터이 플러그인은 ~ / .config / dconf / user 파일에 바이너리로 저장됩니다. 설정을 저장하는 dconf 또는 gsettings 방법이 더 최신입니다. 이 모든 설정을로 볼 수 있습니다 dconf dump /org/gnome/
.
Unityshell은 이러한 플러그인 중 하나입니다. nux 프로젝트를 임베디드 툴킷으로 사용합니다. 지정된 투명도 값으로 3 차원 공간에서 텍스처에 이미지가 그려집니다. 이들은 compiz에 의해 처리되어 llvm 또는 고급 그래픽 드라이버로 전송되어 시스템의 컴퓨터 그래픽 하드웨어에 그래픽 엔진이 구성되어 렌더링되도록합니다. 일반적으로 이는보다 전통적인 방식으로 이미지를 프레임 버퍼로 직접 렌더링하는 것과 반대입니다. 이 복잡한 이벤트 체인은보다 고급 드라이버를 필요로하며 때로는 우분투에서 독점 그래픽 드라이버를 사용하도록 요구합니다.
ps aux
있습니다. ~ / .dmrc 파일에서 Session 매개 변수를 확인할 수도 있습니다 cat ~/.dmrc
. 위 참조. 세션은 = 우분투는 함께 컴 피즈와 일치를 사용하는 의미 (그리고는 기본입니다.