Упаковка WM: различия между версиями

Материал из ALT Linux Wiki
м (Поправил описание /e/X/wmsession.d/*, добавил пример.)
Нет описания правки
Строка 1: Строка 1:
[[Category:Devel]]
[[Категория:Devel]]
{{Викифицировать}}
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/УпаковкаWM}}
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/УпаковкаWM}}


Строка 16: Строка 17:
Таким образом мы обеспечим вызов скрипта update_wms после установки пакета, чтобы добавить запись о новом менеджере окон, и после удаления пакета из системы, чтобы удалить запись о новом WM.
Таким образом мы обеспечим вызов скрипта update_wms после установки пакета, чтобы добавить запись о новом менеджере окон, и после удаления пакета из системы, чтобы удалить запись о новом WM.


Вся информация о свежеустановленном оконном менеджере должна находиться в файле <tt>/etc/X11/wmsession.d/YX</tt>, где 'Y' двухзначный приоритет оконного менеджера (числа от 0 до 9 должны предваряться нулём), 'X' - название оконного менеджера. Пример: <tt>/etc/X11/wmsession.d/04IceWM</tt>
Вся информация о свежеустановленном оконном менеджере должна находиться в файле <tt>/etc/X11/wmsession.d/YX</tt>, где 'Y' — двухзначный приоритет оконного менеджера (числа от 0 до 9 должны предваряться нулём), 'X' — название оконного менеджера. Пример: <tt>/etc/X11/wmsession.d/04IceWM</tt>


Формат файла с информацией о WM следующий:
Формат файла с информацией о WM следующий:
Строка 48: Строка 49:
   %files
   %files
   %config %_sysconfdir/X11/wmsession.d/*</pre>
   %config %_sysconfdir/X11/wmsession.d/*</pre>
:
:  
Этот файл необязательно создавать в spec-файле. Можно создать его отдельно и добавить в спек только следующие строчки:
Этот файл необязательно создавать в spec-файле. Можно создать его отдельно и добавить в спек только следующие строчки:


Строка 69: Строка 70:


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


если он поддерживает SVG, то сначала в  
если он поддерживает SVG, то сначала в
/usr/share/icons/<theme>/scalable/apps.  
/usr/share/icons/<theme>/scalable/apps.
и в /usr/share/icons/hicolor/scalable/apps,
и в /usr/share/icons/hicolor/scalable/apps,


если он поддерживает темы, то затем в  
если он поддерживает темы, то затем в
/usr/share/icons/<theme>/<SIZExSIZE>/apps.  
/usr/share/icons/<theme>/<SIZExSIZE>/apps.


Затем в любом случае смотрит
Затем в любом случае смотрит
Строка 82: Строка 83:
где по выбору <SIZExSIZE> это одно из 16х16, 32х32 и 48х48 по выбору.
где по выбору <SIZExSIZE> это одно из 16х16, 32х32 и 48х48 по выбору.


Если оконный менеджер поддерживает масштабирование иконок, то затем  
Если оконный менеджер поддерживает масштабирование иконок, то затем
смотрит в /usr/share/icons/<theme>/48х48/apps, и в
смотрит в /usr/share/icons/<theme>/48х48/apps, и в
/usr/share/icons/hicolor/48х48/apps (минимально гарантированная
/usr/share/icons/hicolor/48х48/apps (минимально гарантированная
Строка 92: Строка 93:
  &gt; /usr/share/icons - это старое стандартное положение иконок в ALT &gt; /usr/share/pixmaps - чисто GNOME &gt; Добавить можно обе.  
  &gt; /usr/share/icons - это старое стандартное положение иконок в ALT &gt; /usr/share/pixmaps - чисто GNOME &gt; Добавить можно обе.  


<div style="display: inline; color: red;">Замечание:</div> Вышеуказанный алгоритм --- некоторое приближение и упрощение для  
<div style="display: inline; color: red;">Замечание:</div> Вышеуказанный алгоритм --- некоторое приближение и упрощение для
настройки оконных менеджеров, не поддерживающих freedesktop menu, в условиях [[AltLinux|AltLinux]].
настройки оконных менеджеров, не поддерживающих freedesktop menu, в условиях [[AltLinux|AltLinux]].
подробный алгоритм выписан на  
подробный алгоритм выписан на
[http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html]
[http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html]


==== Где прописывать пути ====
==== Где прописывать пути ====


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


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


Строка 114: Строка 115:
     ifeqelse($filename, , $defaulticon, replace(replace($filename, ".xpm",), &quot;.png&quot;,))
     ifeqelse($filename, , $defaulticon, replace(replace($filename, ".xpm",), &quot;.png&quot;,))


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


function findicon($filename, $defaulticon)= \
function findicon($filename, $defaulticon)= \
     ifeqelse($filename, , $defaulticon, \
     ifeqelse($filename, , $defaulticon, \
::ifelsefile($filename, $filename, \
:: ifelsefile($filename, $filename, \
::ifelsefile("/usr/share/icons/hicolor/16x16/apps/" $filename, "/usr/share/icons/default.kde/16x16/apps/" $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/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/hicolor/32x32/apps/» $filename, «/usr/share/icons/hicolor/16x16/apps/» $filename, \
::ifelsefile("/usr/share/icons/slick/16x16/apps/" $filename,
:: ifelsefile(«/usr/share/icons/slick/16x16/apps/» $filename,
::"/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/icons/mini/» $filename, «/usr/share/icons/mini/» $filename, \
::ifelsefile("/usr/share/pixmaps/" $filename, "/usr/share/pixmaps/" $filename, \
:: ifelsefile(«/usr/share/pixmaps/» $filename, «/usr/share/pixmaps/» $filename, \
$defaulticon))))))))\
$defaulticon))))))))\

Версия от 08:39, 5 августа 2008

42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


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

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

Каждый менеджер сессий имеет свой конфигурационный файл, в котором перечислены все установленные оконные менеджеры. При запуске он читает их из своего конфигурационного файла и отображает пользователю. Для того, чтобы облегчить труд майнтейнеров оконных менеджеров, в ALT Linux был создан и используется скрипт, который автоматически добавляет/удаляет запись об оконном менеджере в конфигурационные файлы менеджеров сессий (поддерживаются KDM, GDM и WDM). Этот скрипт находится в /usr/sbin и называется update_wms. Для того, чтобы его вызвать, нужно в spec-файл добавить следующую запись:

%post
%update_wms

%postun
%clean_wms

Таким образом мы обеспечим вызов скрипта update_wms после установки пакета, чтобы добавить запись о новом менеджере окон, и после удаления пакета из системы, чтобы удалить запись о новом WM.

Вся информация о свежеустановленном оконном менеджере должна находиться в файле /etc/X11/wmsession.d/YX, где 'Y' — двухзначный приоритет оконного менеджера (числа от 0 до 9 должны предваряться нулём), 'X' — название оконного менеджера. Пример: /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/*

(с) Slava Semushin Добавлено: 06/12/2004

Поиск иконок для меню

Этот раздел выделен из policy и всё ещё местами ссылается на него.

Порядок поиска пиктограмм

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

если он поддерживает 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))))))))\