จะเกิดอะไรขึ้นภายใต้หน้าปกเพื่อเข้าสู่ระบบและเริ่มต้น Unity หรือส่วนต่อประสานกราฟิกกับผู้ใช้แบบอื่น


55

เมื่อมีปัญหาอาจเป็นการดีที่จะเข้าใจว่าเกิดอะไรขึ้นภายใต้หน้าปกเพื่อลงชื่อผู้ใช้เข้าสู่เซสชัน GUI และรับ Unity (หรือตัวจัดการหน้าต่างอื่น) เพื่อเปิดเดสก์ท็อป

คำตอบ:


86

วิธีที่เซสชัน GUI ผู้ใช้เดสก์ท็อปเริ่มต้นใช้งานกับ Ubuntu 12.04-14.04

นี่คือห่วงโซ่ของเหตุการณ์:

เคอร์เนล Ubuntu Linux และพุ่งพรวด

เคอร์เนลเริ่มต้นกระบวนการเริ่มต้นด้วยหมายเลขกระบวนการ 1 นี่คือการเริ่มต้นสำหรับ 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 ค่อนข้างล่าช้าในกระบวนการเริ่มต้น ตัวอย่างเช่นระบบ dbus จะต้องเริ่มต้นแล้วระบบไฟล์จะต้องพร้อมและระบบการแสดงผลกราฟิกจะต้องพร้อม

lightdm สร้างไฟล์ดิสเพลย์และจากนั้นก็เริ่ม X เริ่มต้นบน VT 7 terminal เสมือนคุณได้รับถ้าคุณกดAlt+ +Ctrl F7เมื่อ X เริ่มสัญญาณ lightdm สำหรับโปรแกรมหน้าจอเริ่มต้นของ Plymouth มันเป็นสิ่งสำคัญที่จะเกิดขึ้นหลังจาก tty's ทั้งหมด (1-6) เริ่มต้นแล้ว

ตั้งแต่กรกฎาคม 2013 รายการการสนับสนุน Mir ได้ถูกเพิ่มไปยัง lightdm แล้ว แต่รายการเหล่านั้นไม่ได้ถูกใช้เป็นค่าเริ่มต้นสำหรับระบบเดสก์ท็อปตั้งแต่วันที่ 14.04

X พยายามใช้ไดรเวอร์ขั้นสูงที่สุดเท่าที่จะทำได้ มันเป็นไดรเวอร์ที่โหลดมา/usr/lib/xorg/modules/เอง โปรดทราบว่ามีทั้งเคอร์เนลไดรเวอร์และไดร์เวอร์ xorg สำหรับอุปกรณ์จำนวนมากโดยที่ไดรเวอร์ xorg เกือบจะใช้เคอร์เนล dri และ glx เป็นคุณสมบัติที่สำคัญโดยเฉพาะอย่างยิ่งสำหรับกราฟิกประสิทธิภาพสูงขั้นสูง /var/log/Xorg.0.logบันทึกจะถูกเก็บไว้ใน X

มีการสื่อสารผ่านระบบ dbus เกี่ยวกับ "ที่นั่ง" และได้รับชื่อผู้ใช้ที่เป็นไปได้ lightdm ใช้ X เพื่อวาดหน้าจอ unity-greeter ใช้เพื่อช่วยในกระบวนการ

ในขณะที่คุณเลือกหมายเลขผู้ใช้ที่เป็นไปได้ต่าง ๆ ที่ใช้ภาพพื้นหลังของหมายเลขผู้ใช้

lightdm รับเป็นชื่อของหน้าต่างผู้จัดการศักยภาพ / /usr/share/xsessions/*.desktopระบบจาก

ข้อมูลบัญชีได้มาจาก accountsservice accounts-daemon บน dbus

lightdm และ greeter ใช้ PAM เพื่อพิสูจน์ตัวตนผู้ใช้ เมื่อผ่านการรับรองความถูกต้องแล้ว PAM จะเริ่ม gnome-keyring-daemon daemon ด้วยตัวเลือก --login และป้อนรหัสผ่านของผู้ใช้เพื่อให้สามารถปลดล็อคพวงกุญแจเข้าสู่ระบบของผู้ใช้ได้ถ้ามี ดูhttps://live.gnome.org/GnomeKeyring/Pam และมนุษย์ 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เชลล์สคริปต์จะดำเนินการกับข้อโต้แย้งกรัมnome-session --session=ubuntu (sic .-- 'อูบุนตู' ไม่ 'สามัคคี')

lightdm เซสชั่น


บันทึก:
บันทึกข้อผิดพลาด: บันทึก~/.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 ใช้ xmodmap กับที่มีอยู่/etc/X11/Xmodmapและ$HOME/.Xmodmap
  • เรียกใช้สคริปต์ใน/etc/X11/xinit/xinitrc.d;
  • รันสคริปต์ Xsession ในการใช้ตัวเลือกใน/etc/X11/Xsession.d/*/etc/X11/Xsession.options

    หนึ่งในการเริ่มต้นของเหล่าตัวแทน ssh (ซ้ำซ้อน) $HOME/.xsessionrcรันอีก อีกอันหนึ่งเริ่ม session-dbus (ทั้ง ssh-agent และ session-dbus ตามที่อนุญาตในXsession.optionsไฟล์ด้านบน) เซสชัน dbus นี้มีประโยชน์สำหรับการสื่อสารระหว่างกระบวนการที่เกี่ยวข้องกับเซสชันผู้ใช้คนเดียว

ssh-agent สามารถกดค้างไว้ที่คีย์ ssh สำหรับเซสชันหากพวกเขาเป็น ssh-add 'ed บางครั้งในระหว่างเซสชัน แต่ 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กำหนดตัวแปรเพื่อ UPSTART ตรวจสอบว่าตัวแปรและถ้าตั้งค่าทดแทน ให้กับรายการอื่น ๆ ที่กำหนดให้ ดังนั้นโหมดผู้ใช้พุ่งพรวดเริ่มงานพุ่งพรวดเหล่านั้นมา หนึ่งในนั้นคือสิ่งที่เริ่มต้นคำพังเพยเซสชัน1/etc/X11/Xsession.d/99upstartinit --user$STARTUP/usr/share/upstart/sessionsgnome-session.conf

ในที่สุด Lightdm-session จะเริ่มโปรแกรมจัดการหน้าต่างหรือเพื่อความเป็นเอกภาพสิ่งข้างต้นจะเริ่มจัดการเซสชัน gnome-session

ปรากฏว่าเซสชั่น lightdm ใช้เวลาในบทบาทดั้งเดิมของ xsession หน้าคนอยู่ที่http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html lightdm ถือว่าเป็นเซสชั่น wrapper

ผู้จัดการเซสชั่น gnome-session (Unity and Gnome Shells)


Manpage: http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
บันทึก:

ที่มา: หน้าคน


gnome-session ใช้สำหรับ Unity แต่ไม่ใช่สำหรับ Awesome โดยปริยายตัวอย่างเช่น ดูไฟล์ .desktop ด้านบน

gnome-session เริ่มโปรแกรมที่ระบุจาก / usr / share / gnome-session / session / และเริ่มแอปพลิเคชันจาก ~ / .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 เริ่ม gnome-keyring-daemon ด้วยตัวเลือก - เริ่มต้นดำเนินการเริ่มต้นกระบวนการ daemon นั้นและจัดเก็บข้อมูลที่สำคัญเกี่ยวกับมันในสภาพแวดล้อมสำหรับการใช้งานที่มีศักยภาพโดย SSH

จากรายการ ps aux ปรากฏว่า gnome-session เริ่มจัดการหน้าต่างด้วย dbus-launch

ผู้จัดการหน้าต่าง

ตัวจัดการหน้าต่างที่ยอดเยี่ยม


หน้าคน: http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
บันทึก:

ที่มา: หน้าคน, ตรวจสอบไฟล์กำหนดค่า


นี่คือไฟล์ Awesome.desktop ใน / usr / share / xsessions / ใช้โดย lightdm-session:

[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

เอกภาพ


ที่มา: การตรวจสอบไฟล์กำหนดค่า


นี่คือไฟล์ ubuntu.desktop ใน / usr / share / xsessions /:

[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

นี่เป็นการเริ่มเซสชัน gnome ที่อธิบายไว้ใน /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

โปรแกรม IsRunnableHelper ที่รันโดย gnome-session ใน 12.04 พิจารณาว่าสามารถรัน unity ได้หรือไม่หรือ ubuntu-2d จะทำงานหรือไม่ ถ้ามันทำผิดพลาดและบอกว่าเอกภาพสามารถวิ่งได้และมันก็ทำไม่ได้มันมีปัญหา เลือก ubuntu-2d ด้วยตนเองใน lightdm หากมันเกิดขึ้นกับคุณ ในขณะที่มันส่งคืนรหัสส่งคืนเราสามารถเห็นสิ่งที่กำลังทำอยู่โดยเรียกใช้ด้วยตัวเลือก -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 ต้องเริ่ม daemon การตั้งค่าและเริ่ม compiz เพื่อวัตถุประสงค์ในการเรียกใช้ตัวจัดการหน้าต่างและแผงควบคุมใด ๆ

Compiz


หน้าคน: http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
บันทึก:
ที่มา: http://en.wikipedia.org/wiki/Compizการตรวจสอบระบบไฟล์


เมื่อเริ่มต้น compiz มันจะเรียกใช้ปลั๊กอินต่าง ๆ ก่อน 12.10 gnome-settings จะใช้เพื่อกำหนดสิ่งเหล่านี้ สามารถเปลี่ยนแปลงได้ด้วย ccsm (ตัวจัดการการตั้งค่าการกำหนดค่า compiz) หรือด้วย gconf-editor การตั้งค่าปลั๊กอินถูกเก็บไว้ในแอพ / compiz-1 / General / screen0 / ตัวเลือกภายใต้ active_plugins รายการซ้ำทำให้ฉันมี segfaults พร้อม compiz สิ่งเหล่านี้ถูกเก็บไว้ในโฮมไดเร็กตอรี่ของผู้ใช้ในไดเรกทอรี ~ / .gconf / จัดเรียงไว้ด้านบน ค่าจริงจะถูกเก็บไว้ในไฟล์% gconf.xml ที่นั่น

ตั้งแต่ 12.10 ปลั๊กอินเหล่านี้จะถูกเก็บไว้ในไบนารีในไฟล์ ~ / .config / dconf / user ของคุณ วิธี dconf หรือ gsettings ของการจัดเก็บการตั้งค่าใหม่กว่า dconf dump /org/gnome/คุณสามารถดูการตั้งค่าทั้งหมดเหล่านี้ด้วย

Unityshell เป็นหนึ่งในปลั๊กอินเหล่านี้ มันใช้โปรเจ็กต์ nux เป็นชุดเครื่องมือที่ฝัง รูปภาพถูกวาดบนพื้นผิวในพื้นที่ 3 มิติพร้อมค่าความโปร่งใสที่ระบุ สิ่งเหล่านี้ถูกประมวลผลโดย compiz และส่งไปยัง llvm หรือไดรเวอร์กราฟิกขั้นสูงเพื่อให้เอ็นจิ้นกราฟิกบนฮาร์ดแวร์ประกอบคอมพิวเตอร์กราฟิกของระบบและแสดงผล โดยทั่วไปแล้วสิ่งนี้ตรงกันข้ามกับการแสดงภาพโดยตรงไปยัง framebuffer เช่นเดียวกับที่ทำมามากกว่าเดิม ห่วงโซ่ของเหตุการณ์ที่ซับซ้อนนี้คือสิ่งที่ต้องใช้ไดรเวอร์ขั้นสูงและบางครั้งก็แจ้งให้ใช้ไดรเวอร์กราฟิกที่เป็นกรรมสิทธิ์ใน Ubuntu


ฉันจะรู้ได้อย่างไรว่าระบบของฉันใช้งานได้ดีเลิศเป็นเอกภาพหรือคอมมิช
James

@james คุณสามารถตรวจสอบ compiz หรือ Awesome ในรายการกระบวนการ ps auxคุณจะได้รับว่ามีคำสั่งเช่น นอกจากนี้คุณยังสามารถตรวจสอบไฟล์ ~ / .dmrc cat ~/.dmrcสำหรับพารามิเตอร์เซสชัน ดูด้านบน. Session = ubuntu หมายความว่าคุณกำลังใช้ compiz และสามัคคีกัน (และนั่นเป็นค่าเริ่มต้น
John S Gruber

คำตอบที่ยอดเยี่ยมช่วยให้เข้าใจกระบวนการได้ดีโดยไม่ต้องมีความรู้พื้นฐาน! ตามคำอธิบายของคุณฉันพยายามทำซ้ำxsessions/ubuntu.desktopไฟล์อื่นและหวังว่าจะจบลงด้วยการทำงานแบบเดิม แต่ไม่ประสบความสำเร็จ (รายละเอียดเพิ่มเติมในคำถามนี้ ) มีอะไรพิเศษเกี่ยวกับการเริ่มต้นubuntu.desktopxsession หรือไม่?
โฆษณา N

อันที่จริงจะ +10 ถ้าฉันสามารถ ดีกว่าหมอ ...
แหวนØ

ขอบคุณที่เขียนลงไป คุณสามารถอัปเดตเกี่ยวกับการเปลี่ยนแปลงสิ่งต่าง ๆ สำหรับ Ubuntu รุ่นใหม่กว่าได้อย่างไร
exic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.