Display Manager Policy: различия между версиями
(Создана новая страница размером {{span|font-size: 180%|Полиси по упаковке Display Manager'ов}} {{DraftPolicy |responsible=Igor Vlasenko }} {{викиф...) |
(→Интеграция с системными темами branding-*: исправлена опечатка) |
||
(не показана 51 промежуточная версия 5 участников) | |||
Строка 1: | Строка 1: | ||
{{span|font-size: 180%|Полиси по упаковке Display | {{span|font-size: 180%|Полиси по упаковке Display Manager’ов}} | ||
{{ | {{Policy | ||
|since_branch=5.1 | |||
|responsible=Igor Vlasenko | |responsible=Igor Vlasenko | ||
}} | }} | ||
{{ | == История == | ||
* Версия 1.0 (с бранча 5.1) | |||
* Версия 2.0 (с бранча 10). Вынесена на [https://lists.altlinux.org/pipermail/devel/2021-October/215680.html обсуждение] (переезд на стандарт Freedesktop; поддержка {{path|/etc/X11/wms-methods.d}} оставлена для DM, не соответствующих стандарту Freedesktop). [https://bugzilla.altlinux.org/41271 metabug] | |||
== | == поддержка выбора оконного менеджера (WM)/рабочей среды (DE) == | ||
=== DM, соответствующие стандарту Freedesktop === | |||
Ничего менять не требуется. | |||
Используется стандартный механизм, когда оконные менеджеры регистрируются в системе через <tt>.desktop</tt>-файлы в каталоге <tt>/usr/share/xsessions/</tt>. | |||
Рекомендуется настроить DM так, что если существует файл {{path|$XDG_BASE_DIRS/xsessions/default.desktop}}, то он был установлен в меню DM как выбор по умолчанию. | |||
=== DM, не соответствующие стандарту Freedesktop === | |||
DM, не соответствующий стандарту Freedesktop, не умеет читать <tt>.desktop</tt>-файлы в каталоге <tt>/usr/share/xsessions</tt> напрямую и вынужден пользоваться сторонними программами. | |||
==== Обновление меню Display Manager’а ==== | |||
===== статическая конфигурация Display Manager ===== | |||
Если конфигурация Display Manager статическая, т.е. меню выбора WM/DE жестко прописано в его файлах конфигурации, | |||
то для обновления своего меню Display Manager ''должен'' предоставлять метод-файл {{path|/etc/X11/wms-methods.d/DMmethod}}. Метод-файл {{path|/etc/X11/wms-methods.d/DMmethod}} ''должен'' быть исполняемым. | |||
Этот файл будет запускаться служебными скриптами<ref>в настоящее время — {{cmd|/usr/sbin/update_wms}}</ref> каждый раз при установке, обновлении, удалении оконных менеджеров, а также при установке и обновлении самого Display Manager’а. | |||
Служебный скрипт вызывается из файл-триггера пакета {{pkg|xinitrc}} автоматически. | |||
<!--Display Manager ''должен'' иметь зависимость {{pkg|xinitrc}} >= 2.4.32.--> | |||
===== динамическая конфигурация Display Manager ===== | |||
Если конфигурация Display Manager динамическая, т.е. пункты меню выбора WM/DE генерируются при запуске, метод-файл {{path|/etc/X11/wms-methods.d/DMmethod}} предоставлять не нужно. | |||
==== Запуск оконного менеджера ==== | |||
Скрипты обновления меню для Display Manager'а может осуществлять парсинг файлов в <tt>/usr/share/xsessions/</tt> и запуск оконного менеджера самостоятельно. Однако поскольку DM не соответствует стандарту Freedesktop, то он скорее всего не производит всех необходимых действий, требуемых стандартом, к примеру, не выставляет переменную окружения {{cmd|$XDG_CURRENT_DESKTOP}}. Поэтому для получения списка оконных менеджеров и запуска оконного менеджера рекомендуется пользоваться командой {{cmd|runwm}}. | |||
==== Использование скриптов {{pkg|xinitrc}} и {{cmd|runwm}} для эмуляции стандарта Freedesktop ==== | |||
===== WMNAME для {{cmd|runwm}} ===== | |||
Согласно новому [[УпаковкаWM|полиси по упаковке оконных менеджеров]] (Window Managers), последние декларируют себя в системе с помощью файлов {{path|/usr/share/xsessions/<name>.desktop}}. | |||
Для каждого валидного и не скрытого (<tt>Hidden=true</tt>) desktop файла команда {{cmd|rundm--list}} выдаст уникальную не содержащую пробелов строку-название оконного менеджера <tt>WMNAME</tt>, которую можно отобразить в меню DE и при выборе пользователя передать в команду {{cmd|/etc/X11/Xsession}}. Команда {{cmd|/etc/X11/Xsession}} вызовет в итоге с этой строкой команду {{cmd|rundm}}, которая по ней найдет исходный desktop файл и запустит указанную там команду. | |||
Кроме <tt>WMNAME</tt>-ов, полученных из файлов {{path|/usr/share/xsessions/*.desktop}}, существует специальное <tt>WMNAME</tt> «default» для сессии по умолчанию. | |||
Реализация для <tt>WMNAME</tt> определена в {{prg|runwm}}. DM не должен работать с <tt>WMNAME</tt> иначе, чем через {{prg|runwm}}. | |||
Текущая реализация <tt>WMNAME</tt> (может изменяться без предупреждения): | |||
Берется первое слово из поля <tt>Name=</tt> desktop файла. Если оно содержит юникод или не уникально, то берется имя desktop файла без суффикса DNS и префикса .desktop. Иначе берется имя desktop файла. | |||
Пример: | |||
1) Пусть axewm имеет 1 desktop файл {{path|axewm-session.desktop}} с 'Name=AxeWM Session'. Тогда <tt>WMNAME</tt> будет 'AxeWM'. | |||
2) Пусть axewm имеет 2 desktop файла {{path|org.axewm.axewm-session.desktop}} с 'Name=AxeWM Session' и {{path|org.axewm.axewm-classic.desktop}} с 'Name=AxeWM Classic look&Feel'. Тогда <tt>WMNAME</tt> будут 'axewm-session' и 'axewm-classic'. | |||
===== получения списка оконных менеджеров командой {{cmd|runwm}} ===== | |||
Для получения списка всех WMNAME для установленных в системе оконных менеджеров можно воспользоваться командой {{cmd|runwm --list}}. | |||
Эту команду можно использовать в файле {{path|/etc/X11/wms-methods.d/DMmethod}} для обновления конфигурации DM, | |||
или напрямую вызвать из DM для получения меню выбора. | |||
===== Запуск WM скриптами xinitrc ===== | |||
Для запуска оконного менеджера Display Manager должен вызывать команду {{cmd|/etc/X11/Xsession}} с параметром | |||
<tt>WMNAME</tt>. | |||
== Интеграция с системными темами branding-* == | |||
=== фон по умолчанию === | |||
Рекомендуется выставлять в настройках Display Manager фон (wallpaper) по умолчанию как | |||
/usr/share/design/current/backgrounds/xdm.png | |||
Чтобы файл {{path|/usr/share/design/current/backgrounds/xdm.png}} | |||
существовал бы в файловой системе, надо добавить в зависимости | |||
Requires: design-graphics | |||
== Вопросы, оставшиеся не урегулированными в версии 2.0 == | |||
Планируется со временем собрать рекомендации по нижеизложенным вопросам и выпустить на их основе проект этого полиси версии 2.1. | |||
На момент версии 2.0 этот раздел является заглушкой. | |||
=== pam === | |||
Планируется провести стандартизацию конфигурации pam для DM на уровне дистрибутива. | |||
Для этого собрать пакет с набором стандартных конфигураций pam для dm | |||
dm-systemd | |||
dm-systemd-greeter | |||
dm-systemd-autologin | |||
dm-nosystemd | |||
dm-nosystemd-autologin | |||
и перевести DM на его использование | |||
Известные исключения: gdm (собственный модуль pam). | |||
=== пользовательские сессии d-bus === | |||
Не путаем пользовательские сессии dbus с системными. Практически всем современным DM, включая XDM, для работы требуется системная сессия d-bus. | |||
Cистемная сессия d-bus одна, пользовательские сессии запускаются для каждого пользователя. | |||
Сейчас по умолчанию управлением пользовательскими сессиями dbus занимается systemd. | |||
Если DM поддерживает pam_systemd (выполняет его корректную настройку через переменные окружения) и DM по возможности использует pam_systemd | |||
(-pam_systemd прописан в pam-файле DM) то поддержка пользовательскими сессиями dbus выполняется прозрачно для DM: | |||
pam_systemd прозрачно для DM связывается с logind с сообщением о новой сессии, systemd запускает при необходимости пользовательскую сессию, | |||
pam_systemd устанавливает нужный DBUS_SESSION_BUS_ADDRESS в переменных окружения. | |||
Для систем без systemd, для альтернатив systemd, на случай других неожиданностей для <xsession> есть подстраховка в виде {{cmd|/etc/X11/xinit.d/00-start-message-bus.sh}}, которая вызывается оберткой {{cmd|/etc/X11/Xsession}}. Для wayland сессий планируется добавить подстраховку в wayland-session. | |||
Поэтому корректный запуск при необходимости пользовательской сессии dbus работает для всех DM, есть systemd или нет, | |||
при условии, если они используют {{prg|/etc/X11/Xsession}} для запуска <xsession>. | |||
<!-- | |||
предлагается также внести эту функциональность в runwm. Если нет DBUS_SESSION_BUS_ADDRESS - | |||
попробовать по системной шине dbus узнать у logind, есть ли уже пользовательская сессия; запустить при необходимости. | |||
--> | |||
см. подробнее | |||
* [https://www.freedesktop.org/wiki/Software/dbus/ https://www.freedesktop.org/wiki/Software/dbus/] | |||
* [https://en.wikipedia.org/wiki/D-Bus https://en.wikipedia.org/wiki/D-Bus] | |||
* [https://dbus.freedesktop.org/doc/dbus-run-session.1.html https://dbus.freedesktop.org/doc/dbus-run-session.1.html] | |||
* [https://dbus.freedesktop.org/doc/dbus-tutorial.html https://dbus.freedesktop.org/doc/dbus-tutorial.html] | |||
* [https://wiki.archlinux.org/title/D-Bus https://wiki.archlinux.org/title/D-Bus] | |||
* [https://archlinux.org/news/d-bus-now-launches-user-buses/ https://archlinux.org/news/d-bus-now-launches-user-buses/] | |||
=== Wayland === | |||
==== предложение к 2.1: ==== | |||
Requires: dm-common-wayland | |||
Указать в качестве скрипта-обертки для запуска wayland-sessions | |||
/etc/wayland-sessions/wrapper | |||
==== проблемы к обсуждению ==== | |||
Не наработана системная обвязка для сессий Wayland. | |||
Текст внизу предварительный и нуждается в обсуждении и уточнении. | |||
Отличия классической сессии X от сессии Wayland. | |||
Сводная таблица отличий. | |||
{| class="standard" | |||
! | |||
! сессия X | |||
! сессия Wayland | |||
|- | |||
| сервер | |||
| требуется уже запущенный X сервер. | |||
| не требуется. Приложение запускает его самостоятельно | |||
|- | |||
| ограничения | |||
| X приложение. | |||
| нет. Что угодно. wayland compositor, fb app, console app,<br>X app (должна сама запускать себе X) | |||
|- | |||
| запуск | |||
| нет требований. Сойдет fork+exec в текущем VT | |||
| аналог openvt -s -- <wsession script> | |||
|- | |||
| обертка D-BUS | |||
| dbus-launch --exit-with-x11 <xsession-script> | |||
| dbus-run-session <wsession script> | |||
|} | |||
Следствие. | |||
сессии Wayland в принципе не могут использовать старую схему с запуском /etc/X11/Xsession как посредника. | |||
Хотя бы потому, что /etc/X11/Xsession должен быть запущен в сеансе X-cервера, вызывает утилиты X и без X-cервера | |||
вылетит с ошибкой. Также почти все, что делает /etc/X11/Xsession, бессмысленно вне X. | |||
Исключение - | |||
/etc/X11/profile.d | |||
но там у нас по сути нет ничего конкретно для X. Можно ввести какой-нибудь | |||
/etc/user-session/profile.d | |||
и перенести бывшее в {{path|/etc/X11/profile.d}} туда ({{cmd|ssh-agent.sh}} {{cmd|xdg-user-dirs.sh}} ...). | |||
В итоге гипотетический помощник ALT для сессии Wayland должен вызвать {{path|/etc/user-session/profile.d}} | |||
и проконтролировать наличие пользовательской сессии D-BUS, обернув при необходимости вызов сессии Wayland в {{cmd|dbus-run-session}}. | |||
Это может быть не только скрипт, но и, к примеру, специально написанный для ALT pam модуль. | |||
== Примечания == | |||
<references/> | |||
[[Категория:Packaging]] |
Текущая версия от 19:40, 23 августа 2023
Полиси по упаковке Display Manager’ов
История
- Версия 1.0 (с бранча 5.1)
- Версия 2.0 (с бранча 10). Вынесена на обсуждение (переезд на стандарт Freedesktop; поддержка /etc/X11/wms-methods.d оставлена для DM, не соответствующих стандарту Freedesktop). metabug
поддержка выбора оконного менеджера (WM)/рабочей среды (DE)
DM, соответствующие стандарту Freedesktop
Ничего менять не требуется. Используется стандартный механизм, когда оконные менеджеры регистрируются в системе через .desktop-файлы в каталоге /usr/share/xsessions/.
Рекомендуется настроить DM так, что если существует файл $XDG_BASE_DIRS/xsessions/default.desktop, то он был установлен в меню DM как выбор по умолчанию.
DM, не соответствующие стандарту Freedesktop
DM, не соответствующий стандарту Freedesktop, не умеет читать .desktop-файлы в каталоге /usr/share/xsessions напрямую и вынужден пользоваться сторонними программами.
Обновление меню Display Manager’а
статическая конфигурация Display Manager
Если конфигурация Display Manager статическая, т.е. меню выбора WM/DE жестко прописано в его файлах конфигурации, то для обновления своего меню Display Manager должен предоставлять метод-файл /etc/X11/wms-methods.d/DMmethod. Метод-файл /etc/X11/wms-methods.d/DMmethod должен быть исполняемым.
Этот файл будет запускаться служебными скриптами[1] каждый раз при установке, обновлении, удалении оконных менеджеров, а также при установке и обновлении самого Display Manager’а.
Служебный скрипт вызывается из файл-триггера пакета xinitrc автоматически.
динамическая конфигурация Display Manager
Если конфигурация Display Manager динамическая, т.е. пункты меню выбора WM/DE генерируются при запуске, метод-файл /etc/X11/wms-methods.d/DMmethod предоставлять не нужно.
Запуск оконного менеджера
Скрипты обновления меню для Display Manager'а может осуществлять парсинг файлов в /usr/share/xsessions/ и запуск оконного менеджера самостоятельно. Однако поскольку DM не соответствует стандарту Freedesktop, то он скорее всего не производит всех необходимых действий, требуемых стандартом, к примеру, не выставляет переменную окружения $XDG_CURRENT_DESKTOP. Поэтому для получения списка оконных менеджеров и запуска оконного менеджера рекомендуется пользоваться командой runwm.
Использование скриптов xinitrc и runwm для эмуляции стандарта Freedesktop
WMNAME для runwm
Согласно новому полиси по упаковке оконных менеджеров (Window Managers), последние декларируют себя в системе с помощью файлов /usr/share/xsessions/<name>.desktop.
Для каждого валидного и не скрытого (Hidden=true) desktop файла команда rundm--list выдаст уникальную не содержащую пробелов строку-название оконного менеджера WMNAME, которую можно отобразить в меню DE и при выборе пользователя передать в команду /etc/X11/Xsession. Команда /etc/X11/Xsession вызовет в итоге с этой строкой команду rundm, которая по ней найдет исходный desktop файл и запустит указанную там команду.
Кроме WMNAME-ов, полученных из файлов /usr/share/xsessions/*.desktop, существует специальное WMNAME «default» для сессии по умолчанию.
Реализация для WMNAME определена в runwm. DM не должен работать с WMNAME иначе, чем через runwm.
Текущая реализация WMNAME (может изменяться без предупреждения): Берется первое слово из поля Name= desktop файла. Если оно содержит юникод или не уникально, то берется имя desktop файла без суффикса DNS и префикса .desktop. Иначе берется имя desktop файла. Пример:
1) Пусть axewm имеет 1 desktop файл axewm-session.desktop с 'Name=AxeWM Session'. Тогда WMNAME будет 'AxeWM'.
2) Пусть axewm имеет 2 desktop файла org.axewm.axewm-session.desktop с 'Name=AxeWM Session' и org.axewm.axewm-classic.desktop с 'Name=AxeWM Classic look&Feel'. Тогда WMNAME будут 'axewm-session' и 'axewm-classic'.
получения списка оконных менеджеров командой runwm
Для получения списка всех WMNAME для установленных в системе оконных менеджеров можно воспользоваться командой runwm --list. Эту команду можно использовать в файле /etc/X11/wms-methods.d/DMmethod для обновления конфигурации DM, или напрямую вызвать из DM для получения меню выбора.
Запуск WM скриптами xinitrc
Для запуска оконного менеджера Display Manager должен вызывать команду /etc/X11/Xsession с параметром WMNAME.
Интеграция с системными темами branding-*
фон по умолчанию
Рекомендуется выставлять в настройках Display Manager фон (wallpaper) по умолчанию как
/usr/share/design/current/backgrounds/xdm.png
Чтобы файл /usr/share/design/current/backgrounds/xdm.png существовал бы в файловой системе, надо добавить в зависимости
Requires: design-graphics
Вопросы, оставшиеся не урегулированными в версии 2.0
Планируется со временем собрать рекомендации по нижеизложенным вопросам и выпустить на их основе проект этого полиси версии 2.1.
На момент версии 2.0 этот раздел является заглушкой.
pam
Планируется провести стандартизацию конфигурации pam для DM на уровне дистрибутива. Для этого собрать пакет с набором стандартных конфигураций pam для dm
dm-systemd dm-systemd-greeter dm-systemd-autologin dm-nosystemd dm-nosystemd-autologin
и перевести DM на его использование
Известные исключения: gdm (собственный модуль pam).
пользовательские сессии d-bus
Не путаем пользовательские сессии dbus с системными. Практически всем современным DM, включая XDM, для работы требуется системная сессия d-bus. Cистемная сессия d-bus одна, пользовательские сессии запускаются для каждого пользователя. Сейчас по умолчанию управлением пользовательскими сессиями dbus занимается systemd. Если DM поддерживает pam_systemd (выполняет его корректную настройку через переменные окружения) и DM по возможности использует pam_systemd (-pam_systemd прописан в pam-файле DM) то поддержка пользовательскими сессиями dbus выполняется прозрачно для DM: pam_systemd прозрачно для DM связывается с logind с сообщением о новой сессии, systemd запускает при необходимости пользовательскую сессию, pam_systemd устанавливает нужный DBUS_SESSION_BUS_ADDRESS в переменных окружения.
Для систем без systemd, для альтернатив systemd, на случай других неожиданностей для <xsession> есть подстраховка в виде /etc/X11/xinit.d/00-start-message-bus.sh, которая вызывается оберткой /etc/X11/Xsession. Для wayland сессий планируется добавить подстраховку в wayland-session.
Поэтому корректный запуск при необходимости пользовательской сессии dbus работает для всех DM, есть systemd или нет, при условии, если они используют /etc/X11/Xsession для запуска <xsession>.
см. подробнее
- https://www.freedesktop.org/wiki/Software/dbus/
- https://en.wikipedia.org/wiki/D-Bus
- https://dbus.freedesktop.org/doc/dbus-run-session.1.html
- https://dbus.freedesktop.org/doc/dbus-tutorial.html
- https://wiki.archlinux.org/title/D-Bus
- https://archlinux.org/news/d-bus-now-launches-user-buses/
Wayland
предложение к 2.1:
Requires: dm-common-wayland
Указать в качестве скрипта-обертки для запуска wayland-sessions
/etc/wayland-sessions/wrapper
проблемы к обсуждению
Не наработана системная обвязка для сессий Wayland.
Текст внизу предварительный и нуждается в обсуждении и уточнении.
Отличия классической сессии X от сессии Wayland.
Сводная таблица отличий.
сессия X | сессия Wayland | |
---|---|---|
сервер | требуется уже запущенный X сервер. | не требуется. Приложение запускает его самостоятельно |
ограничения | X приложение. | нет. Что угодно. wayland compositor, fb app, console app, X app (должна сама запускать себе X) |
запуск | нет требований. Сойдет fork+exec в текущем VT | аналог openvt -s -- <wsession script> |
обертка D-BUS | dbus-launch --exit-with-x11 <xsession-script> | dbus-run-session <wsession script> |
Следствие. сессии Wayland в принципе не могут использовать старую схему с запуском /etc/X11/Xsession как посредника. Хотя бы потому, что /etc/X11/Xsession должен быть запущен в сеансе X-cервера, вызывает утилиты X и без X-cервера вылетит с ошибкой. Также почти все, что делает /etc/X11/Xsession, бессмысленно вне X. Исключение -
/etc/X11/profile.d
но там у нас по сути нет ничего конкретно для X. Можно ввести какой-нибудь
/etc/user-session/profile.d
и перенести бывшее в /etc/X11/profile.d туда (ssh-agent.sh xdg-user-dirs.sh ...).
В итоге гипотетический помощник ALT для сессии Wayland должен вызвать /etc/user-session/profile.d и проконтролировать наличие пользовательской сессии D-BUS, обернув при необходимости вызов сессии Wayland в dbus-run-session. Это может быть не только скрипт, но и, к примеру, специально написанный для ALT pam модуль.
Примечания
- ↑ в настоящее время — /usr/sbin/update_wms