Упаковка WM
Упаковка оконных менеджеров (WM)
Версия 1.1 (добавлен пункт о backgrounds)
Содержание
Интеграция с менеджером сессий (*dm)[править]
Каждый менеджер сессий имеет свой конфигурационный файл, в котором перечислены все установленные оконные менеджеры. При запуске он читает их из своего конфигурационного файла и отображает пользователю. Для того, чтобы облегчить труд мейнтейнеров оконных менеджеров, в ALT Linux добавление/удаление записи об оконном менеджере в конфигурационные файлы менеджеров сессий (поддерживаются KDM, GDM и 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. (В частности, поскольку, кроме wm-select, планируется поддержка этих пиктограмм в GDM, см. #19288). Должна быть как минимум одна пиктограмма xpm, рекомендуется 64x64 в /usr/share/icons/hicolor/64x64/apps (обсуждение). Допускается, но не рекомендуется 48x48 в /usr/share/icons/hicolor/48x48/apps:
LDV> В меню wm-select будет некрасиво, если среди нескольких картинок 64x64 появится одна 48x48.
В поле ICON= должен быть указан полный путь к этой пиктограмме xpm с расширением. Выбор xpm как типа пиктограммы связан с тем, что программа wm-select пока не поддерживает png и svg. Пиктограммы других размеров и типов (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 по умолчению как
/usr/share/design/current/backgrounds/xdm.png
Чтобы файл /usr/share/design/current/backgrounds/xdm.png существовал бы в файловой системе, надо добавить в зависимости
Requires: design-graphics