Когда возникают проблемы, может быть полезно понять, что происходит под прикрытием, чтобы зарегистрировать пользователя в сеансе с графическим интерфейсом и получить Unity (или другой оконный менеджер) для запуска рабочего стола.
Когда возникают проблемы, может быть полезно понять, что происходит под прикрытием, чтобы зарегистрировать пользователя в сеансе с графическим интерфейсом и получить Unity (или другой оконный менеджер) для запуска рабочего стола.
Ответы:
Вот цепочка событий:
Ядро запускает процесс инициализации как процесс номер 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
единицу обслуживания с течением времени.
Справочная страница:, 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')
Логи:
Журналы ошибок: ~/.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-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 считает это сессионной оболочкой.
Страница руководства: 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 для запуска оконного менеджера и любых панелей.
Страница руководства : 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.
ps aux
. Вы также можете проверить файл ~ / .dmrc для параметра Session cat ~/.dmrc
. Смотри выше. Session = ubuntu означает, что вы используете compiz и unity вместе (и это по умолчанию.
xsessions/ubuntu.desktop
в другой файл и надеялся получить такое же поведение, но безуспешно (более подробно в этом вопросе ). Есть ли что-то особенное в ubuntu.desktop
xsession по умолчанию ?