Работа с терминальным Windows-сервером ярлыки приложений для доменных пользователей

В документации имеется следующая статья http://www.calculate-linux.ru/main/ru/migration_to_linux, разместил файл, как сказано в ней, в каталоге /var/calculate/remote/client-profile/always/.local/share/applications/ такого содержания

[Desktop Entry]
Version=1.0
Terminal=false
Icon=excel-icon
Type=Application
Categories=Office;Spreadsheet;
Exec=keyexec rdesktop "-A -s 'c:\\seamless\\seamlessrdpshell.exe C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE' -d calculate -5 -a 16 -p - -zNKE -k en-us 1.1.1.1"
Name=Microsoft Excel 2010 удаленное приложение
GenericName=Microsoft Excel 2010 удаленное приложение
Comment=Microsoft Excel позволяет выполнять вычисления, а также анализировать и визуализировать данные электронных таблиц.
Keywords=Accounting;Stats;Chart;ods;xls;xlsx;
StartupNotify=true

на севере Linux 3.5.3-calculate #1 SMP Fri Aug 31 12:11:41 UTC 2012 x86_64 Intel® Core™2 Quad CPU Q8400 @ 2.66GHz GenuineIntel GNU/Linux
права на файл

итого 64K
drwxr-xr-x 2 root root  26 янв.  29 12:44 .
drwxr-xr-x 3 root root  25 нояб. 30 09:50 ..
-rw-r--r-- 1 root root 698 янв.  29 12:05 excel.desktop

У доменных пользователей тишина в каталогах ~/.local/share/applications/?

Документация актуальна для шаблонов утилит 2-й версии. Для утилит 3.1 пример будет выглядеть немного по другому.

Создайте директорию:

/var/calculate/remote/templates

поместите туда файл шаблона excel.desktop со следующим содержимым:

 # Calculate env=desktop path=~/.local/share/applications chown=#-ur_login-#:#-ur_group-# 
ac_desktop_profile==on&&ur_domain_set==on&&cl_chroot_status==off&&ur_login!=root&&ini(office.excel)==

[Desktop Entry]
Version=1.0
Terminal=false
Icon=excel-icon
Type=Application
Categories=Office;Spreadsheet;
Exec=keyexec rdesktop "-A -s 'c:\\seamless\\seamlessrdpshell.exe C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE' -d kancoptima -5 -a 16 -p - -zNKE -k en-us 10.1.1.11" 
Name=Microsoft Excel 2010 удаленное приложение
GenericName=Microsoft Excel 2010 удаленное приложение
Comment=Microsoft Excel позволяет выполнять вычисления, а также анализировать и визуализировать данные электронных таблиц.
Keywords=Accounting;Stats;Chart;ods;xls;xlsx;
StartupNotify=true

#-ini(office.excel,1)-#

Основное отличие заключается в том, что шаблоны 3-х утилит хранятся в одной директории 'templates'. Её копии есть в /var/calculate, /var/calculate/remote, а также в оверлее /var/lib/layman/calculate/profiles/templates.

Внутри директории вы можете создавать шаблоны с любыми именами и путями. Главное - писать правильные условия.

Заголовок файла:

1. Служебная строка шаблона начинается с # Calculate
2. Далее идут параметры:

  • env=desktop - здесь мы говорим переменные какого окружения использует шаблон
  • path=~/.local/share/applications - путь к файлу
  • chown=#-ur_login-#:#-ur_login-# - права доступа

3. Теперь условия:

  • ac_desktop_profile==on - проверка на событие настройки профиля пользователя
  • ur_domain_set==on - проверим что компьютер введен в домен, на самом деле здесь мы отсекаем выполнение шаблона на самом сервере :slight_smile:
  • cl_chroot_status==off - проверка на то что вы не собираете в этот момент систему при помощи cl-builder или cl-make (эту проверку можно не использовать)
  • ur_login!=root - исключим из настроек суперпользователя
  • ini(office.excel)== - проверим на версию настроек

В последнем условии используется функция ini(), при помощи которой мы можем считывать и сохранять настройки из шаблонов. Настройки хранятся в ~./calculate/ini.env. Ниже, при помощи той же функции я сохраняю в опции excel значение "1". Таким образом шаблон будет выполнен один раз для каждого пользователя. В дальнейшем я могу обновлять этот файл, создавая для него новые версии.

Если вы будете тестировать шаблон на домашнем компьютере, работающем не в домене, файл можно создать в директории /var/calculate/templates и изменить значение параметр на ur_domain_set==off.

Проверить выполнение шаблона можно выполнив с правами root во время работы доменного пользователя:

 # cl-desktop --locate=local --verbose=on <USER>
 * Настройка пользовательского профиля
[======================================================================================>]100% Time: 00:00:00
 * Следующие файлы были изменены:
 *      /home/<USER>/.local/share/applications/excel.desktop
 * Пользовательская учётная запись atratsevskiy настроена ...

Вместо укажите логин пользователя. Повторное выполнение уже не будет настраивать файл. В файле /home//.calculate/ini.env появится запись:

[office]
excel = 1

Подробнее по шаблонам можно прочить здесь.

Будут вопросы - пишите.

По первой теме все отработало, супер. Напрашивается второй вопрос. Необходимо четыре бинарных файла иконки для приложений которые создаються, размещенные, ну пусть в директории /var/calculate/templates/icons, скопировать в домашнюю папку доменного пользователя ~/.icons/myedit/. По аналогии, что то натворил, проверьте пожалуйста!

 # Calculate env=desktop path=/tmp exec=/bin/bash chown=#-ur_login-#:#-ur_group-# ac_desktop_profile==on&&ur_domain_set==on&&cl_chroot_status==off&&ur_login!=root&&ini(office.icons)==

cp -r /var/calculate/templates/icons/ #-ur_home_path-#/.icons/
chown #-ur_login-#:#-ur_group-# -R #-ur_home_path-#/.icons &>/dev/null
exit 0

#-ini(office.icons,1)-#

В 3.1 теперь выполняемые скрипты передаются на вход интерпретатору, поэтому параметр “path=” игнорируется. Права доступа для скрипта также можно не менять. Даже в старой схеме, когда создаётся файл в /tmp, права по умолчанию пользователя root вполне подойдут.

Второй вариант:

Есть другие способы, как обойти создание скрипта.

Создайте в templates директорию <> и создайте в ней файл свойств директории с именем <<.calculate_directory>>:

 # Calculate env=desktop path=~ name=.icons chown=#-ur_login-#:#-ur_group-# 
ac_desktop_profile==on&&ur_domain_set==on&&cl_chroot_status==off&&ur_login!=root&&ini(office.icons)==

а также файл <<ini.env>>:

 # Calculate format=kde path=~./.calculate

[office]
icons = 1

Для каждой иконки создайте шаблоны с их именами, пример <<deluge.png>>:

 # Calculate link=/usr/share/pixmaps/deluge.png

Суть примера в следующем. В директории вы перечисляете все условия для шаблонов. В файле свойств директории мы не можем записать в ini() значение, т.к. тело шаблона свойств директории не обрабатывается, поэтому нужно создать шаблон с именем <<ini.env>> который будет непосредственно вносить изменения в файл с данными функции ini(). В самой же директории останутся довольно простые шаблоны имена которых должны совпадать с именами иконок.

Можно сделать ещё проще - скопировать в эту директорию сами иконки.

Третий вариант:

Я бы подошел с другой стороны, скопировал иконки в директорию с шаблонами и переносил их во время установки системы в /usr/share/icons/. Во время обновления системы из ISO образа они также мигрируют в новую систему, при этом профиль пользователя не будет разбухать бинарными фалами.

Четвертый вариант

Можно просто создать директорию /var/calculate/remote/share/icons на сервере и скопировать в неё иконки (по аналогии с /var/calculate/remote/share/faces/kdm/).

С иконками приложений воспользовался третим способом.
Работу с удаленными приложениями решил стандартизировать, потому родился такой скрипт: https://gist.github.com/4730787 , который расместил в /usr/local/sbin/ и сделал симлинк в /usr/bin/
использовать таким образом:

rdpapp: A Remote Desktop Protocol remote applications for domain Calculate DS users
Version 0.9.9. Copyright (C) 2013 Maxim Vinokurov et al.
Usage: rdpapp [options]
   -d: domain, mandatory parameter
   -i: ip or server name, mandatory parameter
   -p: path to remote application, example "C:\path\to\program"
   -s: seamless mode (in window), recomend use whith -p, default paht to seamless "C:\seamless\seamlessrdpshell.exe"
   -f: integration for open file mime extention, use -f
   -h: this help

изучая выше сказанное, шаблоны для удаленного приложения и для открытия с его помощью файлов, будут такими:
/var/calculate/remote/templates/excel.desktop

 # Calculate env=desktop path=~/.local/share/applications chown=#-ur_login-#:#-ur_group-# ac_desktop_profile==on&&ur_domain_set==on&&cl_chroot_status==off&&ur_login!=root&&ini(office.excel)==

[Desktop Entry]
Version=1.0
Terminal=false
Icon=excel-icon
Type=Application
Categories=Office;Spreadsheet;
Exec=rdpapp -i 1.1.1.1 -d calculate -p "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" -s
Name=Microsoft Excel 2010 удаленное приложение
GenericName=Microsoft Excel 2010 удаленное приложение
Comment=Microsoft Excel позволяет выполнять вычисления, а также анализировать и визуализировать данные электронных таблиц.
Keywords=Accounting;Stats;Chart;ods;xls;xlsx;
StartupNotify=true

#-ini(office.excel,2)-#

/var/calculate/remote/templates/excelopenfile.desktop

 # Calculate env=desktop path=~/.local/share/applications chown=#-ur_login-#:#-ur_group-# ac_desktop_profile==on&&ur_domain_set==on&&cl_chroot_status==off&&ur_login!=root&&ini(office.excelopenfile)==

[Desktop Entry]
Version=1.0
Terminal=false
Icon=excel-icon
Type=Application
Categories=Office;Spreadsheet;
Exec=rdpapp -i 1.1.1.1 -d calculate -p "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" -s -f
Name=Открыть с помощью Microsoft Excel 2010 удаленное приложение
GenericName=Открыть с помощью Microsoft Excel 2010 удаленное приложение
Comment=Microsoft Excel позволяет выполнять вычисления, а также анализировать и визуализировать данные электронных таблиц.
Keywords=Accounting;Stats;Chart;ods;xls;xlsx;
StartupNotify=true
NoDisplay=true

#-ini(office.excelopenfile,2)-#

icons.tar.gz (256 KB)
rdpapp (2.76 KB)
out.ogv (4.76 MB)

Развивая тему дальше. Если есть необходимость подправить окружение рабочего стола. Например поменять панели местами, прописал такой шаблон, где то понимаю затупил. Так как надо не создать новый, а подправить уже имеющийся. Файл /var/calculate/remote/templates/xfce4-panel.xml

 # Calculate env=desktop path=~/.config/xfce4/xfconf/xfce-perchannel-xml/ chown=#-ur_login-#:#-ur_group-# ac_desktop_profile==on&&ur_domain_set==on&&cl_chroot_status==off&&ur_login!=root&&ini(office.xfce4-panel.xml)==

<?xml version="1.0" encoding="UTF-8"?>

<channel name="xfce4-panel" version="1.0">
  <property name="panels" type="uint" value="2">
    <property name="panel-0" type="empty">
      <property name="position" type="string" value="p=8;x=680;y=751"/>
      <property name="size" type="uint" value="32"/>
      <property name="length" type="uint" value="100"/>
      <property name="position-locked" type="bool" 
.......
.......
.......
      </property>
    </property>
    <property name="plugin-12" type="string" value="separator">
      <property name="expand" type="bool" value="true"/>
      <property name="style" type="uint" value="0"/>
    </property>
  </property>
  <property name="configver" type="int" value="2"/>
</channel>

#-ini(office.xfce4-panel.xml,1)-#

Так как надо не создать новый, а подправить уже имеющийся.

Правда на самом деле посередине. Лучше создать шаблон с необходимыми изменениями.

Через поиск можно легко найти нужный шаблон:

find /var/lib/layman/calculate/profiles/templates/3.1/ | grep xfce4-panel

В данном случае:
/var/lib/layman/calculate/profiles/templates/3.1/6_ac_desktop_profile/2-user/xfce-base/XFCE-4.10/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml

В заголовке format=xml_xfce. Это значит, что формат файла поддерживается утилитами. Следовательно, вы можете менять любые опции этого файла настроек. Если формат не указать, то по умолчанию будет использоваться формат “raw”, т.е. обычный текст, используемое по умолчанию действие - переписывание файла. Куда интересней использовать объединение. Повторив структуру XML-файла, вы можете вносить необходимые изменения в настройки. Такой шаблон будет содержать только необходимые правки.