Упаковка WM: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 1: | Строка 1: | ||
[[Категория: | [[Категория:HOWTO]] | ||
{{Викифицировать}} | {{Викифицировать}} | ||
== Упаковка оконных менеджеров (WM) == | == Упаковка оконных менеджеров (WM) == | ||
Строка 52: | Строка 51: | ||
%config %_sysconfdir/X11/wmsession.d/*</pre> | %config %_sysconfdir/X11/wmsession.d/*</pre> | ||
=== | === Упаковка Freedesktop-совместимого WM === | ||
=== Упаковка WM, не удоволетворяющего стандарту Freedesktop === | |||
==== | ==== Генерация меню ==== | ||
Если WM не поддерживает напрямую freedesktop menu, то | |||
WM должен предоставить в {{path|/etc/menu-methods/<WMname>}} | |||
метод для генерации своего меню из общесистемного. | |||
Примеры можно посмотреть в Сизифе и в руководстве к пакету menu. | |||
Зависимость на пакет menu добавлять не обязательно, она будет | |||
получена автоматически по наличию файла {{path|/etc/menu-methods/<WMname>}}. | |||
==== Порядок поиска пиктограмм для меню ==== | |||
Расположение пиктограмм в ALT Linux, согласно [[IconPathsPolicy]], | |||
совместимо со стандартом freedesktop.org. | |||
((http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html)). | |||
Если WM является Freedesktop-совместимым, то он уже настроен. | |||
Иначе правильно настроенный оконный менеджер | |||
должен искать пиктограммы в следующем порядке: | должен искать пиктограммы в следующем порядке: | ||
Версия от 19:16, 6 марта 2009
Упаковка оконных менеджеров (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
Упаковка WM, не удоволетворяющего стандарту Freedesktop
Генерация меню
Если 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
Где прописывать пути
Есть 2 возможности: список путей в оконном менеджере (если в нем есть такая возможность) и список путей в соответствующем методе для menu-methods (для оконных менеджеров, не поддерживающих напрямую freedesktop menu).
Разберем это на примере 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,
- «/usr/share/icons/slick/16x16/apps/» $filename, \
- ifelsefile(«/usr/share/icons/mini/» $filename, «/usr/share/icons/mini/» $filename, \
- ifelsefile(«/usr/share/pixmaps/» $filename, «/usr/share/pixmaps/» $filename, \
$defaulticon))))))))\