Упаковка WM

Материал из ALT Linux Wiki
Stub.png
Черновик политики Sisyphus
Автор(ы) — IgorVlasenko


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


Упаковка оконных менеджеров (WM)

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

Каждый менеджер сессий имеет свой конфигурационный файл, в котором перечислены все установленные оконные менеджеры. При запуске он читает их из своего конфигурационного файла и отображает пользователю. Для того, чтобы облегчить труд майнтейнеров оконных менеджеров, в Sisyphus / 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 путь
  Этот параметр нужен для совместимости

Таким образом, чтобы информация о новом оконном менеджере стала известна скрипту 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/%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/*

Упаковка Freedesktop-совместимого WM

Согласно стандарту 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. ((http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html)).

Если 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, упрощен для условий AltLinux. Подробный алгоритм выписан на http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html.

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

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

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

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

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)))))))\