Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: PlayOnLinux 3- Создаем скрипты для игр и приложений + скрипт для CuneiForm  (Прочитано 20106 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн chain

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1263
    • Просмотр профиля
Первые две части по POL можно посмотреть здесь
https://forum.ubuntu.ru/index.php?topic=20204.0
https://forum.ubuntu.ru/index.php?topic=20313.0

Эти HOWTO я пишу не только для того, чтобы дать ответы на вопросы, но, чтобы новые решения по запуску приложений из под WINE, систематизировались, оформлялись в виде скриптов, становились максимально простыми для запуска и, соответственно, упрощали пользователям переход на Linux и существование в нем.

На сайте POL я так и не нашел ни одного HOWTO по написанию скриптов, но, с помощью уже готовых, слегка разобрался в системе, и сейчас, на примере скрипта установки OCR CuneiForm (http://www.cuneiform.ru), попробую показать, что и как можно использовать в скриптах для POL.

Собственно код:


#!/bin/bash
if [ "$PLAYONLINUX" = "" ]
then
exit 0
fi
source "$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-8
if [ "$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_prefixe
wine "$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
fi

cd $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_install
exit



По подсветке синтаксиса:
# синий - это комментарии, естественно желательно пояснять, что делаешь в скрипте, самому легче разбираться будет
красный - это команды 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_CHOOSEFILE
dirname - возвращает путь к файлу без имени самого файла, структура:
       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
« Последнее редактирование: 04 Февраля 2008, 23:09:27 от chain »
-вечный чайник-

Оффлайн theZest

  • Старожил
  • *
  • Сообщений: 1626
  • Я И ДИОД
    • Просмотр профиля
Дык, в раздел HOWTO это надо
Ubuntu 7.04-10.10 --> OS X 10.9-10.13 --> Windows 10 Pro + Manjaro KDE

Оффлайн chain

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1263
    • Просмотр профиля
просто я еще тему не закончил, может у кого дополнения какие-нибудь будут, вот до конца оформлю и перемещу
-вечный чайник-

Оффлайн Malamut

  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Sorry, а где POL хранит свои скрипты установки всех программ?
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн chain

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1263
    • Просмотр профиля
в смысле репозиторий? на сервере, можешь их посмотреть на сайте в категории scripts
-вечный чайник-

 

Страница сгенерирована за 0.085 секунд. Запросов: 23.