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

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

55
задан 8 May 2014 в 23:32

1 ответ

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

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

Ядро Ubuntu Linux и его запуск

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

Задания Upstart находятся в /etc/init/


Страница man: 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 get начали довольно поздно в процессе инициализации; Например, система dbus должна быть уже запущена, файловая система должна быть готова, а система графического отображения должна быть готова.

lightdm создает файл xauthority и затем запускает X, запуская его в VT 7, виртуальный терминал, который вы получаете, если нажимаете Alt + Ctrl + F7 < / KBD>. Когда 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.

Информация об учетной записи получается через демон accountsvice services через 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-session


Журналы:?
Журналы ошибок: ~/.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 некоторое время в течение сеанса, но gnome-keyring-daemon делает то же самое.

/etc/X11/Xsession.d/50_check_unity_support запускает /usr/lib/nux/unity_support_test и в случае неудачи экспортирует LIBGL_ALWAYS_SOFTWARE=1 в среду, так что llvmpipe будет использоваться для программного рендеринга рабочего стола.

Начиная с Убуну 13.10: /etc/X11/Xsession.d/00upstart устанавливает переменную UPSTART в 1. /etc/X11/Xsession.d/99upstart проверяет эту переменную и, если установлено, заменяет init --user на другие элементы, установленные на $STARTUP. Таким образом, выскочка в пользовательском режиме запускает эти выскочки в /usr/share/upstart/sessions. Одним из них является gnome-session.conf, который запускает сессию гномов.

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

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

Менеджер сеансов gnome (оболочки Unity и Gnome)


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

Источник: man page


gnome-session используется для 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-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.

Unity


Источник: проверка файла конфигурации


Вот файл 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.

0
ответ дан 8 May 2014 в 23:32

Другие вопросы по тегам:

Похожие вопросы: