Pertanyaan Apa yang terjadi di bawah penutup untuk memasukkan saya dan memulai Kesatuan atau Antarmuka Pengguna Grafis lainnya?


Ketika ada masalah, mungkin lebih baik untuk memahami apa yang terjadi di bawah selimut untuk menandatangani pengguna ke sesi GUI dan mendapatkan Kesatuan (atau manajer jendela lain) untuk membuka desktop.


55
2018-06-13 18:33


asal




Jawaban:


Bagaimana sesi GUI pengguna desktop dimulai dengan Ubuntu 12.04-14.04

Inilah rangkaian acara:

Kernel Linux Ubuntu dan pemula

Kernel memulai proses init sebagai proses nomor 1. Ini adalah upstream untuk Ubuntu 12.04.

Pekerjaan baru dimulai /etc/init/


Halaman manual: man init

Log: log kernel (dmesg; disalin ke /var/log/syslog), /var/log/upstart/jobname.log, log lain yang ditentukan oleh pekerjaan yang dimulai.

Sumber: /etc/init/lightdm.conf


Pekerjaan baru dimulai /usr/sbin/lightdm . Kita mungkin berharap ini akan dikonversi menjadi systemd unit layanan dari waktu ke waktu.

Lightdm


Halaman manual: man lightdm , Juga: Ubuntu Wiki: LightDM

Log:

/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

Sumber: man lightdm dan /var/log/lightdm/lightdm.log


lightdm get dimulai cukup terlambat dalam proses init; Sebagai contoh, sistem dbus harus sudah dimulai, filesystem harus siap, dan sistem tampilan grafik harus siap.

lightdm membuat file xauthority dan kemudian mulai X, memulainya di VT 7, terminal virtual yang Anda dapatkan jika Anda menekan Alt+Ctrl+F7. Ketika X memulai sinyal lightdm untuk program layar splash Plymouth untuk berhenti. Sangat penting bahwa ini terjadi setelah semua tty's (1-6) telah dimulai.

Sejak Juli 2013, item dukungan Mir telah ditambahkan ke lightdm, tetapi itu tidak digunakan secara default untuk sistem desktop pada 14.04.

X mencoba menggunakan driver yang paling canggih mungkin. Ini driver sendiri yang dimuat /usr/lib/xorg/modules/ . Perhatikan bahwa ada driver kernel dan driver xorg untuk banyak perangkat, dengan driver xorg hampir pasti menggunakan kernel. dri dan glx adalah fitur penting, khususnya, untuk grafik kinerja tinggi yang canggih. Log disimpan untuk X di /var/log/Xorg.0.log .

Ada komunikasi melalui sistem dbus tentang "kursi" ini dan kemungkinan nama pengguna diperoleh. lightdm menggunakan X untuk menggambar layar. penyambut kesatuan digunakan untuk membantu dalam prosesnya.

Ketika Anda memilih berbagai userid mungkin, gambar backgound userid itu digunakan.

lightdm mendapatkan nama-nama manajer / sistem jendela potensial /usr/share/xsessions/*.desktop.

Informasi akun diperoleh melalui akun accountsservice-daemon melalui dbus.

lightdm dan penyambut menggunakan PAM untuk mengotentikasi pengguna. Setelah diotentikasi, PAM akan memulai daemon gnome-keyring-daemon dengan --login opsi dan beri makan kata sandi pengguna sehingga dapat membuka kunci login pengguna, jika ada. Lihat https://live.gnome.org/GnomeKeyring/Pam  dan man 8 pam_unix untuk informasi lebih lanjut. PAM menyimpan informasi login di /var/log/auth.log dan dikendalikan oleh /etc/pam.conf (hampir kosong) dan /etc/pam.d/*. Khususnya, lihat /etc/pam.d/lightdm dan /etc/pam.d/lightdm-autologin.

Setelah pengguna diautentikasi hak istimewa dijatuhkan dan file ditulis untuk ~user/.dmrcmenggambarkan sesi. Sebagai contoh:

[Desktop]
Session=ubuntu

atau

[Desktop]
Session=awesome

Itu .desktop file dari /usr/share/xsessions/*.desktop sekarang tentukan sisa urutan startup.

Misalnya inilah satu untuk 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

Itu /usr/sbin/lightdm-session skrip shell dijalankan dengan argumen gnome-session --session=ubuntu (sic .-- 'ubuntu', bukan 'kesatuan')

sesi lightdm


Log:?
Log Kesalahan: ~/.xsession-errors
Memulai Log Proses: ~/.cache/upstart/*
Sumber: /usr/sbin/lightdm-session 


/usr/sbin/lightdm-session kemudian mengambil langkah-langkah ini:

Jalankan:

  • /etc/profile, $HOME/.profile 
  • /etc/xprofile $HOME/.xprofile;
  • memuat sumber daya dari /etc/X11/Xresources dan $HOME/.Xresources, jika ada, muat peta keyboard dengan setxbmap menggunakan konten /etc/X11/Xkbmap dan $HOME/.Xkbmap;
  • jika tidak menggunakan XKB menggunakan xmodmap terhadap apa pun yang ada /etc/X11/Xmodmap dan $HOME/.Xmodmap 
  • menjalankan skrip di /etc/X11/xinit/xinitrc.d;
  • menjalankan skrip Xsession di /etc/X11/Xsession.d/*, menggunakan opsi di /etc/X11/Xsession.options.

    Salah satunya dimulai ssh-agent (redundant), yang lain mengeksekusi $HOME/.xsessionrc. Lain mulai session-dbus (baik ssh-agent dan sesi-dbus sebagaimana diizinkan di atas Xsession.options mengajukan). Sesi ini berguna untuk komunikasi antar proses mengenai sesi pengguna tunggal ini.

ssh-agent dapat menahan kunci ssh untuk sesi jika mereka ssh-add 'ed beberapa waktu selama sesi, tetapi gnome-keyring-daemon melakukan hal yang sama.

/etc/X11/Xsession.d/50_check_unity_support berjalan /usr/lib/nux/unity_support_test dan jika gagal ekspor LIBGL_ALWAYS_SOFTWARE=1 ke lingkungan sehingga llvmpipe akan digunakan untuk perangkat lunak merender desktop.

Dimulai dengan Ubunu 13.10: /etc/X11/Xsession.d/00upstart set variabel UPSTART untuk 1. /etc/X11/Xsession.d/99upstart periksa variabel itu dan jika disetel pengganti init --user ke item lain diatur ke $STARTUP. Dengan demikian, pemula mode pengguna memulai pekerjaan upstart di /usr/share/upstart/sessions. Salah satunya adalah gnome-session.conf yang memulai gnome-session.

Kecuali sudah dilakukan, akhirnya sesi lightdm mulai manajer jendela, atau untuk kesatuan, di atas memulai manajer sesi gnome-session.

Tampaknya sesi lightdm mengambil peran tradisional xsession. Halaman manualnya ada di http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . lightdm menganggapnya sebagai pembungkus sesi.

gnome-session session manager (Unity dan Gnome Shells)


Manpage: http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
Log:?

Sumber: halaman manual


gnome-session digunakan untuk Unity, tetapi tidak untuk awesome secara default, misalnya. Lihat file .desktop di atas.

gnome-session memulai program yang ditentukan dari / usr / share / gnome-session / session / dan memulai aplikasi dari ~ / .config / autostart / dan / etc / xdg / autostart.

Berikut satu contoh dari / 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

Lain, /etc/xdg/autostart/gnome-keyring-ssh.desktop, memulai gnome-keyring-daemon dengan opsi --start, menyelesaikan awal dari proses daemon dan menyimpan informasi penting tentang hal itu di lingkungan untuk kemungkinan penggunaan oleh ssh.

Dari daftar aux aux tampak bahwa gnome-session memulai window manager dengan dbus-launch.

Manajer Jendela

Awesome Window Manager


Halaman manual: http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
Log:?

Sumber: halaman manual, pemeriksaan file konfigurasi


Inilah file awesome.desktop di / usr / share / xsessions / digunakan oleh sesi lightdm:

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

Seperti yang Anda lihat, entri tersebut hanya menyebabkan window manager yang mengagumkan untuk dieksekusi. Bunyinya file konfigurasi sendiri, termasuk /etc/xdg/awesome/rc.lua dari paket mengagumkan. Ini dapat dikonfigurasi dengan $ HOME / .config / awesome / rc.lua.

Kesatuan


Sumber: pemeriksaan file konfigurasi


Ini file ubuntu.desktop di / 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

Ini memulai sesi gnome yang dijelaskan di /usr/share/gnome-session/sessions/ubuntu.session

Ini file itu:

[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

Program IsRunnableHelper yang dijalankan oleh gnome-session di 12.04 menentukan apakah kesatuan dapat dijalankan atau apakah ubuntu-2d akan berjalan. Jika itu membuat kesalahan dan mengatakan persatuan dapat berjalan dan itu tidak bisa, ada masalah. Pilih ubuntu-2d secara manual dalam lightdm jika itu terjadi pada Anda. Ketika mengembalikan kode kembali, kita dapat melihat apa yang dilakukannya dengan menjalankannya dengan opsi -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

Untuk 12.10 dan kemudian perangkat keras yang tidak didukung menggunakan perangkat lunak llvmpipe untuk merender apa yang perangkat keras tidak bisa. File konfigurasinya lebih sederhana daripada yang di atas. Lihat di atas untuk bagaimana ini diaktifkan.

Kita dapat melihat dari file di atas bahwa gnome-session harus memulai daemon pengaturan, dan memulai compiz untuk keperluan menjalankan window manager dan panel apa saja.

compiz


Halaman manual: http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
Log:?
Sumber: http://en.wikipedia.org/wiki/Compiz, pemeriksaan sistem file


Setelah compiz dijalankan, ia menjalankan berbagai plugin. Sebelum 12.10 pengaturan gnome digunakan untuk mendefinisikan ini. Mereka dapat diubah dengan ccsm (compiz config pengaturan manager) atau dengan gconf-editor. Pengaturan plugin disimpan dalam aplikasi / compiz-1 / umum / screen0 / opsi di bawah active_plugins. Duplikat telah menyebabkan saya memiliki segfault dengan compiz. Ini disimpan di direktori home pengguna di direktori ~ / .gconf/ yang diatur seperti di atas. Nilai sebenarnya disimpan dalam file% gconf.xml di sana.

Sejak 12.10 plugin ini disimpan dalam biner di file ~ / .config / dconf / user Anda. The dconf, atau pengaturan gsettings dari pengaturan penyimpanan lebih baru. Anda dapat melihat semua pengaturan ini dengan dconf dump /org/gnome/.

Unityshell adalah salah satu dari plugin ini. Ini menggunakan proyek nux sebagai toolkit yang diembed. Gambar digambar pada tekstur dalam ruang 3 dimensi dengan nilai transparansi yang ditentukan. Ini diproses oleh compiz dan dikirim ke llvm atau ke driver grafis lanjutan untuk memiliki mesin grafis pada komposit perangkat keras grafis komputer dan membuatnya. Secara umum, ini adalah sebagai lawan dari rendering gambar langsung ke framebuffer seperti yang dilakukan lebih tradisional. Rangkaian kejadian yang rumit inilah yang memerlukan driver yang lebih maju, dan terkadang meminta penggunaan driver grafis proprietary di Ubuntu.


85
2018-06-13 18:33



Bagaimana saya tahu apakah sistem saya menjalankan Awesome, Unity, atau compiz? - James
@james Anda mungkin dapat memeriksa compiz atau mengagumkan dalam daftar proses. Anda mendapatkannya dengan perintah seperti ps aux. Anda juga dapat memeriksa file ~ / .dmrc untuk parameter Sesi cat ~/.dmrc. Lihat di atas. Sesi = ubuntu berarti Anda menggunakan compiz dan kesatuan bersama (dan itu adalah defaultnya. - John S Gruber
Jawaban luar biasa, memungkinkan untuk mendapatkan pemahaman yang baik tentang proses tanpa pengetahuan prasyarat! Mengikuti uraian Anda, saya mencoba untuk mereplikasi xsessions/ubuntu.desktopdi file lain dan berharap untuk berakhir dengan perilaku yang sama, tetapi tidak berhasil (lebih detail dalam pertanyaan ini). Apakah ada sesuatu yang istimewa tentang default ubuntu.desktop xsession? - Ad N
Memang, akan +10 jika saya bisa. Lebih baik dari ... - Ring Ø