Что происходит под прикрытием для входа в систему и запуска Unity или другого графического интерфейса пользователя?

55

Когда возникают проблемы, может быть полезно понять, что происходит под прикрытием, чтобы зарегистрировать пользователя в сеансе с графическим интерфейсом и получить Unity (или другой оконный менеджер) для запуска рабочего стола.

Джон С. Грубер
источник

Ответы:

86

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

Вот цепочка событий:

Ядро Ubuntu Linux и выскочка

Ядро запускает процесс инициализации как процесс номер 1. Это выскочка для Ubuntu 12.04.

Upstart работы находятся в /etc/init/


Man страница: man init

Журналы: журнал ядра ( dmesgскопирован в /var/log/syslog) /var/log/upstart/jobname.log, другие журналы, определяемые запущенными заданиями.

Источник: /etc/init/lightdm.conf


Задание upstart выполняется /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

Источник: человек Lightdm и/var/log/lightdm/lightdm.log


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

lightdm создает файл xauthority и затем запускает X, запуская его на VT 7, виртуальный терминал, который вы получаете, если нажимаете Alt+ Ctrl+ F7. Когда X запускается, lightdm сигнализирует о выходе из программы заставки Plymouth. Важно, чтобы это произошло после того, как начались все tty (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, чтобы нарисовать экран. единство приветствует, чтобы помочь в этом процессе.

При выборе различных возможных идентификаторов пользователей будет использоваться фоновое изображение этого идентификатора.

lightdm получает имена потенциальных оконных менеджеров / систем /usr/share/xsessions/*.desktop.

Информация об учетной записи получена через счет-сервис-учетную запись через dbus.

lightdm и приветствующий используют 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оболочки запускается с аргументами g nome-session --session=ubuntu (sic .-- 'ubuntu', а не 'unity')

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-agent (избыточный), другой запускается $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который запускает gnome-сессию.

Если это еще не сделано, наконец, lightdm-сеанс запускает диспетчер окон, или, для единства, вышеуказанный запуск менеджера сеансов gnome-сессии.

Похоже, что lightdm-session берет на себя традиционную роль xsession. Его страница руководства находится по адресу http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html . lightdm считает это сессионной оболочкой.

менеджер сессий gnome (Unity и Gnome Shells)


Страница руководства: 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 с параметром --start, завершая запуск этого процесса демона и сохраняя важную информацию о нем в среде для потенциального использования 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 из пакета awesome. Его можно настроить с помощью $ 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 должен запустить демон настроек и запустить 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-editor. Настройки плагина хранятся в apps / compiz-1 / general / screen0 / options в active_plugins. Из-за дубликатов у меня возникли ошибки с compiz. Они хранятся в домашнем каталоге пользователя в каталоге ~ / .gconf /, как описано выше. Фактические значения хранятся в файлах% gconf.xml.

С 12.10 эти плагины хранятся в двоичном виде в вашем файле ~ / .config / dconf / user. Метод хранения настроек dconf или gsettings более новый. Вы можете увидеть все эти настройки с помощью dconf dump /org/gnome/.

Unityshell является одним из этих плагинов. Он использует проект nux в качестве встроенного инструментария. Изображения отображаются на текстурах в трехмерном пространстве с заданными значениями прозрачности. Они обрабатываются compiz и отправляются либо в llvm, либо в продвинутые графические драйверы, чтобы графические движки компоновались на компьютерном графическом оборудовании системы и отображали их. Как правило, это в отличие от рендеринга изображений непосредственно в кадровый буфер, как это было сделано более традиционно. Эта сложная цепочка событий требует более продвинутых драйверов и иногда требует использования проприетарных графических драйверов в Ubuntu.

Джон С. Грубер
источник
Как я могу узнать, работает ли моя система Awesome, Unity или compiz?
Джеймс
@james Вы можете проверить наличие compiz или awesome в списке процессов. Вы получаете это с помощью команды, такой как ps aux. Вы также можете проверить файл ~ / .dmrc для параметра Session cat ~/.dmrc. Смотри выше. Session = ubuntu означает, что вы используете compiz и unity вместе (и это по умолчанию.
John S Gruber
Исключительный ответ, позволяющий получить хорошее представление о процессе без обязательных знаний! Следуя вашему описанию, я попытался скопировать его xsessions/ubuntu.desktopв другой файл и надеялся получить такое же поведение, но безуспешно (более подробно в этом вопросе ). Есть ли что-то особенное в ubuntu.desktopxsession по умолчанию ?
Объявление N
Действительно, +10, если бы я мог. Лучше, чем док ...
Кольцо Ø
Спасибо, что записали это. Можете ли вы рассказать, как все изменилось в новых версиях Ubuntu?
Exic