Що відбувається під кришками, щоб увійти до мене та запустити Unity чи інший графічний інтерфейс користувача?


55

Коли виникають проблеми, може бути добре зрозуміти, що відбувається під кришками, щоб увійти користувача в сеанс GUI та отримати Unity (або інший менеджер вікон) для створення робочого столу.

Відповіді:


86

Як розпочався сеанс користувальницького інтерфейсу користувача на робочому столі з Ubuntu 12.04-14.04

Ось ланцюжок подій:

Ядро та оновлення Ubuntu Linux

Ядро запускає процес init як процес № 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 і/var/log/lightdm/lightdm.log


lightdm розпочинається досить пізно в процесі init; Наприклад, системний dbus повинен бути вже запущений, файлова система повинна бути готова, а система графічного відображення повинна бути готова.

lightdm створює файл xauthority, а потім запускає X, запускаючи його на VT 7, віртуальному терміналі, який ви отримуєте, якщо натиснути Alt+ Ctrl+ F7. Коли запускається X, сигнали lightdm подають, щоб програма Plymouth splash screen вийшла. Дуже важливо, щоб це сталося після того, як почалися всі тити (1-6).

З липня 2013 року елементи підтримки Mir додані до lightdm, але вони не використовуються за замовчуванням для настільних систем станом на 14.04.

X намагається використовувати найсучасніші можливі драйвери. Це завантажені власні драйвери /usr/lib/xorg/modules/. Зауважте, що для багатьох пристроїв існують як драйвери ядра, так і драйвери xorg, при цьому драйвери xorg майже напевно використовують драйвери ядра. dri і glx - важливі особливості, зокрема, для просунутої високопродуктивної графіки. Журнали зберігаються для X у /var/log/Xorg.0.log.

Через системний dbus є зв’язок щодо цього "місця", і можливі імена користувачів. lightdm використовує X для малювання екрана. Єдність-привітання використовується для сприяння в процесі.

Вибираючи різні можливі користувальницькі зображення, що використовується зворотне зображення userid.

lightdm get - це імена потенційних менеджерів вікон / систем /usr/share/xsessions/*.desktop.

Інформація про обліковий запис отримується за допомогою облікових записів-сервісів-акаунтів через dbus.

lightdm та greeter використовують PAM для аутентифікації користувача. Після автентифікації PAM запустить демон gnome-keyring-daemon з опцією --login і подасть його пароль користувача, щоб він міг розблокувати вхідний ключ користувача, якщо він присутній. Дивіться 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Сценарій оболонки виконується з аргументами г nome-session --session=ubuntu (СІК .-- «Убунту», а не "єдність»)

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-агент, і session-dbus, як це дозволено у наведеному вище Xsession.optionsфайлі). Цей dbus-сеанс корисний для зв'язку між процесами щодо цього одного сеансу користувача.

ssh-агент може утримувати ключі 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. Таким чином, upstart в режимі користувача запускає ці завдання на початку /usr/share/upstart/sessions. Одне з таких - це те, gnome-session.confщо запускає gnome-сесію.

Якщо це вже не зроблено, нарешті lightdm-сесія запускає менеджер вікон, або для єдності вищезазначене запускає менеджер сеансів gnome-session.

Здається, що lightdm-сесія бере на себе традиційну роль xsession. Його сторінка знаходиться за адресою http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . lightdm вважає це обгорткою сесії.

менеджер сесії gnome-session (Unity та Gnome Shells)


Manpage: http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
Журнали:?

Джерело: сторінка man


gnome-сесія використовується для Unity, але не для дивовижних, наприклад. Дивіться вище .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 з опцією --start, завершуючи початок цього процесу демона і зберігаючи важливу інформацію про нього в середовищі для потенційного використання ssh.

Зі списку ps aux видно, що gnome-сесія запускає менеджери вікон із dbus-start.

Менеджери вікон

Дивовижний менеджер вікон


Сторінка людини: http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
Журнали:?

Джерело: сторінка man, перевірка конфігураційних файлів


Ось дивовижний.desktop файл у / usr / share / xsesions /, який використовується lightdm-сеансом:

[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 / xsesions /:

[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/sesions/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-сеансом у 12.04, визначає, чи можна запускати єдність чи буде запускатися 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 повинен запустити демон налаштувань і почати compiz для роботи менеджера вікон та будь-яких панелей.

compiz


Сторінка людини: http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
Журнали:?
Джерело: http://en.wikipedia.org/wiki/Compiz , експертиза файлової системи


Після запуску compiz він запускає різні плагіни. До 12.10 для їх визначення використовуються налаштування gnome. Їх можна змінити за допомогою ccsm (менеджер налаштувань параметрів compiz) або за допомогою gconf-редактора. Налаштування плагіну зберігаються у додатках / compiz-1 / general / screen0 / options під active_plugins. Дублікати викликали у мене segfault з compiz. Вони зберігаються в домашньому каталозі користувача в каталозі ~ / .gconf /, організованому як вище. Фактичні значення зберігаються у% gconf.xml файлах там.

З 12.10 ці плагіни зберігаються у двійковій формі у вашому файлі ~ / .config / dconf /. Метод dconf або gsettings для зберігання налаштувань новіший. Ви можете переглянути всі ці налаштування за допомогою dconf dump /org/gnome/.

Unityshell - один із цих плагінів. Він використовує проект nux як вбудований набір інструментів. Зображення малюються на текстурах у тривимірному просторі із заданими значеннями прозорості. Вони обробляються комп’ютером і надсилаються або llvm, або передовим графічним драйверам, щоб графічні двигуни на комп’ютерному комп'ютерному комп'ютері системи були складені та надавали їх. Як правило, це на відміну від візуалізації зображень безпосередньо до рамбуфера, як це робилося традиційно. Цей складний ланцюжок подій - це те, що вимагає більш досконалих драйверів, а іноді і спонукає до використання власних графічних драйверів в Ubuntu.


Як я можу дізнатися, чи працює в моїй системі Awesome, Unity чи compiz?
Джеймс

@james Ви, ймовірно, можете перевірити, чи є compiz чи awesome у списку процесів. Ви отримуєте це за допомогою такої команди, як ps aux. Ви також можете перевірити файл ~ / .dmrc на параметр Сесія cat ~/.dmrc. Дивись вище. Сесія = ubuntu означає, що ви використовуєте compiz та єдність разом (і це за замовчуванням.
John S Gruber

Виняткова відповідь, що дозволяє добре зрозуміти процес без необхідних знань! Після Вашого опису я спробував повторити xsessions/ubuntu.desktopфайл в інший файл і сподівався закінчитися такою ж поведінкою, але без успіху (детальніше в цьому запитанні ). Чи є щось особливе у ubuntu.desktopxsession за замовчуванням ?
Оголошення N

Дійсно, +10, якби міг. Краще, ніж док ...
Дзвінок Ø

Дякую, що записали це. Чи можете ви оновити інформацію про те, як змінилися зміни для нових версій Ubuntu?
exic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.