Display Manager Policy: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показаны 33 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{span|font-size: 180%|}}
{{span|font-size: 180%|Полиси по упаковке Display Manager’ов}}
{{Policy
{{Policy
|since_branch=5.1
|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]


== Полиси по упаковке Display Manager’ов (устарела) ==
== поддержка выбора оконного менеджера (WM)/рабочей среды (DE) ==


Полиси устарела. Сейчас оконные менеджеры регистрируются в системе через <tt>.desktop</tt>-файлы в каталоге <tt>/usr/share/xsessions/</tt>.
=== DM, соответствующие стандарту Freedesktop ===


=== поддержка /etc/X11/wmsession.d ===
Ничего менять не требуется.
Используется стандартный механизм, когда оконные менеджеры регистрируются в системе через <tt>.desktop</tt>-файлы в каталоге <tt>/usr/share/xsessions/</tt>.


Согласно [[УпаковкаWM|полиси по упаковке оконных менеджеров]] (Window Managers), последние декларируют себя в системе с помощью файлов {{path|/etc/X11/wmsession.d/NNname}}.
Рекомендуется настроить DM так, что если существует файл {{path|$XDG_BASE_DIRS/xsessions/default.desktop}}, то он был установлен в меню DM как выбор по умолчанию.
В поле <tt>NAME=</tt> этого файла указывается уникальная строка-название оконного менеджера. Далее эту строку будем называть <tt>WMNAME</tt>.


Кроме <tt>WMNAME</tt>-ов, полученных из файлов {{path|/etc/X11/wmsession.d/NNname}}, существует специальное <tt>WMNAME</tt> «default» для сессии по умолчанию.
=== DM, не соответствующие стандарту Freedesktop ===


==== Запуск WM ====
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}} с параметром
Для запуска оконного менеджера Display Manager должен вызывать команду {{cmd|/etc/X11/Xsession}} с параметром
<tt>WMNAME</tt>.
<tt>WMNAME</tt>.


==== Обновление меню Display Manager’а ====
== Интеграция с системными темами 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, есть ли уже пользовательская сессия; запустить при необходимости.
-->


Для обновления своего меню Display Manager ''должен'' предоставлять метод-файл {{path|/etc/X11/wms-methods.d/DMmethod}}.
см. подробнее
* [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/]


Этот файл будет запускаться служебными скриптами<ref>в настоящее время — {{cmd|/usr/sbin/update_wms}}</ref> каждый раз при установке, обновлении, удалении оконных менеджеров, а также при установке и обновлении  самого Display Manager’а.
=== Wayland ===


Служебный скрипт вызывается из файл-триггера пакета {{pkg|xinitrc}} автоматически, поэтому использовать устаревшие макросы <tt>%update_wms</tt>/<tt>%clean_wms</tt> ''не нужно''.
==== предложение к 2.1: ====


Метод-файл {{path|/etc/X11/wms-methods.d/DMmethod}} ''должен'' быть исполняемым.
Requires: dm-common-wayland
Указать в качестве скрипта-обертки для запуска wayland-sessions
/etc/wayland-sessions/wrapper


<!--Display Manager ''должен'' иметь зависимость {{pkg|xinitrc}} >= 2.4.32.-->
==== проблемы к обсуждению ====


Известное исключение:
Не наработана системная обвязка для сессий Wayland.


Sergey V Turchin> kdm из kde3/4: они пользуются сами `runwm --list`
Текст внизу предварительный и нуждается в обсуждении и уточнении.


==== Применение ====
Отличия классической сессии X от сессии Wayland.


В файле {{path|/etc/X11/wms-methods.d/DMmethod}} для получения списка всех WMNAME для установленных в системе оконных менеджеров можно воспользоваться командой {{cmd|runwm --list}}. Можно также распарсить файлы {{path|/etc/X11/wmsession.d/NNname}} самостоятельно, не забыв добавить «default» для сессии по умолчанию.
Сводная таблица отличий.
{| 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>
|}


== pam ==
Следствие.
сессии 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}} ...).


Рекомендации по настройке pam
В итоге гипотетический помощник ALT для сессии Wayland должен вызвать {{path|/etc/user-session/profile.d}}
???
и проконтролировать наличие пользовательской сессии D-BUS, обернув при необходимости вызов сессии Wayland в {{cmd|dbus-run-session}}.
Это может быть не только скрипт, но и, к примеру, специально написанный для ALT pam модуль.


== Примечания ==
== Примечания ==

Текущая версия от 19:40, 23 августа 2023

Полиси по упаковке Display Manager’ов

Stamp90cw.png
Действующая политика Sisyphus

Политика действует, начиная со стабильного бранча 5.1 и выше.

Ответственный за проведение политики в жизнь — Igor Vlasenko.


История

  • Версия 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>.


см. подробнее

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 модуль.

Примечания

  1. в настоящее время — /usr/sbin/update_wms