Когда возникают проблемы, может быть полезно понять, что происходит под прикрытием, чтобы подписать пользователя на сеанс графического интерфейса и получить Unity (или другой оконный менеджер) для запуска рабочего стола.
Вот цепочка событий:
Ядро запускает Процесс 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
.
Страница справочника: 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 kbd> + Ctrl kbd> + 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')
Журналы:?
Журналы ошибок: ~/.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-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 считает это сессионной оболочкой.
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.
Источник: проверка файла конфигурации
Вот файл 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 для запуска оконного менеджера и любых панелей.
Страница руководства: 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.