Что происходит под прикрытием для входа в систему и запуска Unity или другого графического интерфейса пользователя?
Когда возникают проблемы, может быть полезно понять, что происходит под прикрытием, чтобы зарегистрировать пользователя в сеансе с графическим интерфейсом и получить Unity (или другой оконный менеджер) для запуска рабочего стола.
1 ответ
Как сеанс графического интерфейса пользователя рабочего стола начинается с 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
Выполняется выскочка /usr/sbin/lightdm
, Мы, вероятно, можем ожидать, что это будет преобразовано в systemd
сервисный блок со временем.
LightDM
Man страница: 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.-- "убунту", а не "единство")
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
будет использоваться для программного рендеринга рабочего стола.
Начиная с Убуну 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-сессии.
Похоже, что lightdm-session берет на себя традиционную роль xsession. Его страница руководства находится по адресу http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html. lightdm считает это сессионной оболочкой.
менеджер сессий gnome (Unity и Gnome Shells)
Manpage: 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.