Первые две части по POL можно посмотреть здесь
https://forum.ubuntu.ru/index.php?topic=20204.0https://forum.ubuntu.ru/index.php?topic=20313.0Эти HOWTO я пишу не только для того, чтобы дать ответы на вопросы, но, чтобы новые решения по запуску приложений из под WINE, систематизировались, оформлялись в виде скриптов, становились максимально простыми для запуска и, соответственно, упрощали пользователям переход на Linux и существование в нем.
На сайте POL я так и не нашел ни одного HOWTO по написанию скриптов, но, с помощью уже готовых, слегка разобрался в системе, и сейчас, на примере скрипта установки OCR CuneiForm (
http://www.cuneiform.ru), попробую показать, что и как можно использовать в скриптах для POL.
Собственно код:
#!/bin/bashif [
"$PLAYONLINUX" =
"" ]
thenexit 0
fisource "$PLAYONLINUX/lib/sources"cfg_check# все строки до этой - шапка скрипта, по которой собственно и определяется принадлежность к POL,
# подключаются его библиотеки и проверяются зависимости. По 1й строке понятно, что пойдет все, что идет в bash.
# Эта часть - обязательна!
# это строка представляет пользователю программу, которую будет устанавливатьсяpresentation "Cuneiform" "Cognitive Technologies" "http://www.cuneiform.ru" "Konstantin 'CHAIN' Vasilchenko" "Cuneiform"# в этой части создаем переменные для русского или английского языка и выбор языка системы# так же в скрипте можно использовать готовые переменные из файла перевода /usr/share/playonlinux/lang/ru_RU.UTF-8if [
"$POL_LANG" ==
"ru_RU.UTF-8" ]
then LNG_CU_MKCH=
"Вы хотите автоматически скачать CuneiForm или выбрать файл установки с жесткого диска?" LNG_CU_DOWN=
"Скачать" LNG_CU_CHOOSE=
"Выбрать_файл" LNG_ICO_INST=
"Установить пакет 'icoutils', чтобы ярлыки для приложений создавались с иконками? (если Вы не уверены, установлен ли 'icoutils' ответьте ДА)" LNG_ICO_YES=
"Да" LNG_ICO_NO=
"Нет" LNG_CU_ATT=
"1. Пожалуйста, не пользуйтесь мастером сканирования, работайте с документами из меню.
2. Существует ошибка передачи данных при работе со сканерами HP, Epson, BENQ, Canon, Xerox, Mustek и др.
Лекарство: Необходимо отредактировать файл face.ini, который находится в директории windows. Находим в файле ключ TWAIN_TransferMode и делаем его равным memory-native. То есть должно быть TWAIN_TransferMode=memory-native . Ответы на другие вопросы о работе программы CuneiForm вы можете найти на форуме www.cuneiform.ru/forum/."else LNG_CU_MKCH=
"Do you want to download CuneiForm automaticaly or choose installer from your harddrive?" LNG_CU_DOWN=
"Download" LNG_CU_CHOOSE=
"Choose_installer" LNG_ICO_INST=
"Do you want to install package 'icoutils' to create menu with icons? (if you are not sure whether 'icoutils', answer YES)" LNG_ICO_YES=
"Yes" LNG_ICO_NO=
"No" LNG_CU_ATT=
"1. Please don't use the wizard, try to work with documents step by step from the menu.
2. There is a data error when working with scanners HP, Epson, BENQ, Canon, Xerox, Mustek etc.
Remedy: You have to edit the file 'face.ini', which is located in the directory windows. Then find TWAIN_TransferMode key in the file and make it equal to 'memory-native'. It's have to be 'TWAIN_TransferMode = memory-native' . Answers to other questions on CuneiForm program can be found at the forum www.cuneiform.ru/forum/."fi
# создаем временную директорию для работы temp, создаем директорию для будущего префиксаrm $REPERTOIRE/tmp/Cuneiform/ -R
mkdir -p
$REPERTOIRE/tmp/Cuneiform
cd $REPERTOIRE/tmp/Cuneiform
mkdir -p
$REPERTOIRE/wineprefix/Cuneiform/
# выбираем: загружать дистрибутив программы или использовать уже скачанный и подготавливаем установкуdown=$(
menu "$LNG_CU_MKCH" "$LNG_CU_DOWN $LNG_CU_CHOOSE")
if [
"$down" ==
"$LNG_CU_CHOOSE" ]
then cd $HOME INSTALLDIR=$(
select_file "$LNG_LI_INSTALLFILE")
if [
"$INSTALLDIR" =
"" ]
then error "$LNG_LI_CHOOSEFILE" else WORKINGINSTALLDIR=$(
dirname "$INSTALLDIR")
cd $WORKINGINSTALLDIR fi else download "$LNG_DOWNLOAD" "http://www.cuneiform.ru/downloads/cuneiform.zip" "" run_and_wait "$LNG_SCRIPT_WAIT" "unzip cuneiform.zip" "" INSTALLDIR=
"setup.exe"fi# создаем префикс и запускаем установку
select_prefixe "$HOME/.PlayOnLinux/wineprefix/Cuneiform/"creer_prefixewine
"$INSTALLDIR" /V/qn
# с иконками на данный момент ситуация такова, автор скрипта подготавливает иконку в формате .xpm или .png
# затем посылает на почту админу сайта POL, и когда скрипт помещают в репозиторий, там же размещают и иконку
# в самом скрипте в строке 'creer_lanceur "Cuneiform" "Program Files/Cognitive/CuneiForm/" "sface.exe" "Icon" "Cuneiform" '
# предпоследний параметр - это имя файла с иконкой
# так что следующая часть - это просто вариант, как обойтись без репозитария POL# проверяем наличие пакета 'icoutils', устанавливаем его при отсутствии, извлекаем иконку приложенияICO_CHOOSE=$(
menu "$LNG_ICO_INST" "$LNG_ICO_NO $LNG_ICO_YES")
if [
"$ICO_CHOOSE" ==
"$LNG_ICO_YES" ]
then gksudo apt-get install icoutils
ficd $REPERTOIRE/wineprefix/Cuneiform/drive_c/Program\ Files/Cognitive/CuneiForm
wrestool -x --output=sface.ico -t14 sface.exe
convert sface.ico sface.xpm
cp sface-0.xpm
$REPERTOIRE/icones/32/Cuneiform
cp sface-0.xpm
$REPERTOIRE/icones/Cuneiform.xpm
rm -f sface.ico
rm -f *.xpm
# создаем команду запуска установленного приложенияcreer_lanceur "Cuneiform" "Program Files/Cognitive/CuneiForm/" "sface.exe" "" "Cuneiform"Set_WineVersion_Assign "0.9.54" "Cuneiform"
# Применяем фикс для msvcrt.dll, делаем ее 'сторонней/встроенной' с помощью реестраecho "[HKEY_CURRENT_USER\Software\Wine\DllOverrides]" >
$REPERTOIRE/tmp/msvcrt.reg
echo "\"msvcrt\"=\"native,builtin\"" >>
$REPERTOIRE/tmp/msvcrt.reg
regedit
$REPERTOIRE/tmp/msvcrt.reg
rm -f
$REPERTOIRE/tmp/msvcrt.reg
rm $REPERTOIRE/tmp/Cuneiform/ -R
simuler_reboot
# даем дополнительную информацию по использованию приложенияwarning "$LNG_CU_ATT"end_installexit
По подсветке синтаксиса:
# синий - это комментарии, естественно желательно пояснять, что делаешь в скрипте, самому легче разбираться будет
красный - это команды bash, которые могут исполняться просто в терминале, описание и синтаксис того, что разрешено использовать, можно посмотреть, например, здесь:
http://www.opennet.ru/cgi-bin/opennet/man.cgi?category=1&topic=bashзеленый - это переменные, которые мы определяем в скрипте
$бирюзовый - это значения переменных, чтобы подставить в функцию значение переменной предваряем ее знаком '$'
"пурпурный" - текст либо текстовое значение переменной
черный_жирный - собственно функции встроенные в POL
Теперь подробнее по функциям POL и переменным, которые в них используются:
cfg_check - проверка конфигурации POL
presentation - эта функция представляет приложение, которое будем ставить, напишу синтаксис по русски:
b]presentation[/b] "Название программы" "Разработчик" "Сайт программы" "Автор скрипта" "Имя директории, в которой будет создан префикс POL, без пробелов"
Если надо не указывать один из параметров, то оставляем просто пустые кавычки "". Это относится ко всем функциям.
menu - эта функция создает диалог выбора, структура ее такова:
menu "$Текст" "$1 $2" где
"$Текст" - это то, что прочтет пользователь в окне POL
"$1 $2" это как раз варианты, которые предлагаются пользователю, значение, которое выбрано, обычно используется в условии if [ ]; then; else; fi
select_file - создает меню выбора файла, возвращает полный путь к выбранному файлу, структура:
select_file "Текст пояснения для пользователя"error - меню сообщения об ошибке, структура:
error "Сообщение об ошибке" , кстати, здесь, как и в предыдущей функции, обычно используется стандартное сообщение из языкового файла /usr/share/playonlinux/lang/ru_RU.UTF-8 -
$LNG_LI_CHOOSEFILEdirname - возвращает путь к файлу без имени самого файла, структура:
dirname "Путь к файлу" - обычно в связке с функцией
select_file, которая и возвращает путь к файлу
download - загрузка файла, структура:
download "Сообщение во время загрузки" "URL файла для загрузки" "Сообщение перед загрузкой" run_and_wait - меню с индикатором выполнения, в фоновом режиме выполняются какие-нибудь действия, структура:
run_and_wait "Сообщение во время действия" "unzip cuneiform.zip" "Сообщение перед действием" - второй оператор это действие (в данном случае распаковка архива)
select_prefixe - функция выбора директории для создания префикса, структура:
select_prefixe "путь к префиксу" - используется в связке со следующей функцией для создания префикса wine
creer_prefixe - создает структуру префикса, со всеми директориями (windows, program files...) и файлами
creer_lanceur - создает скрипт запуска приложения, структура:
creer_lanceur "имя префикса" "путь к запускаемому файлу" "имя файла для запуска" "имя иконки для запуска" "название скрипта запуска"Set_WineVersion_Assign - присваиваем нужную для запуска приложения версию WINE, структура:
Set_WineVersion_Assign "номер версии WINE" "имя префикса, которому присваиваем"simuler_reboot - имитирует перезагрузку windows
warning - выдает меню с предупреждением, структура:
warning "само предупреждение"end_install - стандартное сообщение об окончании установки
Еще несколько функций, которые в моем примере не использовались:
message - просто сообщение, например с пояснением какого-либо действия, структура:
message "Текст сообщения" Ask_For_cdrom - запрос, с просьбой указать точку монтирования CDROM
Check_cdrom - проверка на наличие файла нужного для запуска установки на указанном CD, структура:
Check_cdrom "имя файла, если не в корне диска, то с путем к нему"protection_warning - сообщение о некорректной работе WINE с драйвером защиты от копирования CDROM
Set_SoundDriver - изменение в winecfg драйвера аудиокарты,структура:
Set_SoundDriver alsa - второй оператор: название драйвера (oss, esd,jack,nas)
Set_OS - изменение версии windows, с которой будет запускаться приложение, структура
Set_OS win98 - второй оператор: версия windows (vista, win2003, winxp, win2k, winnt, winme, win98, win95, win31)
Set_Managed "On" - включение флага управления "разрешить менеджеру окон управлять окнами WINE"
Set_DXGrab "On" - разрешить directX удерживать мышь в своем окне
Set_GLSL "On" - включить поддержку GLSL
Set_Desktop On 1024 768 - включить виртуальный рабочий стол с заданным разрешением
Set_Iexplore - имитирует наличие internet explorer, иногда установка программ проверяет его наличие
navigateur - открывает заданный URL, структура:
navigateur "URL"OpenWineLookBox - открывает окно настроек внешнего вида winecfg
В принципе, этого достаточно для написания большинства скриптов.
Если, изучая готовый скрипт, заметите цифры в конце строки, к примеру такие
7 8, знайте, таким образом можно указывать шаги установки в меню, которые показываются пользователю, в данном примере указан шаг 7 из 8 возможных
Я никогда не занимался программированием, только небольшие батники в windows, линуксом начал как следует интересоваться с октября 2007 с Ubuntu Gutsy , поэтому не судите строго за стиль, по крайней мере эта штука работает:)
Еще попытаю на форумах по поводу готовых функций для POL, но даже если вам необходимо добавить опцию в WINE и вы не нашли готовой функции, всегда можно воспользоваться редактором реестра. Меняете wineconfig, запускаете regedit, находите ветку с изменениями, экспортируете ее, смотрите структуру в текстовом редакторе и добавляете в скрипт изменения, примерно таким образом:
# создаем файл для реестра и его первую строку во временной директорииecho "[HKEY_CURRENT_USER\Software\Wine\DllOverrides]" >
$REPERTOIRE/tmp/msvcrt.reg
# добавляем строки в файл реестра
echo "\"msvcrt\"=\"native,builtin\"" >>
$REPERTOIRE/tmp/msvcrt.reg
# импортируем созданный файл в реестр
regedit
$REPERTOIRE/tmp/msvcrt.reg
# удаляем временный файл
rm -f
$REPERTOIRE/tmp/msvcrt.reg
к посту я прикрепил файл со скриптом из примера, можете пользоваться. Запускается из меню POL Утилиты -> Запустить неофициальный скрипт.
P.S.
Со скриптами удобно работать в редакторе с подсветкой синтаксиса, например, стандартный gedit, в меню Вид -> Режим подсветки синтаксиса -> scritps -> sh
Готовые скрипты можно изучать здесь
http://www.playonlinux.com/en/scripts.htmlСвои скрипты для репозитория POL, после регистрации, можно предлагать здесь:
http://www.playonlinux.com/en/proposer.html