Упаковка WM

Материал из ALT Linux Wiki
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Упаковка оконных менеджеров (WM), cред рабочего стола (DE), других графических сеансов работы.

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

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

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


42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.


История[править]

  • Версия 1.0 (с бранча 5.0)
  • Версия 1.1 (добавлен пункт о backgrounds)
  • Версия 2.0 (с бранча 10). (добавлена поддержка /usr/share/xsessions; поддержка /etc/X11/wmsession.d оставлена на переходный период). metabug

Интеграция с менеджером сессий (*dm)[править]

Для интеграции с менеджерами сессий оконный менеджер должен иметь <name>.desktop файл в /usr/share/xsessions для поддержки сессий XDG (Freedesktop). Подробнее см. разделы ниже.

На переходный период (до выхода нового бранча, в котором все менеджеры сессий (*dm) поддерживают только сессии XDG) поддержку генератора сессий из /etc/X11/wmsession.d рекомендуется оставить в имеющихся пакетах. В новых пакетах ее добавлять не обязательно.

Поддержка сессий XDG (Freedesktop)[править]

Для интеграции с менеджерами сессий, соответствующих стандарту Freedesktop, оконный менеджер должен иметь <session-name>.desktop файл в /usr/share/xsessions для поддержки сессий XDG (Freedesktop).

Подробнее см. Упаковка_WM#Требования_к_desktop_файлу


Рекомендуется установить пиктограмму (набор пиктограмм) для <session-name>.desktop файла и указывать в <session-name>.desktop файле имя этой пиктограммы (набора пиктограмм).

Подробнее см. Упаковка_WM#Требования_к_пиктограммам

Требования к desktop файлу[править]

<name>.desktop файл должен в основном соответствовать требованиям Desktop Entry Specification, в частности, иметь заголовок

 [Desktop Entry]
 Type=Application

Должны быть указаны поля

Name=имя
 Название менеджера окон
Icon=имя
 Имя иконке, используемой для отображения этого WM
Comment=описание
 Небольшое описание этого оконного менеджера, которое поможет сомневающемуся пользователю
Exec=путь
 Путь к исполняемому файлу, вызываемому менеджером сессий

В поле

TryExec=/path/to/executive

можно указать исполняемый файл, при отсутствии которого, или при отсутствии у этого файла прав на исполнение, desktop файл игнорируется. Это полезно, если исполняемый файл и desktop файл находятся в разных пакетах rpm.

Замечания по типам desktop файлов[править]

По своей сути, desktop файлы для xsessions являются отдельным подтипом desktop файлов, поэтому для них было бы логично ввести явный отдельный тип наподобие Type=XSession. Однако уже исторически сложилась практика указывать для них Type=Application.

Таким образом, desktop файлы с Type=Application можно разделить на 3 подтипа:

  • desktop файлы для меню WM/DE из /usr/share/applications.
  • desktop файлы автозапуска приложений при старте WM/DE из /etc/xdg/autostart.
  • desktop файлы для выбора xsession /usr/share/xsessions.

Описание в Desktop Entry Specification и программа desktop-file-validate в основном ориентированы на первый тип – desktop файлы для меню.

Отличия desktop файла для xsessions[править]

Основные отличия для desktop файлов xsessions :

  • ряд полей, таких, как поле Categories= указывать не нужно.
  • desktop файл может содержать дополнительную секцию [Window Manager].
  • Есть разные необязательные поля для DM, к примеру X-LightDM-DesktopName=.
  • существует необязательное поле DesktopNames=<NAME>; или, к примеру, DesktopNames=NAME;KDE;.

Поле DesktopNames= desktop файла[править]

В соответствии с Desktop Entry Specification, Freedesktop совместимые Display Managers берут из поля DesktopNames= значение для переменной окружения $XDG_CURRENT_DESKTOP. Пример: из

DesktopNames=NAME;KDE;

будет выставлено значение переменной

XDG_CURRENT_DESKTOP=NAME:KDE

Если WM/DE поддерживает полноценное меню стандарта Freedesktop, то можно добавлять в desktop файл поле DesktopNames=<name>;

Для ряда современных DE их DesktopNames зарезервированы в стандарте: onlyshowin-registry и, как правило, уже указаны в их .desktop файле.

Значения из DesktopNames в меню Freedesktop используются для полей OnlyShowIn=, NotShowIn=. В частности, в DesktopNames= могут использоваться несколько имен, что позволит Freedesktop совместимым меню приложений показывать в своем меню приложения с OnlyShowIn= для другого DE.

Например, в /usr/share/xsessions/gnome-classic.desktop DesktopNames=GNOME-Classic;GNOME; используется, чтобы приложения с OnlyShowIn=GNOME показывались и в сеансе GNOME-Classic.

Поэтому для WM и DE, которые используют меню стандарта freedesktop (встроенное, или через стороннее приложение) и не зарезервированы в стандарте onlyshowin-registry рекомендуется использовать в DesktopNames= свое ИМЯ В ВЕРХНЕМ РЕГИСТРЕ. Пример: Name=SomeWM но DesktopNames=SOMEWM;.

Если есть желание видеть в меню скрытые приложения (с OnlyShowIn=) других DE, можно добавить имена этих DE.

Для WM и DE, которые используют собственное legacy меню, можно указывать DesktopNames=Old; или вообще ничего не указывать.

Также переменная XDG_CURRENT_DESKTOP используется некоторыми приложениями (к примеру, firefox).

Если приложения в самом WM/DE как-то завязаны на значение переменной окружения $XDG_CURRENT_DESKTOP, то в таком случае лучше явно дополнительно установить значение XDG_CURRENT_DESKTOP в скрипте запуска WM/DE, поскольку в настоящее время далеко не все DM Freedesktop совместимы и умеют устанавливать XDG_CURRENT_DESKTOP (WDM,SLiM,..).

Внимание: поддержка поля DesktopNames появилась только в desktop-file-utils ≥ 0.26-alt2. Используйте desktop-file-validate для desktop файлов с полем DesktopNames с осторожностью.

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

Требования к пиктограммам[править]

Пиктограмма(ы) WM должна быть проинсталлирована в /usr/share/icons/hicolor/*/apps/* и иметь то же имя, что и пиктограмма, указанная в поле Icon=. Должна быть как минимум одна пиктограмма png, xpm или svg. Желателен набор пиктограм как для больших, так и для малых размеров. К примеру, lightdm-gtk-greeter отображает пиктограммы в размере 16x16, для wm-select удобнее 64x64, 48x48 или svg.

Соответствующие спецификации:

Пример для spec файла[править]

Таким образом, для поддержки оконным менеджером сессий XDG, мы должны добавить в наш spec-файл следующие строчки (пример для Fluxbox):

%install
...
mkdir -p %buildroot%_datadir/xsessions/
cat >"%buildroot%_datadir/xsessions/%name.desktop" <<__EOF__
[Desktop Entry]
Name=Fluxbox
Comment=Very small and fast window manger
Comment[ru]=Маленький и быстрый оконный менеджер
Icon=%name
Exec=start%name
Type=Application
DesktopNames=Fluxbox;
Keywords=launch;Fluxbox;desktop;session;
__EOF__
...
%files
%_datadir/xsessions/%name.desktop

Этот файл необязательно создавать в spec-файле. Можно создать его отдельно и добавить в спек только следующие строчки:

SourceN: %name.desktop
...
%install
install -pD -m 644 %SOURCEN %buildroot%_datadir/xsessions/%name.desktop
...
%files
%_datadir/xsessions/%name.desktop

Поддержка генератора сессий из /etc/X11/wmsession.d[править]

Современные менеджеры сессий переходят на стандарты Freedesktop. Планируется, что в следующем стабильном бранче (p11?) поддержка /etc/X11/wmsession.d/ устареет.

Ранее каждый менеджер сессий имел свой конфигурационный файл, в котором были перечислены все установленные оконные менеджеры. При запуске он читает их из своего конфигурационного файла и отображает пользователю. Для того, чтобы облегчить труд мейнтейнеров оконных менеджеров, в ALT Linux добавление/удаление записи об оконном менеджере в конфигурационные файлы менеджеров сессий (к примеру, WDM) происходит автоматически, при наличии в пакете оконного менеджера файла в директории /etc/X11/wmsession.d.

Этот файл должен называться /etc/X11/wmsession.d/NNname, где 'NN' — двухзначный приоритет оконного менеджера (числа от 0 до 9 должны предваряться нулём), 'name' — название оконного менеджера. Пример: /etc/X11/wmsession.d/04IceWM

Формат файла с информацией о WM следующий:

NAME=имя
  Название менеджера окон
ICON=абсолютный путь с расширением
  Путь к иконке, используемой для отображения этого WM
DESC=описание
  Небольшое описание этого оконного менеджера, которое поможет сомневающемуся пользователю
EXEC=путь
  Путь к исполняемому файлу, вызываемому менеджером сессий
SCRIPT:
  exec путь
  Этот параметр нужен для совместимости

Пиктограмма(ы) WM должна быть проинсталлирована в соответствии с IconPathsPolicy. Должна быть как минимум одна пиктограмма xpm, png, или svg. рекомендуется 64x64 в /usr/share/icons/hicolor/64x64/apps (обсуждение). Допускается 48x48 в /usr/share/icons/hicolor/48x48/apps .

В поле ICON= должен быть указан полный путь к этой пиктограмме с расширением. Пиктограммы других размеров и типов (png и svg) можно устанавливать как дополнительные, т.е. расположенные согласно IconPathsPolicy и имеющие то же имя, что и пиктограмма, указанная в поле ICON=.

Таким образом, чтобы информация о новом оконном менеджере стала известна скрипту update_wms, мы должны добавить в наш spec-файл следующие строчки (пример для Fluxbox):

%install
  ...
  mkdir -p %buildroot%_sysconfdir/X11/wmsession.d
  cat >"%buildroot%_sysconfdir/X11/wmsession.d/07%name" <<__EOF__
  NAME=Fluxbox
  ICON=%iconsdir/hicolor/64x64/apps/%name.xpm
  DESC=Light and fast window manager
  EXEC=%bindir/%name
  SCRIPT:
  exec %bindir/%name
  __EOF__
  ...
  %files
  %config %_sysconfdir/X11/wmsession.d/*

Этот файл необязательно создавать в spec-файле. Можно создать его отдельно и добавить в спек только следующие строчки:

SourceN: %name.wmsession
...
%install
install -pD -m 644 %SOURCEN %buildroot%_sysconfdir/X11/wmsession.d/07%name
...
%files
%config %_sysconfdir/X11/wmsession.d/*

Регистрация файлов в X11/wmsession.d/ осуществляется программой /usr/sbin/update_wms из пакета xinitrc. Это делается автоматически, с помощью filetrigger-а в пакете xinitrc. Никаких специальных действий для этого проводить не нужно.

Ранее, до 4.1/branch включительно, для этой цели использовались макросы %update_wms/%clean_wms в %post/postun. Эти макросы устарели, и их необходимо удалять, так как удаление мусора из %post/postun несколько повышает скорость установки дистрибутива в целом.

Упаковка Freedesktop-совместимого WM[править]

Зависимости на общие утилиты freedesktop[править]

Согласно стандарту freedesktop.org, Freedesktop-совместимые WM должны уметь пользоваться общесистемными БД, создаваемые утилитами

  • update-mime-database (пакет shared-mime-info),
  • update-desktop-database (пакет desktop-file-utils).

С другой стороны, пакеты с WM-специфическими ресурсами не должны иметь зависимостей на desktop-file-utils / shared-mime-info. (Обоснование: пакеты (тот же mutt), работающие на без-X-овом сервере, могут иметь .desktop файлы, при этом на без-X-овом сервере зависимость на desktop-file-utils явно избыточна.)

Однако зависимости на shared-mime-info/desktop-file-utils должны где-то оставаться, иначе эти утилиты вообще ставиться не будут.

Эти списки зависимостей потенциально открыты: по мере развития стандарта в нем могут добавиться новые приложения, новые версии WM начнут поддерживать эти приложения и т.д. Для удобства сопровождения списки зависимостей для Freedesktop-совместимых WM оформлены в пакет wm-common-freedesktop.

Поэтому WM (оконные менеджеры) и DE, удовлетворяющие стандарту freedesktop, должны иметь либо

Requires: wm-common-freedesktop

(вытягивает по зависимостям требуемый стандартом список утилит) либо

Requires: shared-mime-info desktop-file-utils ... (явное перечисление списка утилит)

Рекомендуется использовать wm-common-freedesktop, чтобы случайно не пропустить в будущем нужную утилиту.

Упаковка WM, не удовлетворяющего стандарту Freedesktop[править]

Масштабирование пиктограмм[править]

Если WM не поддерживает масштабирование пиктограмм (древние ископаемые WM), то рекомендуется добавить в зависимости

Requires: wm-common-pixmap-scaler

Этот пакет автоматически генерирует из пиктограмм большого размера пиктограммы уменьшенного размера в %_miconsdir/ (16x16) и %_niconsdir/ (32x32).

Генерация меню[править]

Если WM не поддерживает напрямую freedesktop menu, то WM должен предоставить в /etc/menu-methods/<WMname> метод для генерации своего меню из общесистемного меню.

Примеры можно посмотреть в Сизифе и в руководстве к пакету menu.

Зависимость на пакет menu добавлять не обязательно, она будет получена автоматически по наличию файла /etc/menu-methods/<WMname>.

Порядок поиска пиктограмм для меню[править]

Расположение пиктограмм в ALT Linux, согласно IconPathsPolicy, совместимо со стандартом freedesktop.org.

Если WM является Freedesktop-совместимым, то он уже настроен.

Иначе правильно настроенный оконный менеджер должен искать пиктограммы в следующем порядке:

  • если он поддерживает SVG, то сначала в /usr/share/icons/<theme>/scalable/apps и в /usr/share/icons/hicolor/scalable/apps,
  • если он поддерживает темы, то затем в /usr/share/icons/<theme>/<SIZExSIZE>/apps.
  • затем в любом случае смотрит /usr/share/icons/hicolor/<SIZExSIZE>/apps, где по выбору <SIZExSIZE> это одно из 16х16, 32х32 и 48х48 по выбору.
  • если оконный менеджер поддерживает масштабирование иконок, то затем смотрит в /usr/share/icons/<theme>/48х48/apps, и в /usr/share/icons/hicolor/48х48/apps (минимально гарантированная пиктограмма).
  • если оконный менеджер поддерживает масштабирование иконок, то дополнительно смотрим в /usr/share/icons/ и в /usr/share/pixmaps для совместимости с пакетами, которые бросают пиктограммы куда попало.
    /usr/share/icons - это старое стандартное положение иконок в ALT, /usr/share/pixmaps - чисто GNOME. Добавить можно обе.
Замечание:

Указанный алгоритм настройки оконных менеджеров, не поддерживающих freedesktop menu, упрощён для условий ALT Linux. Подробный алгоритм выписан на standards.freedesktop.org.

Где прописывать пути поиска пиктограмм[править]

Для оконных менеджеров, не поддерживающих напрямую freedesktop menu, есть 2 возможности: список путей в оконном менеджере (если в нем есть такая возможность) и список путей в соответствующем методе для menu-methods.

Разберём это на примере IceWM. IceWM поддерживает список путей в оконном менеджере, поэтому пути прописываем в параметре IconPath конфигурации.

IceWM не поддерживает напрямую freedesktop menu, но функцию findicon для menu-methods можно взять попроще:

function findicon($filename, $defaulticon)= \
    ifeqelse($filename, , $defaulticon, replace(replace($filename, ".xpm",), ".png",))

Если бы IceWM не поддерживал список путей, то их пришлось бы вбивать в findicon наподобие следующего (размер пиктограмм 16x16):

function findicon($filename, $defaulticon)= \
    ifeqelse($filename, , $defaulticon, \
    ifelsefile($filename, $filename, \
    ifelsefile(«/usr/share/icons/hicolor/16x16/apps/» $filename, «/usr/share/icons/default.kde/16x16/apps/» $filename, \
    ifelsefile(«/usr/share/icons/hicolor/48x48/apps/» $filename, «/usr/share/icons/default.kde/32x32/apps/» $filename, \
    ifelsefile(«/usr/share/icons/hicolor/32x32/apps/» $filename, «/usr/share/icons/hicolor/16x16/apps/» $filename, \
    ifelsefile(«/usr/share/icons/slick/16x16/apps/» $filename,
    ifelsefile(«/usr/share/pixmaps/» $filename, «/usr/share/pixmaps/» $filename, \
$defaulticon)))))))\
 В качестве ALT Linux специфики в menu есть функция locate_icon( $size , $icon_name ) ,
 возвращающая /полный/путь/к/{16,32,48}/файлу/$icon_name.{png,xpm}

Интеграция с системными темами branding-*[править]

background по умолчанию[править]

В качестве фонового изображения (wallpaper/background) рекомендуется использовать

/usr/share/design/current/backgrounds/default.png

который выставлять

  • в настройках рабочего стола (если он есть)
  • или в настройках фонового изображения оконного менеджера (если они есть)
  • или явно загружать при старте /usr/share/design/current/backgrounds/default.png в корневое окно сторонней утилитой.

пример:

display -window root -geometry '-0-0' -resize `xdpyinfo  | grep -oP 'dimensions:\s+\K\S+'` /usr/share/design/current/backgrounds/default.png

Чтобы файл /usr/share/design/current/backgrounds/default.png существовал бы в файловой системе, надо добавить в зависимости

Requires: design-graphics