Введение в шаблоны Calculate 2.2 часть 3 - настраиваем нижнюю панель в XFCE

Тема взята из запроса Олега, оставленного на форуме. В примерах используется логин пользователя koboveb.

Задача - пошагово описать действия по созданию шаблона для настроек нижней панели XFCE. Сам файл настроек уже есть.

  1. По содержимому настроенного файла нижней панели смотрим пути шаблонов

Смотрим содержимое /home/koboveb/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml:

...
<!--
 Modified Calculate-desktop 2.2.23
 Processing template files:
 /usr/share/calculate/templates/desktop/desktop/40-xfce-4.8/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
 /usr/share/calculate/templates/desktop/desktop/40-xfce-4.8-always/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
-->
...

В настоящее время этого пути уже нет (см. новости), т.к. шаблоны перенесены в оверлей. Новые пути находятся в директории /var/lib/layman/calculate/profiles/templates/.

  1. Изучаем оригинальные шаблоны для создания своих

Шаблоны настройки всех служб и сервисов находятся в общей директории. В этом есть плюсы и минусы. Среди плюсов - нет фиксированных путей, а значит мы получаем довольно гибкую систему хранения. Среди минусов - дополнительные обязательные проверки на события.

Событий много, среди них установка системы, создание пользовательского профиля, загрузка системы в livecd режиме и т.д. Для этого есть специальные переменные хранящие значения событий. Проще их взять из примера.

Начнём изучение.

2.1. Начальные значения директории templates (/var/lib/layman/calculate/profiles/templates/) устанавливаются утилитами. Путь наложения шаблонов устанавливается в корень, права на файлы и директории 644 и 755 соответственно. Пользователь root:root.

2.2. Директории, как и файлы являются тоже шаблонами. Они имеют те же свойства и теже условия. Их свойства определяются в служебном файле .calculate_directory.

Поэтому смотрим дальше в пути /var/lib/layman/calculate/profiles/templates/desktop/ файл .calculate_directory:
cat /var/lib/layman/calculate/profiles/templates/desktop/.calculate_directory

 # Calculate append=skip cl_name==calculate-desktop&&cl_ver>=2.2.1
  • Параметр append указывает на способ объединения. Передав значение “skip”, мы пропустим создание директории desktop в корне файловой системы. Более подробно про шаблоны утилит Calculate можно прочесть здесь. Возьмём этот параметр на заметку для создания своего шаблона.

Далее идёт проверка на значения переменных.

  • Проверка cl_name - минимально необходимое условие проверки для вашего шаблона. По ней мы определяем какому пакету утилит принадлежит шаблон. За настройку рабочего стола отвечает пакет calculate-desktop. Каждый пакет может использовать свои переменные и функции, при помощи которых он лучше справится со своими задачами.
  • Далее идёт проверка версии утилит по содержимому переменной cl_ver. В нашем случае она не понадобится.

2.3. Посмотрим свойства следующей директории /var/lib/layman/calculate/profiles/templates/desktop/desktop/.calculate_directory:

 # Calculate path=~ name= chmod=0700 chown=#-ur_login-#:#-ur_group-# 
cl_chroot_status==off&&ur_login!=root&&ac_desktop_desktop==up&&ini(main.update)!=off

Здесь мы уже переопределяем пути и права доступа, проверяем события. Директория может называться как угодно, важны её свойства. Рассмотрим их внимательней:

  • path=~ - переодпределяем путь к директории, куда будет переноситься шаблон. Поскольку мы настраиваем учётную запись пользователя, этот путь проще обозначить как ~, вместо значения которой будет использоваться содержимое переменной $HOME пользователя.
  • name= - с отсутствующим именем путь и конечной директории будет равен $HOME.
  • chmod=0700 - установим права доступа.
  • chown=#-ur_login-#:#-ur_group-# - установим владельца. Запись вида #-переменная-# подставляет значение переменной.

Дополнительные проверки:

  • cl_chroot_status==off - проверка на сборку системы. В нашем случае можно не использовать.
  • ur_login!=root - проверка на то что пользователь не root.
  • ac_desktop_desktop==up - событийная переменная, отвечающая за настройку сеанса пользователя.
  • ini(main.update)!=off - дополнительное условие, создаваемое самими шаблонами. При помощи функция ini() переменные в файле ~/.calculate/ini.env хранят информацию о настроенных приложениях. Чтобы исключить повторную настройку и добавить возможность выполнять настройку определённых пакетов повторно. В нашем примере мы не будем использовать этот приём.

2.4. Наконец мы добрались до настроек самого пакета, в который входит рассматриваемый нами файл настроек. Посмотрим свойства следующей директории /var/lib/layman/calculate/profiles/templates/desktop/desktop/40-xfce-4.8/.calculate_directory:

 # Calculate append=skip 
belong(xfdesktop)!=&&ini(update.xfce)!=off&&ini(ver.xfce)==&&pkg(xfce-base/xfdesktop)>=4.8

Опция appent=skip пропускает перенос директории. Главной задачей является проверка условий использования её содержимого.

  • belong(xfdesktop)!= - функция возвратит нам непустоту, если будет устанавливаться этот пакет, или настраиваться профиль пользователя.
  • ini(update.xfce)!= и ini(ver.xfce)==- проверка на то, что разрешено обновление настроек и пакет не был настроен. В нашем примере мы отказались от использования этой системы контроля.
  • pkg(xfce-base/xfdesktop)>=4.8 - здесь мы проверяем на то что пакет у нас установлен и на его версию.

2.5. Последующие директории .config/ .config/xfce4 .config/xfce4/xfconf .config/xfce4/xfconf/xfce-perchannel-xml уже не имеют файлов свойств и переносятся в систему как есть, начиная от пути ~, заданного в свойствах директории desktop, если помните.

2.6. Наконец мы добрались до одного из двух шаблонов настройки нашего файла. Посмотрим его заголовок:

 # Calculate format=xml_xfce

format=xml_xfce - Здесь мы указываем его формат. Если формат поддерживается утилитами, файл будет объединён с конфигурационным файлом. Вы можете решить для себя, использовать эту возможность или нет. Кроме объединения можно выбрать любое другое действие, например перезапись файла, изменение по регулярному выражению, дописывание в конец, удаление конечного файла, создание ссылки и т.д.

  1. Созданим свой шаблон

Шаблоны пользователя могут храниться в директории /var/calculate/templates/ или в /var/calculate/remote/templates/. Второй путь удобно использовать, если у вас есть парк машин и Calculate Directory Server.

Итак, выполним следующие действия:

3.1. Создадим директорию /var/calculate/templates/.
3.2. Создадим в ней директорию XFCE /var/calculate/templates/XFCE и создадим файл свойств для неё .calculate_directory, со следующим содержимым:

 # Calculate path=~/.config/xfce4/xfconf/xfce-perchannel-xml name= chmod=0700 chown=#-ur_login-#:#-ur_group-# 
cl_name==calculate-desktop&&ur_login!=root&&ac_desktop_desktop==up&&belong(xfdesktop)!=&&pkg(xfce-base/xfdesktop)>=4.8

3.3. Скопируем в эту директорию наш вариант файла настроек xfce4-panel.xml, например взятый отсюда.
3.4. Не указав формат файла, он будет переписывать существующий. Тем не менее, мне понадобится внести некоторые изменения в него. В частности заменить упоминаемый логин пользователя на переменную ur_login. Для этого, вместо koboveb впишите #-ur_login-#. Просмотреть переменные пакета calculate-desktop можно выполнив cl-desktop -v.

  1. Проверим

Проверить настройку рабочего стола можно тремя способами:

4.1. Создать тестового пользователя войти им в сеанс.
4.2. Установив пакет xfdesktop, выполнив emerge -1 xfce-base/xfdesktop.
4.3. Воспользоваться утилитой cl-desktop, выполнив cl-desktop koboveb.

  1. Заключение

5.1. В примере не рассматривался шаблон из директории 40-xfce-4.8-always, т.к. он используется только для настройки учётных записей доменных пользователей.

5.2. Можно ли упростить шаблон? Можно. Просто скопируйте в /var/calculate/templates свой пример конфигурационного файла, и допишите вверху следующие настройки шаблона:

 # Calculate path=~/.config/xfce4/xfconf/xfce-perchannel-xml chmod=0700 chown=#-ur_login-#:#-ur_group-# 
cl_name==calculate-desktop&&ur_login!=root&&ac_desktop_desktop==up&&belong(xfdesktop)!=&&pkg(xfce-base/xfdesktop)>=4.8

Здесь я указал путь, убрал параметр name, переопределяющий имя, выставил права, затем выполнил проверки. Обратите внимание на очерёдность проверок. Важно, чтобы переменная cl_name стояла первой в списке, т.к. последующие переменные могут принадлежат только этому пакету утилит.