Коли виникають проблеми, може бути добре зрозуміти, що відбувається під кришками, щоб увійти користувача в сеанс GUI та отримати Unity (або інший менеджер вікон) для створення робочого столу.
Коли виникають проблеми, може бути добре зрозуміти, що відбувається під кришками, щоб увійти користувача в сеанс GUI та отримати Unity (або інший менеджер вікон) для створення робочого столу.
Відповіді:
Ось ланцюжок подій:
Ядро запускає процес 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
сервісний блок.
Сторінка людини:, 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
(СІК .-- «Убунту», а не "єдність»)
Журнали:
Журнали помилок: ~/.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-агент, і 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 вважає це обгорткою сесії.
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 для роботи менеджера вікон та будь-яких панелей.
Сторінка людини: 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.
ps aux
. Ви також можете перевірити файл ~ / .dmrc на параметр Сесія cat ~/.dmrc
. Дивись вище. Сесія = ubuntu означає, що ви використовуєте compiz та єдність разом (і це за замовчуванням.
xsessions/ubuntu.desktop
файл в інший файл і сподівався закінчитися такою ж поведінкою, але без успіху (детальніше в цьому запитанні ). Чи є щось особливе у ubuntu.desktop
xsession за замовчуванням ?