Điều gì xảy ra dưới vỏ bọc để đăng nhập tôi và khởi động Unity hoặc Giao diện người dùng đồ họa khác?


55

Khi gặp sự cố, có thể tốt để hiểu những gì xảy ra dưới vỏ bọc để đăng nhập người dùng vào phiên GUI và nhận Unity (hoặc trình quản lý cửa sổ khác) để hiển thị máy tính để bàn.

Câu trả lời:


86

Làm thế nào một phiên GUI người dùng máy tính để bàn được bắt đầu với Ubuntu 12.04-14.04

Đây là chuỗi sự kiện:

Hạt nhân Ubuntu Linux và mới bắt đầu

Hạt nhân bắt đầu quá trình init như quy trình số 1. Đây là khởi đầu cho Ubuntu 12.04.

Công việc mới bắt đầu /etc/init/


Trang nam: man init

Nhật ký: nhật ký kernel ( dmesg; được sao chép vào /var/log/syslog) /var/log/upstart/jobname.log, các nhật ký khác được xác định bởi các công việc đã bắt đầu.

Nguồn: /etc/init/lightdm.conf


Các công việc mới bắt đầu thực hiện /usr/sbin/lightdm. Chúng tôi có thể mong đợi điều này sẽ được chuyển đổi thành một systemdđơn vị dịch vụ theo thời gian.

Ánh sáng


Trang con người : man lightdm , Ngoài ra: Ubuntu Wiki: LightDM

Nhật ký:

/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

Nguồn: người đàn ông lightdm/var/log/lightdm/lightdm.log


lightdm get bắt đầu khá muộn trong quá trình init; Ví dụ, hệ thống dbus phải được khởi động, hệ thống tập tin phải sẵn sàng và hệ thống hiển thị đồ họa phải sẵn sàng.

lightdm tạo một tệp xauthority và sau đó khởi động X, bắt đầu nó trên VT 7, thiết bị đầu cuối ảo bạn nhận được nếu bạn nhấn Alt+ Ctrl+ F7. Khi X được khởi động, tín hiệu lightdm sẽ tắt chương trình màn hình giật gân Plymouth. Điều quan trọng là điều này xảy ra sau khi tất cả các tty (1-6) đã bắt đầu.

Kể từ tháng 7 năm 2013, các mục hỗ trợ Mir đã được thêm vào lightdm, nhưng các mục này không được sử dụng theo mặc định cho các hệ thống máy tính để bàn kể từ ngày 14.04.

X cố gắng sử dụng trình điều khiển tiên tiến nhất có thể. Trình điều khiển riêng của nó được tải từ /usr/lib/xorg/modules/. Lưu ý rằng tồn tại cả trình điều khiển kernel và trình điều khiển xorg cho nhiều thiết bị, với trình điều khiển xorg gần như chắc chắn sử dụng trình điều khiển kernel. Dri và glx là các tính năng quan trọng, đặc biệt, cho đồ họa hiệu suất cao tiên tiến. Nhật ký được lưu trữ cho X trong /var/log/Xorg.0.log.

Có thông tin liên lạc qua hệ thống dbus về "chỗ ngồi" này và tên người dùng có thể có được. lightdm sử dụng X để vẽ màn hình. unity-helloer được sử dụng để hỗ trợ trong quá trình.

Khi bạn chọn các userid khác nhau có thể sử dụng hình ảnh backgound của userid.

lightdm lấy tên của các nhà quản lý / hệ thống cửa sổ tiềm năng từ /usr/share/xsessions/*.desktop.

Thông tin tài khoản được lấy thông qua tài khoản dịch vụ tài khoản - daemon qua dbus.

lightdm và người chào sử dụng PAM để xác thực người dùng. Sau khi được xác thực, PAM sẽ bắt đầu một daemon gnome-keyring-daemon với tùy chọn --login và cung cấp cho nó mật khẩu của người dùng để nó có thể mở khóa khóa đăng nhập của người dùng, nếu có. Xem https://live.gnome.org/GnomeKeyring/Pam và man 8 pam_unix để biết thêm thông tin. PAM lưu trữ thông tin đăng nhập /var/log/auth.logvà được kiểm soát bởi /etc/pam.conf(gần như trống) và /etc/pam.d/*. Đặc biệt, xem /etc/pam.d/lightdm/etc/pam.d/lightdm-autologin.

Khi người dùng được xác thực đặc quyền sẽ bị hủy và một tệp được viết để ~user/.dmrcmô tả phiên. Ví dụ:

[Desktop]
Session=ubuntu

hoặc là

[Desktop]
Session=awesome

Các .desktoptập tin từ /usr/share/xsessions/*.desktopbây giờ xác định phần còn lại của chuỗi khởi động.

Ví dụ: đây là một cho 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

Các /usr/sbin/lightdm-sessionshell script được chạy với các đối số g nome-session --session=ubuntu (sic .-- 'ubuntu', không 'đoàn kết')

phiên ánh sáng


Nhật ký :?
Nhật ký lỗi: ~/.xsession-errors
Bắt đầu Nhật ký quá trình: ~/.cache/upstart/*
Nguồn:/usr/sbin/lightdm-session


/usr/sbin/lightdm-session sau đó thực hiện các bước sau:

Chạy:

  • /etc/profile, $HOME/.profile
  • /etc/xprofile $HOME/.xprofile;
  • tải tài nguyên từ /etc/X11/Xresources$HOME/.Xresources, nếu chúng tồn tại, tải bản đồ bàn phím với setxbmap bằng cách sử dụng nội dung của /etc/X11/Xkbmap$HOME/.Xkbmap;
  • nếu không sử dụng XKB, hãy sử dụng xmodmap chống lại mọi hiện có /etc/X11/Xmodmap$HOME/.Xmodmap
  • chạy script trong /etc/X11/xinit/xinitrc.d;
  • chạy các tập lệnh Xsession trong /etc/X11/Xsession.d/*, sử dụng các tùy chọn trong /etc/X11/Xsession.options.

    Một trong số này bắt đầu ssh-agent (dự phòng), một thực thi khác $HOME/.xsessionrc. Một phiên bản khác bắt đầu session-dbus (cả ssh-agent và session-dbus như được cho phép trong Xsession.optionstệp trên ). Dbus phiên này hữu ích cho việc liên lạc giữa các quy trình liên quan đến phiên người dùng này.

ssh-agent có thể giữ các khóa ssh cho phiên nếu chúng là ssh-add 'ed một thời gian trong phiên, nhưng gnome-keyring-daemon cũng làm điều tương tự.

/etc/X11/Xsession.d/50_check_unity_supportchạy /usr/lib/nux/unity_support_testvà nếu nó không xuất LIBGL_ALWAYS_SOFTWARE=1ra môi trường thì llvmpipesẽ được sử dụng để phần mềm kết xuất máy tính để bàn.

Bắt đầu với Ubunu 13.10: /etc/X11/Xsession.d/00upstartđặt biến UPSTARTthành 1. /etc/X11/Xsession.d/99upstartkiểm tra biến đó và nếu được đặt thay thế init --user cho các mục khác được đặt thành $STARTUP. Do đó, chế độ người dùng mới bắt đầu bắt đầu những công việc mới bắt đầu /usr/share/upstart/sessions. Một trong số đó là gnome-session.confbắt đầu phiên gnome.

Trừ khi đã được thực hiện, cuối cùng lightdm-session sẽ khởi động trình quản lý cửa sổ hoặc để thống nhất, phần trên bắt đầu trình quản lý phiên gnome-session.

Dường như lightdm-session đảm nhận vai trò truyền thống của xsession. Trang người dùng của nó có tại http://manpages.ubfox.com/manpages/precise/man5/Xsession.5.html . lightdm coi nó là một trình bao bọc phiên.

Trình quản lý phiên gnome (Unity và Gnome Shell)


Trang chủ: http://manpages.ubfox.com/manpages/precise/en/man1/gnome-session.1.html
Nhật ký :?

Nguồn: trang nam


gnome-session được sử dụng cho Unity, nhưng không phải là tuyệt vời theo mặc định. Xem các tập tin .desktop ở trên.

gnome-session bắt đầu chương trình được chỉ định từ / usr / share / gnome-session / session / và khởi động các ứng dụng từ ~ / .config / autostart / và / etc / xdg / autostart.

Đây là một ví dụ từ / 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

Một thứ khác, ssh.

Từ một danh sách ps, có vẻ như phiên gnome bắt đầu các trình quản lý cửa sổ với dbus-launch.

Quản lý cửa sổ

Quản lý cửa sổ tuyệt vời


Trang con người: http://manpages.ubfox.com/manpages/precise/en/man1/awclaw.1.html
Nhật ký :?

Nguồn: trang man, kiểm tra tập tin cấu hình


Đây là tệp awesome.desktop trong / usr / share / xsimes / được sử dụng bởi lightdm-session:

[Desktop Entry] 
Encoding=UTF-8
Name=awesome
Comment=Highly configurable framework window manager
TryExec=awesome
Exec=awesome

Như bạn có thể thấy, mục nhập chỉ đơn giản là làm cho trình quản lý cửa sổ tuyệt vời được thực thi. Nó đọc các tệp cấu hình của riêng nó, bao gồm /etc/xdg/awclaw/rc.lua từ gói tuyệt vời. Nó có thể được cấu hình với $ HOME / .config / awesome / rc.lua.

Đoàn kết


Nguồn: kiểm tra tập tin cấu hình


Đây là tệp ubfox.desktop trong / usr / share / xsimes /:

[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

Điều này bắt đầu phiên gnome được mô tả trong /usr/share/gnome-session/simes/ubfox.session

Đây là tập tin:

[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

Chương trình IsRunnableHelper được chạy bởi gnome-session trong 12.04 xác định liệu có thể chạy unity hay không ubfox-2d sẽ chạy. Nếu nó phạm sai lầm và nói rằng sự thống nhất có thể chạy và nó không thể, thì có rắc rối. Chọn ubfox-2d theo cách thủ công trong lightdm nếu điều đó xảy ra với bạn. Trong khi nó trả về mã trả về, chúng ta có thể thấy nó đang làm gì bằng cách chạy nó với tùy chọn -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

Đối với phần cứng 12.10 trở lên, phần cứng không được hỗ trợ sẽ sử dụng phần mềm llvmpipe để hiển thị những gì phần cứng không thể. Tập tin cấu hình của nó là đơn giản hơn ở trên. Xem ở trên để biết làm thế nào nó được kích hoạt.

Chúng ta có thể thấy từ các tệp trên, phiên gnome phải khởi động trình nền cài đặt và bắt đầu tính toán cho các mục đích chạy trình quản lý cửa sổ và bất kỳ bảng nào.

công ty


Trang con người: http://manpages.ubfox.com/manpages/precise/en/man1/compiz.1.html
Nhật ký :?
Nguồn: http://en.wikipedia.org/wiki/Compiz , kiểm tra hệ thống tệp


Khi compiz được bắt đầu, nó sẽ chạy các plugin khác nhau. Trước 12.10 gnome-settings được sử dụng để xác định các cài đặt này. Chúng có thể được thay đổi bằng ccsm (trình quản lý cài đặt cấu hình compiz) hoặc bằng trình biên tập gconf. Cài đặt plugin được lưu trữ trong ứng dụng / compiz-1 / general / screen0 / tùy chọn trong active_plugins. Sự trùng lặp đã khiến tôi có segfaults với compiz. Chúng được lưu trữ trong thư mục chính của người dùng trong thư mục ~ / .gconf / được tổ chức như trên. Các giá trị thực tế được lưu trữ trong các tệp% gconf.xml ở đó.

Kể từ ngày 12.10, các plugin này được lưu trữ dưới dạng nhị phân trong tệp ~ / .config / dconf / user của bạn. Phương thức lưu trữ cài đặt dcs hoặc gsinstall mới hơn. Bạn có thể thấy tất cả các cài đặt này với dconf dump /org/gnome/.

Unityshell là một trong những plugin này. Nó sử dụng dự án nux như một bộ công cụ nhúng. Hình ảnh được vẽ trên kết cấu trong không gian 3 chiều với các giá trị trong suốt được chỉ định. Chúng được xử lý bởi compiz và được gửi tới llvm hoặc tới trình điều khiển đồ họa nâng cao để có các công cụ đồ họa trên phần cứng đồ họa máy tính của hệ thống và kết xuất chúng. Nói chung, điều này trái ngược với việc hiển thị hình ảnh trực tiếp cho bộ đệm khung như được thực hiện theo truyền thống hơn. Chuỗi sự kiện phức tạp này là những gì đòi hỏi trình điều khiển nâng cao hơn và đôi khi nhắc nhở việc sử dụng trình điều khiển đồ họa độc quyền trong Ubuntu.


Làm cách nào để biết hệ thống của tôi đang chạy Awesome, Unity hay compiz?
James

@james Bạn có thể kiểm tra compiz hoặc tuyệt vời trong danh sách quy trình. Bạn nhận được điều đó với một lệnh như ps aux. Bạn cũng có thể kiểm tra tệp ~ / .dmrc cho tham số Phiên cat ~/.dmrc. Xem ở trên. Phiên = ubfox có nghĩa là bạn đang sử dụng compiz và unity với nhau (và đó là mặc định.
John S Gruber

Câu trả lời đặc biệt, cho phép nắm bắt tốt quá trình mà không cần kiến ​​thức tiên quyết! Theo mô tả của bạn, tôi đã cố gắng sao chép xsessions/ubuntu.desktoptệp trong một tệp khác và hy vọng kết thúc với hành vi tương tự, nhưng không có bất kỳ thành công nào (chi tiết hơn trong câu hỏi này ). Có điều gì đặc biệt về ubuntu.desktopxsession mặc định ?
Quảng cáo N

Thật vậy, sẽ +10 nếu tôi có thể. Tốt hơn so với tài liệu ...
Đổ chuông

Cảm ơn bạn đã viết nó xuống. Bạn có thể cập nhật về cách mọi thứ thay đổi cho các phiên bản Ubuntu mới hơn không?
exic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.