เมื่อมีปัญหาอาจเป็นการดีที่จะเข้าใจว่าเกิดอะไรขึ้นภายใต้หน้าปกเพื่อลงชื่อผู้ใช้เข้าสู่เซสชัน GUI และรับ Unity (หรือตัวจัดการหน้าต่างอื่น) เพื่อเปิดเดสก์ท็อป
เมื่อมีปัญหาอาจเป็นการดีที่จะเข้าใจว่าเกิดอะไรขึ้นภายใต้หน้าปกเพื่อลงชื่อผู้ใช้เข้าสู่เซสชัน GUI และรับ Unity (หรือตัวจัดการหน้าต่างอื่น) เพื่อเปิดเดสก์ท็อป
คำตอบ:
นี่คือห่วงโซ่ของเหตุการณ์:
เคอร์เนลเริ่มต้นกระบวนการเริ่มต้นด้วยหมายเลขกระบวนการ 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
หน่วยบริการเมื่อเวลาผ่านไป
หน้าคน: 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 .-- 'อูบุนตู' ไม่ 'สามัคคี')
บันทึก:
บันทึกข้อผิดพลาด: บันทึก~/.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
; รันสคริปต์ 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/99upstart
init --user
$STARTUP
/usr/share/upstart/sessions
gnome-session.conf
ในที่สุด Lightdm-session จะเริ่มโปรแกรมจัดการหน้าต่างหรือเพื่อความเป็นเอกภาพสิ่งข้างต้นจะเริ่มจัดการเซสชัน gnome-session
ปรากฏว่าเซสชั่น lightdm ใช้เวลาในบทบาทดั้งเดิมของ xsession หน้าคนอยู่ที่http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html lightdm ถือว่าเป็นเซสชั่น wrapper
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 เพื่อวัตถุประสงค์ในการเรียกใช้ตัวจัดการหน้าต่างและแผงควบคุมใด ๆ
หน้าคน: 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
ps aux
คุณจะได้รับว่ามีคำสั่งเช่น นอกจากนี้คุณยังสามารถตรวจสอบไฟล์ ~ / .dmrc cat ~/.dmrc
สำหรับพารามิเตอร์เซสชัน ดูด้านบน. Session = ubuntu หมายความว่าคุณกำลังใช้ compiz และสามัคคีกัน (และนั่นเป็นค่าเริ่มต้น
xsessions/ubuntu.desktop
ไฟล์อื่นและหวังว่าจะจบลงด้วยการทำงานแบบเดิม แต่ไม่ประสบความสำเร็จ (รายละเอียดเพิ่มเติมในคำถามนี้ ) มีอะไรพิเศษเกี่ยวกับการเริ่มต้นubuntu.desktop
xsession หรือไม่?