표지 아래에서 Unity에 로그인하고 다른 그래픽 사용자 인터페이스를 시작하려면 어떻게됩니까?


55

문제가 발생하면 커버 아래에서 사용자가 GUI 세션에 로그인하고 Unity (또는 다른 창 관리자)가 데스크탑을 불러 오기 위해 발생하는 상황을 이해하는 것이 좋습니다.

답변:


86

데스크탑 사용자 GUI 세션이 Ubuntu 12.04-14.04로 시작하는 방법

이벤트 체인은 다음과 같습니다.

우분투 리눅스 커널과 시작

커널은 프로세스 번호 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시간이 지남 에 따라 서비스 단위 로 변환 될 것으로 예상 할 수 있습니다 .

Lightdm


매뉴얼 페이지 : 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 (원문 .- '우분투'가 아니라 '단결')

lightdm-session


로그 :?
오류 로그 : ~/.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;
  • XKB를 사용하지 않는 경우 기존 /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/00upstartvariable 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를 시작해야 함을 알 수 있습니다.

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 또는 고급 그래픽 드라이버로 전송되어 시스템의 컴퓨터 그래픽 하드웨어에 그래픽 엔진이 구성되어 렌더링되도록합니다. 일반적으로 이는보다 전통적인 방식으로 이미지를 프레임 버퍼로 직접 렌더링하는 것과 반대입니다. 이 복잡한 이벤트 체인은보다 고급 드라이버를 필요로하며 때로는 우분투에서 독점 그래픽 드라이버를 사용하도록 요구합니다.


내 시스템이 Awesome, Unity 또는 compiz를 실행 중인지 어떻게 알 수 있습니까?
James

@james 프로세스 목록에서 compiz 또는 awesome을 확인할 수 있습니다. 와 같은 명령으로 얻을 수 ps aux있습니다. ~ / .dmrc 파일에서 Session 매개 변수를 확인할 수도 있습니다 cat ~/.dmrc. 위 참조. 세션은 = 우분투는 함께 컴 피즈와 일치를 사용하는 의미 (그리고는 기본입니다.
존 S 그루버

사전 지식없이 프로세스를 잘 파악할 수있는 탁월한 답변! 귀하의 설명에 따라 xsessions/ubuntu.desktop다른 파일에 in 을 복제하려고 시도했지만 동일한 동작으로 끝나지 않았지만 성공하지 못했습니다 ( 이 질문에 대한 자세한 내용 ). 기본 ubuntu.desktopxsession에 특별한 것이 있습니까?
Ad N

실제로, 내가 할 수 있다면 +10 할 것입니다. 의사보다 낫다
반지 Ø

적어 주셔서 감사합니다. 최신 Ubuntu 버전에서 변경된 사항을 업데이트 할 수 있습니까?
exic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.