Упаковка WM: различия между версиями
Ilis (обсуждение | вклад) Нет описания правки |
Ilis (обсуждение | вклад) Нет описания правки |
||
Строка 7: | Строка 7: | ||
== Интеграция с менеджером сессий (*dm) == | == Интеграция с менеджером сессий (*dm) == | ||
Каждый менеджер сессий имеет свой конфигурационный файл, в котором перечислены все установленные оконные менеджеры. При запуске он читает их из своего конфигурационного файла и отображает пользователю. Для того, чтобы облегчить труд мейнтейнеров оконных менеджеров, в Sisyphus / ALT Linux добавление/удаление записи об оконном менеджере в конфигурационные файлы менеджеров сессий (поддерживаются KDM, GDM и WDM) происходит автоматически, при наличии в пакете оконного менеджера файла в директории {{path|/etc/X11/wmsession.d}}. | |||
Каждый менеджер сессий имеет свой конфигурационный файл, в котором перечислены все установленные оконные менеджеры. При запуске он читает их из своего конфигурационного файла и отображает пользователю. Для того, чтобы облегчить труд | |||
Этот файл должен называться <tt>/etc/X11/wmsession.d/NNname</tt>, где 'NN' — двухзначный приоритет оконного менеджера (числа от 0 до 9 должны предваряться нулём), 'name' — название оконного менеджера. Пример: {{path|/etc/X11/wmsession.d/04IceWM}} | Этот файл должен называться <tt>/etc/X11/wmsession.d/NNname</tt>, где 'NN' — двухзначный приоритет оконного менеджера (числа от 0 до 9 должны предваряться нулём), 'name' — название оконного менеджера. Пример: {{path|/etc/X11/wmsession.d/04IceWM}} | ||
Строка 42: | Строка 41: | ||
%files | %files | ||
%config %_sysconfdir/X11/wmsession.d/*</pre> | %config %_sysconfdir/X11/wmsession.d/*</pre> | ||
Этот файл необязательно создавать в spec-файле. Можно создать его отдельно и добавить в спек только следующие строчки: | Этот файл необязательно создавать в spec-файле. Можно создать его отдельно и добавить в спек только следующие строчки: | ||
Строка 55: | Строка 53: | ||
== Упаковка Freedesktop-совместимого WM == | == Упаковка Freedesktop-совместимого WM == | ||
=== Зависимости на общие утилиты freedesktop | === Зависимости на общие утилиты freedesktop === | ||
Согласно стандарту freedesktop.org, Freedesktop-совместимые WM должны пользоваться общесистемными БД, создаваемые утилитами | |||
Согласно стандарту freedesktop.org, Freedesktop-совместимые WM | * {{prg|update-mime-database}} (пакет {{pkg|shared-mime-info}}), | ||
должны пользоваться общесистемными БД, создаваемые утилитами | * {{prg|update-desktop-database}} (пакет {{pkg|desktop-file-utils}}). | ||
update-mime-database (пакет shared-mime-info), | |||
update-desktop-database (пакет desktop-file-utils). | |||
С другой стороны, пакеты с WM-специфическими ресурсами | С другой стороны, пакеты с WM-специфическими ресурсами не должны иметь зависимостей на на desktop-file-utils / shared-mime-info. (Обоснование: пакеты (тот же mutt) работающие на без-X-овом сервере, могут иметь .desktop файлы, при этом на без-X-овом сервере зависимость на desktop-file-utils явно избыточна.) | ||
не должны иметь зависимостей на на desktop-file-utils / shared-mime-info. | |||
(Обоснование: пакеты (тот же mutt) работающие на без-X-овом сервере, | |||
могут иметь .desktop файлы | |||
зависимость на desktop-file-utils явно избыточна.) | |||
Однако зависимости на shared-mime-info/desktop-file-utils должны где-то | Однако зависимости на shared-mime-info/desktop-file-utils должны где-то оставаться, иначе эти утилиты вообще ставиться не будут. | ||
оставаться, иначе эти утилиты вообще ставиться не будут. | |||
Эти списки зависимостей потенциально открыты: | Эти списки зависимостей потенциально открыты: по мере развития стандарта, в нем могут добавиться новые приложения, | ||
по мере развития стандарта, в нем могут добавиться новые приложения, | |||
новые версии WM он начнут их поддерживать и т.д. | новые версии WM он начнут их поддерживать и т.д. | ||
Для удобства сопровождения списки зависимостей для Freedesktop-совместимых WM | Для удобства сопровождения списки зависимостей для Freedesktop-совместимых WM оформлены в пакет wm-common-freedesktop. | ||
оформлены в пакет wm-common-freedesktop. | |||
Поэтому WM (оконные менеджеры) и DE, | Поэтому WM (оконные менеджеры) и DE, удовлетворяющие стандарту freedesktop, ''должны'' иметь либо | ||
либо | |||
Requires: wm-common-freedesktop | Requires: wm-common-freedesktop | ||
(вытягивает по зависимостям требуемый стандартом список утилит) | (вытягивает по зависимостям требуемый стандартом список утилит) либо | ||
либо | |||
Requires: shared-mime-info desktop-file-utils ... (явное перечисление списка утилит) | Requires: shared-mime-info desktop-file-utils ... (явное перечисление списка утилит) | ||
Рекомендуется использовать wm-common-freedesktop, чтобы случайно не пропустить в будущем нужную утилиту. | Рекомендуется использовать wm-common-freedesktop, чтобы случайно не пропустить в будущем нужную утилиту. | ||
== Упаковка WM, не | == Упаковка WM, не удовлетворяющего стандарту Freedesktop == | ||
=== Масштабирование пиктограмм === | === Масштабирование пиктограмм === | ||
Если WM не поддерживает масштабирование пиктограмм (древние ископаемые WM), то рекомендуется добавить в зависимости | |||
Если WM не поддерживает масштабирование пиктограмм (древние ископаемые WM) | |||
то рекомендуется добавить в зависимости | |||
Requires: wm-common-pixmap-scaler | Requires: wm-common-pixmap-scaler | ||
Этот пакет автоматически генерирует из пиктограмм большого размера | Этот пакет автоматически генерирует из пиктограмм большого размера пиктограммы уменьшенного размера в %_miconsdir/ (16x16) и %_niconsdir/ (32x32). | ||
пиктограммы уменьшенного размера в %_miconsdir/ (16x16) и %_niconsdir/ (32x32). | |||
=== Генерация меню === | === Генерация меню === | ||
Если WM не поддерживает напрямую freedesktop menu, то WM должен предоставить в {{path|/etc/menu-methods/<WMname>}} | |||
Если WM не поддерживает напрямую freedesktop menu, то | |||
WM должен предоставить в {{path|/etc/menu-methods/<WMname>}} | |||
метод для генерации своего меню из общесистемного меню. | метод для генерации своего меню из общесистемного меню. | ||
Примеры можно посмотреть в Сизифе и в руководстве к пакету menu. | Примеры можно посмотреть в Сизифе и в руководстве к пакету menu. | ||
Зависимость на пакет menu добавлять не обязательно, она будет | Зависимость на пакет menu добавлять не обязательно, она будет получена автоматически по наличию файла {{path|/etc/menu-methods/<WMname>}}. | ||
получена автоматически по наличию файла {{path|/etc/menu-methods/<WMname>}}. | |||
=== Порядок поиска пиктограмм для меню === | === Порядок поиска пиктограмм для меню === | ||
Расположение пиктограмм в ALT Linux, согласно [[IconPathsPolicy]], совместимо со стандартом [http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html freedesktop.org]. | |||
Расположение пиктограмм в ALT Linux, согласно [[IconPathsPolicy]], | |||
совместимо со стандартом | |||
Если WM является Freedesktop-совместимым, то он уже настроен. | Если WM является Freedesktop-совместимым, то он уже настроен. | ||
Иначе правильно настроенный оконный менеджер | Иначе правильно настроенный оконный менеджер должен искать пиктограммы в следующем порядке: | ||
должен искать пиктограммы в следующем порядке: | * если он поддерживает SVG, то сначала в {{path|/usr/share/icons/<theme>/scalable/apps}} и в {{path|/usr/share/icons/hicolor/scalable/apps}}, | ||
* если он поддерживает темы, то затем в {{path|/usr/share/icons/<theme>/<SIZExSIZE>/apps}}. | |||
если он поддерживает SVG, то сначала в | * затем в любом случае смотрит {{path|/usr/share/icons/hicolor/<SIZExSIZE>/apps}}, где по выбору <SIZExSIZE> это одно из {{path|16х16}}, {{path|32х32}} и {{path|48х48}} по выбору. | ||
/usr/share/icons/<theme>/scalable/apps | * если оконный менеджер поддерживает масштабирование иконок, то затем смотрит в {{path|/usr/share/icons/<theme>/48х48/apps}}, и в {{path|/usr/share/icons/hicolor/48х48/apps}} (минимально гарантированная пиктограмма). | ||
и в /usr/share/icons/hicolor/scalable/apps, | * если оконный менеджер поддерживает масштабирование иконок, то дополнительно смотрим в {{path|/usr/share/icons/}} и в {{path|/usr/share/pixmaps}} для совместимости с пакетами, которые бросают пиктограммы куда попало. | ||
*: /usr/share/icons - это старое стандартное положение иконок в ALT, /usr/share/pixmaps - чисто GNOME. Добавить можно обе. | |||
если он поддерживает темы, то затем в | |||
/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 | |||
для совместимости с пакетами, которые бросают пиктограммы куда попало. | |||
<div style="display: inline; color: red;">Замечание:</div> | <div style="display: inline; color: red;">Замечание:</div> | ||
Указанный алгоритм настройки оконных менеджеров, не поддерживающих freedesktop menu, | Указанный алгоритм настройки оконных менеджеров, не поддерживающих freedesktop menu, упрощён для условий ALT Linux. Подробный алгоритм выписан на [http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html standards.freedesktop.org]. | ||
[http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html | |||
=== Где прописывать пути поиска пиктограмм === | === Где прописывать пути поиска пиктограмм === | ||
Для оконных менеджеров, не поддерживающих напрямую freedesktop menu, есть 2 возможности: список путей в оконном менеджере (если в нем есть такая возможность) и список путей в соответствующем методе для menu-methods. | |||
Разберём это на примере [[IceWM]]. | |||
IceWM поддерживает список путей в оконном менеджере, поэтому пути прописываем в параметре [[IconPath]] конфигурации. | |||
IceWM не поддерживает напрямую freedesktop menu, но функцию findicon для menu-methods можно взять попроще: | |||
<pre>function findicon($filename, $defaulticon)= \ | |||
function findicon($filename, $defaulticon)= \ | |||
ifeqelse($filename, , $defaulticon, replace(replace($filename, ".xpm",), ".png",)) | ifeqelse($filename, , $defaulticon, replace(replace($filename, ".xpm",), ".png",)) | ||
</pre> | |||
Если бы IceWM не поддерживал список путей, то их пришлось бы вбивать | Если бы IceWM не поддерживал список путей, то их пришлось бы вбивать в findicon наподобие следующего (размер пиктограмм 16x16): | ||
в findicon наподобие следующего (размер пиктограмм 16x16): | <pre>function findicon($filename, $defaulticon)= \ | ||
function findicon($filename, $defaulticon)= \ | |||
ifeqelse($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)))))))\ | $defaulticon)))))))\</pre> |
Версия от 07:07, 13 марта 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
Зависимости на общие утилиты 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)))))))\