Compare commits

..

12 Commits

6 changed files with 187 additions and 37 deletions

View File

@ -1,5 +1,19 @@
История изменений:
0.3.8:
* добавлена возможность ассоциации и запуска файлов из WINE в нативном Linux приложении
* добавлен выбор префикса, если переменная WINEPREFIX не объявлена
* добавлено сохранение последней конфигурации использования префикса
* добавлено сохранение скписка создаваемых ярлыков для приложений
0.3.7:
* обновлены функции создания desktop файлов (ярлыков) и категория WineHelper в меню
* обновлен скрипт установки scadoffice
* добавлена автоустановка:
winehelper install zulugis - ZuluGIS 2021 Инженерные расчёты
* добавлена функция полного удаления WineHelper
* обновлена проверка на наличие noexec для /home (ALT bug: 54095)
0.3.6:
* добавлена категория WineHelper для desktop файлов (ярлыков) в меню

27
autoinstall/easymnemo Normal file
View File

@ -0,0 +1,27 @@
#!/usr/bin/env bash
# info_ru: Удобная программа для создания двухмерных схем и чертежей. Основной акцент сделан на проектировании систем тепло-, водо- и газоснабжения, водоочистки, автоматизированных систем управления технологическими процессами (АСУТП), а также планов эвакуации при пожаре и авариях.
########################################################################
export WH_WINE_USE="wine_x_tkg_10-0_i586"
export WINEPREFIX="easymnemo"
export PROG_NAME="Easymnemo"
export PROG_ICON="easymnemo"
export BASE_PFX="none"
export WH_WINDOWS_VER="10"
export WINEARCH="win32"
export INSTALL_DLL="dotnet35 mdac28 jet40"
AUTOINSTALL_EXE="${WH_TMP_DIR}/Easymnemo.zip"
AUTOINSTALL_UNPACK="${WH_TMP_DIR}/Easymnemo"
AUTOINSTALL_SETUP="${WH_TMP_DIR}/Easymnemo/EasyMnemo.msi"
prepair_wine
if try_download "https://s.siteapi.org/c6e311629e736a8.ru/docs/j3pdl4vxv5wkg0sg0ksks40k8ss0sc" "${AUTOINSTALL_EXE}" ; then
7z x -y "${AUTOINSTALL_EXE}" -o"${AUTOINSTALL_UNPACK}"
try_remove_file "$AUTOINSTALL_EXE"
wine_run_install "${AUTOINSTALL_SETUP}" /q
try_remove_dir "$AUTOINSTALL_UNPACK"
WIN_FILE_EXEC="$DRIVE_C/Program Files/Easymnemo/Easymnemo.exe"
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
fi

21
autoinstall/zulugis Normal file
View File

@ -0,0 +1,21 @@
#!/usr/bin/env bash
# info_ru: ZuluGIS 2021 Инженерные расчёты (Полный) 64-бит. Включает ZuluGIS, пакеты расчетов ZuluThermo, ZuluHydro, ZuluDrain, ZuluGaz, ZuluSteam, библиотеки ZuluXTools и ZuluNetTools. Дополнительно в состав пакета входит Microsoft SQL Server Express LocalDB 2012.
########################################################################
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export PROG_NAME="ZuluGIS 2021"
export WINEPREFIX="zulugis"
export PROG_ICON="zulugis"
export WH_WINDOWS_VER="10"
export BASE_PFX="none"
export WINEARCH="win64"
# export INSTALL_DLL="gdiplus"
export AUTOINSTALL_EXE="${WH_TMP_DIR}/Zulu2021_x64_ru.exe"
prepair_wine
if try_download "https://www.politerm.com/download/zulu/Zulu2021_x64_ru.exe" "${AUTOINSTALL_EXE}" ; then
wine_run_install "${AUTOINSTALL_EXE}" /quiet /norestart
try_remove_file "${AUTOINSTALL_EXE}"
WIN_FILE_EXEC="$DRIVE_C/Program Files/ZuluGIS/Zulu.exe"
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
fi

BIN
image/easymnemo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
image/zulugis.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -93,7 +93,7 @@ check_variables VKD3D_VER "1.1-2602"
export CLOUD_URL="https://cloud.linux-gaming.ru/portproton"
##### CHECK NOEXEC FOR /HOME #####
if grep "/home" /etc/fstab | grep -q "noexec" ; then
if mount -l | grep -E "[[:space:]]/home[[:space:]]" | grep -q "noexec" ; then
fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗапуск портативной версии wine не возможен из домашнего каталога."
fi
@ -388,7 +388,7 @@ create_desktop () {
[[ ! -f "$icon_file" ]] && icon_file=wine
# Создаем .desktop файл
# создаем .desktop файл
{
echo "[Desktop Entry]"
echo "Name=$name_desktop"
@ -403,7 +403,14 @@ create_desktop () {
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
# Создаем файл категории для меню
# добавляем информацию о приложении в "$WINEPREFIX/desktop.list"
if grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list"
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list"
fi
echo "$name_desktop=${exe_file//$WINEPREFIX/}" >> "$WINEPREFIX/desktop.list"
# создаем файл категории для меню
create_new_dir "$HOME/.local/share/desktop-directories"
if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then
cat > "$WH_MENU_CATEGORY" <<EOF
@ -431,10 +438,6 @@ EOF
</Menu>
</Menu>
EOF
# Обновляем меню
if check_command update-menus ; then
update-menus
fi
fi
# Обновляем кэш desktop файлов
@ -484,10 +487,6 @@ remove_desktop () {
try_remove_dir "$WH_MENU_DIR"
try_remove_file "$WH_MENU_CATEGORY"
try_remove_file "$WH_MENU_CONFIG"
# Обновляем меню
if check_command update-menus ; then
update-menus
fi
fi
# Обновляем кэш desktop файлов
@ -745,14 +744,23 @@ get_and_set_reg_file () {
case $name_type_reg in
REG_DWORD)
name_for_find="\"$name_for_find\"=dword:"
if [[ $name_for_find != '@=' ]]
then name_for_find="\"$name_for_find\"=dword:"
else name_for_find="@=dword:"
fi
name_for_set=$(convert_dec_and_hex --dec "$name_for_set") ;;
REG_SZ)
name_for_find="\"$name_for_find\"="
if [[ $name_for_find != '@=' ]]
then name_for_find="\"$name_for_find\"="
else name_for_find="@="
fi
name_for_set="\"$name_for_set\"" ;;
*)
if [[ $name_add_or_del == --delete ]] ; then
name_for_find="\"$name_for_find\""
if [[ $name_for_find != '@=' ]]
then name_for_find="\"$name_for_find\""
else name_for_find="@="
fi
else
print_error "не задан тип ветки реестра: $name_fatal"
return 1
@ -800,15 +808,15 @@ get_and_set_reg_file () {
fi
fi
if [[ $find_check_file == 1 ]] ; then
print_info "Меняем $name_for_find_old в файле реестра"
print_info "Меняем $name_for_find_old в ветке реестра: $name_block"
sed -i "${find_number_line}s|$name_for_find.*|$name_for_find$name_for_set|" "$find_file"
else
print_info "Добавляем $name_for_find_old в файл реестра"
print_info "Добавляем $name_for_find_old в ветку реестра: $name_block"
sed -i "$(( find_line + 1 ))a$name_for_find$name_for_set" "$find_file"
fi
elif [[ $name_add_or_del == --delete ]] ; then
[[ $find_check_file != 1 ]] && return 0
print_info "Удаляем $name_for_find_old из файла реестра"
print_info "Удаляем $name_for_find_old из ветки реестра: $name_block"
sed -i "${find_number_line}d" "$find_file"
fi
}
@ -841,19 +849,47 @@ get_base_pfx () {
fi
}
init_wineprefix () {
check_prefix_var () {
if [[ -z "$WINEPREFIX" ]] ; then
print_warning "Префикс не выбран, используйте пееременную: WINEPREFIX=имя_префикса"
print_info "Список существующих префиксов:"
ls -1 "$WH_PREFIXES_DIR"
echo
exit 1
else
if echo "$WINEPREFIX" | grep -v '/' ; then
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
print_warning "Префикс не выбран."
local prefixes=()
local count=1
print_info "Доступные префиксы WineHelper:"
for prefix in "$WH_PREFIXES_DIR"/*; do
if [[ -d "$prefix" ]]; then
prefixes+=("$prefix")
echo "$count. $(basename "$prefix")"
((count++))
fi
done
if [[ ${#prefixes[@]} -eq 0 ]]; then
fatal "Не найдено ни одного префикса!"
fi
local max_choice=${#prefixes[@]}
read -p "Выберите префикс (1-$max_choice): " choice
if [[ "$choice" -ge 1 && "$choice" -le "$max_choice" ]]; then
export WINEPREFIX="${prefixes[$choice-1]}"
else
fatal "Неверный выбор."
fi
print_info "Выбран префикс: $WINEPREFIX"
fi
if echo "$WINEPREFIX" | grep -v '/' ; then
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
fi
return 0
}
init_wineprefix () {
check_prefix_var
if [[ "$WINEARCH" == "win32" ]]
then check_variables BASE_PFX "defpfx_x86_v01"
else check_variables BASE_PFX "defpfx_x64_v01"
@ -910,6 +946,51 @@ init_wineprefix () {
get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXRandR'
get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXVidMode'
fi
# добавление ассоциаций файлов для запуска нативного приложения из wine
# пример переменной: WH_XDG_OPEN="txt doc pdf"
check_variables WH_XDG_OPEN "0"
local WRAPPER="${WH_TMP_DIR}/wh-xdg-open.sh"
local XDG_OPEN_REG="Software\Classes\xdg-open\shell\open\command"
if [[ $WH_XDG_OPEN != "0" ]] ; then
# проверяем на наличие запрещённых расширений
local forbidden_extensions="cpl dll exe lnk msi"
for ext in $WH_XDG_OPEN; do
if [[ "$forbidden_extensions" =~ $ext ]] ; then
fatal "Расширение .$ext запрещено для добавления!"
fi
done
# создаем скрипт-обёртку
{
echo "#!/usr/bin/env bash"
echo "unix_path=\$(\"$WINELOADER\" winepath -u \"\$*\")"
echo "xdg-open \"\$unix_path\""
} > "$WRAPPER"
chmod +x "$WRAPPER"
# добавляем новую команду xdg-open в реестр
get_and_set_reg_file --add "$XDG_OPEN_REG" '@=' 'REG_SZ' "$WRAPPER %1" "system"
# добавляем ассоциации файлов для запуска с помощью xdg-open
for ext in $WH_XDG_OPEN ; do
get_and_set_reg_file --add "Software\Classes\.$ext" '@=' 'REG_SZ' "xdg-open" "system"
done
print_info "Используется ассоциации с нативными приложениями для файлов: \"$WH_XDG_OPEN\""
else
# удаление команды xdg-open из реестра
get_and_set_reg_file --delete "$XDG_OPEN_REG" '@='
# удаяем скрипт-обёртку
try_remove_file "$WRAPPER"
fi
echo "# переменные последнего использования префикса:" > "$WINEPREFIX/last.conf"
for var in WH_WINE_USE BASE_PFX WINEARCH WH_WINDOWS_VER WINEESYNC WINEFSYNC \
STAGING_SHARED_MEMORY WINE_LARGE_ADDRESS_AWARE WH_USE_SHADER_CACHE WH_USE_WINE_DXGI \
WINE_CPU_TOPOLOGY USE_RENDERER DXVK_VER VKD3D_VER
do
echo "export $var=\"${!var}\"" >> "$WINEPREFIX/last.conf"
done
}
##### KILL AUTOSTART AFTER INSTALLING #####
@ -992,6 +1073,7 @@ kill_wine () {
}
init_database () {
WHDB_FILE="0"
if [[ -f "$WIN_FILE_EXEC" ]] ; then
WHDB="$(basename "$WIN_FILE_EXEC" .exe)"
if [[ -f "$WIN_FILE_EXEC".whdb ]] ; then
@ -1000,20 +1082,23 @@ init_database () {
orig_IFS="$IFS"
IFS=$'\n'
WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )"
if [[ $(echo "$WH_FIND_DB_FILE" | wc -l) -gt 1 ]] ; then
print_error "Найдено более одного файла настроек: $WHDB.exe"
WHDB_FILE="$(echo "$WH_FIND_DB_FILE" | head -n1)"
else
if [[ $(echo "$WH_FIND_DB_FILE" | wc -l) -eq 1 ]] ; then
WHDB_FILE="$WH_FIND_DB_FILE"
fi
IFS="$orig_IFS"
fi
if [[ "$WHDB_FILE" ]] ; then
print_info "Используется файл настроек: $WHDB_FILE"
. "$WHDB_FILE"
else
print_warning "Файл настроек не найден. Пропускаем."
fi
fi
if [[ "$WHDB_FILE" != "0" ]] ; then
print_info "Используется файл настроек: $WHDB_FILE"
. "$WHDB_FILE"
elif check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then
print_info "Найдены настройки из предыдущего использования префикса."
echo "$WINEPREFIX/last.conf"
cat "$WINEPREFIX/last.conf"
. "$WINEPREFIX/last.conf"
else
print_warning "Файл настроек не найден. Пропускаем."
fi
}
@ -1039,7 +1124,10 @@ prepair_wine () {
var_winedlloverride_update "winemenubuilder.exe=d"
init_database
if [[ -n "$INSTALL_SCRIPT_NAME" ]]
then print_info "Используются настройки из скрипта установки: $INSTALL_SCRIPT_NAME"
else init_database
fi
init_wine_ver
init_wineprefix
use_winetricks