Compare commits

..

1 Commits
master ... dop

Author SHA1 Message Date
db18a3a233 add-ons for T-FLEX CAD 17 2025-04-24 08:18:47 +06:00
13 changed files with 432 additions and 19799 deletions

View File

@ -1,35 +1,5 @@
История изменений: История изменений:
0.4.0:
* добавлена автоматическая установка и настройка wine-cpcsp_proxy при
использовании переменной WH_USE_CPCSP_PROXY=1
* подготовка функций для создания бэкапов префикса
0.3.9:
* обновлен скрипт установки scadoffice
* добавлена автоустановка:
winehelper easymnemo - "Easymnemo"
* winetricks поставляется с пакетом WineHelper, а не скачивается из GitHub
* добавлена возможность удаления префикса
0.3.8:
* добавлена возможность ассоциации и запуска файлов из WINE в нативном Linux
приложении с помощью перемененной. Пример: WH_XDG_OPEN="rtf txt doc"
* добавлен выбор префикса, если переменная WINEPREFIX не объявлена
* добавлено сохранение последней конфигурации использования префикса
* добавлено сохранение скписка создаваемых ярлыков для приложений
0.3.7:
* обновлены функции создания desktop файлов (ярлыков) и категория WineHelper в меню
* обновлен скрипт установки scadoffice
* добавлена автоустановка:
winehelper install zulugis - ZuluGIS 2021 Инженерные расчёты
* добавлена функция полного удаления WineHelper
* обновлена проверка на наличие noexec для /home (ALT bug: 54095)
0.3.6:
* добавлена категория WineHelper для desktop файлов (ярлыков) в меню
0.3.5: 0.3.5:
* обновлены скрипты установок daobit * обновлены скрипты установок daobit
* добавлен вывод списка программ с возможностью установки из существующего дистрибутива * добавлен вывод списка программ с возможностью установки из существующего дистрибутива

View File

@ -20,6 +20,3 @@ https://github.com/HansKristian-Work/vkd3d-proton
WINETRICKS: WINETRICKS:
https://github.com/Winetricks/winetricks https://github.com/Winetricks/winetricks
WINE-CPCSP_PROXY:
https://github.com/Etersoft/wine-cpcsp_proxy

View File

@ -1,27 +0,0 @@
#!/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

View File

@ -3,66 +3,27 @@
######################################################################## ########################################################################
export WH_WINE_USE="wine_x_tkg_10-0_amd64" export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export WINEPREFIX="scadoffice" export WINEPREFIX="scadoffice"
export BASE_PFX="scadaoffice_pfx_x64_v03" export BASE_PFX="none"
export WH_WINDOWS_VER="10" export WH_WINDOWS_VER="10"
export WINEARCH="win64" export WINEARCH="win64"
export INSTALL_DLL="dotnet20 dotnet472 dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6" export INSTALL_DLL="dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6"
export WH_XDG_OPEN="rtf"
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_installer.exe"
SCADOFFICE_ADDONS_URL="https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v02.tar.xz"
prepair_wine
ADDONS_PACK="${WH_TMP_DIR}/scadoffice_addons_v01.tar.xz"
ADDONS_PATH="${WH_TMP_DIR}/scadoffice_addons"
OFFICE_EXE="${ADDONS_PATH}/OpenOffice.exe"
OFFICE_PACK="${ADDONS_PATH}/OpenOffice"
AUTOINSTALL_SETUP="${ADDONS_PATH}/OpenOffice/setup.exe"
ADDONS_PATH_REG="${ADDONS_PATH}/REG"
ADDONS_PATH_MDAC="${ADDONS_PATH}/mdac64"
ADDONS_PATH_OPENSSH="${ADDONS_PATH}/OpenSSH"
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_11.exe"
DRIVE_C_SCADOFFICE="$DRIVE_C/SCAD Soft/SCADOffice/64" DRIVE_C_SCADOFFICE="$DRIVE_C/SCAD Soft/SCADOffice/64"
if [[ -n $2 ]] ; then prepair_wine
if [[ ! -d "$DRIVE_C_SCADOFFICE" ]] ; then
fatal "Перезапустите скрипт без дополнительных аргументов для установки SCAD Office:
winehelper install scadoffice"
elif [[ ! -f "$2" ]] ; then
fatal "Перезапустите скрипт с правильным путем до файла лицензии SCAD Office:
winehelper install scadoffice \"/путь/до/файла.exe\""
else
print_info "Устанавливаем файл лицензии $2"
wine_run "$2"
exit 0
fi
fi
if [[ $BASE_PFX == "none" ]] ; then
print_info "Установка дополнительных компонентов..."
ADDONS_PACK="${WH_TMP_DIR}/$(basename "$SCADOFFICE_ADDONS_URL")"
ADDONS_PATH="${WH_TMP_DIR}/scadoffice_addons"
ADDONS_PATH_REG="${ADDONS_PATH}/REG"
ADDONS_PATH_MDAC="${ADDONS_PATH}/mdac64"
ADDONS_PATH_OPENSSH="${ADDONS_PATH}/OpenSSH"
if try_download "$SCADOFFICE_ADDONS_URL" "${ADDONS_PACK}" ; then
create_new_dir "${ADDONS_PATH}"
unpack "${ADDONS_PACK}" "${ADDONS_PATH}"
wine_run regedit "${ADDONS_PATH_REG}"/*.reg
# Установка ODBC
rm -fR "$DRIVE_C/Program Files (x86)/Common Files/System"
cp -r "${ADDONS_PATH_MDAC}/System" "$DRIVE_C/Program Files (x86)/Common Files/System"
cp -r "${ADDONS_PATH_MDAC}"/*.* "$DRIVE_C/windows/system32/"
wine_run regedit "${ADDONS_PATH_MDAC}"/*.reg
# Установка SSH
cp -r "${ADDONS_PATH_OPENSSH}" "$DRIVE_C/windows/system32/"
try_remove_dir "$ADDONS_PATH"
try_remove_file "$ADDONS_PACK"
fi
fi
if try_download "https://scadhelp.ru/files/10/download" "${AUTOINSTALL_EXE}" ; then if try_download "https://scadhelp.ru/files/10/download" "${AUTOINSTALL_EXE}" ; then
create_new_dir "$DRIVE_C/SDATA" create_new_dir "$DRIVE_C/SDATA"
create_new_dir "$DRIVE_C/SWORK" create_new_dir "$DRIVE_C/SWORK"
wine_run_install "${AUTOINSTALL_EXE}" /auto /hide wine_run_install "${AUTOINSTALL_EXE}" /auto /hide
try_remove_file "$AUTOINSTALL_EXE"
# Определение всех программ, значков и исполняемых файлов # Определение всех программ, значков и исполняемых файлов
declare -a PROG_NAME=("Арбат" "Вест" "Глобальные настройки" "Декор" "Дискретная арматура" "Запрос" "Камин" "КоКон" "Комета" "Конструктор сечений" "Консул" "Конфигуратор лицензий" "Кристалл" "Кросс" "Куст" "Магнум" "Монолит" "Откос" "Пастернак" "Преобразование ед. измерений" "Cортамент металлопроката" "Расчет по формуле" "Редактор акселерограмм" "Редактор динамичности" "Редактор материалов" "Тонус" "Эквивалентное сечение" "SCAD++") declare -a PROG_NAME=("Арбат" "Вест" "Глобальные настройки" "Декор" "Дискретная арматура" "Запрос" "Камин" "КоКон" "Комета" "Конструктор сечений" "Консул" "Конфигуратор лицензий" "Кристалл" "Кросс" "Куст" "Магнум" "Монолит" "Откос" "Пастернак" "Преобразование ед. измерений" "Cортамент металлопроката" "Расчет по формуле" "Редактор акселерограмм" "Редактор динамичности" "Редактор материалов" "Тонус" "Эквивалентное сечение" "SCAD++")
@ -71,8 +32,37 @@ if try_download "https://scadhelp.ru/files/10/download" "${AUTOINSTALL_EXE}" ; t
declare -a WIN_FILE_EXEC=("${DRIVE_C_SCADOFFICE}/Arbat.exe" "${DRIVE_C_SCADOFFICE}/West.exe" "${DRIVE_C_SCADOFFICE}/GlobalSettings.exe" "${DRIVE_C_SCADOFFICE}/Decor.exe" "${DRIVE_C_SCADOFFICE}/ReBar.exe" "${DRIVE_C_SCADOFFICE}/UnderGround.exe" "${DRIVE_C_SCADOFFICE}/ComeIn.exe" "${DRIVE_C_SCADOFFICE}/CoCon.exe" "${DRIVE_C_SCADOFFICE}/Comet2.exe" "${DRIVE_C_SCADOFFICE}/Section.exe" "${DRIVE_C_SCADOFFICE}/Consul.exe" "${DRIVE_C_SCADOFFICE}/ConfigProtection.exe" "${DRIVE_C_SCADOFFICE}/Kristall.exe" "${DRIVE_C_SCADOFFICE}/Cross.exe" "${DRIVE_C_SCADOFFICE}/Kust2.exe" "${DRIVE_C_SCADOFFICE}/Magnum.exe" "${DRIVE_C_SCADOFFICE}/Monolit.exe" "${DRIVE_C_SCADOFFICE}/Slope.exe" "${DRIVE_C_SCADOFFICE}/Pasternak.exe" "${DRIVE_C_SCADOFFICE}/UCalc.exe" "${DRIVE_C_SCADOFFICE}/ViewProf.exe" "${DRIVE_C_SCADOFFICE}/SCalc.exe" "${DRIVE_C_SCADOFFICE}/AccelEdit.exe" "${DRIVE_C_SCADOFFICE}/BetaEdit.exe" "${DRIVE_C_SCADOFFICE}/MaterialsEdit.exe" "${DRIVE_C_SCADOFFICE}/Tonus.exe" "${DRIVE_C_SCADOFFICE}/Sezam.exe" "${DRIVE_C_SCADOFFICE}/SCADX.exe") declare -a WIN_FILE_EXEC=("${DRIVE_C_SCADOFFICE}/Arbat.exe" "${DRIVE_C_SCADOFFICE}/West.exe" "${DRIVE_C_SCADOFFICE}/GlobalSettings.exe" "${DRIVE_C_SCADOFFICE}/Decor.exe" "${DRIVE_C_SCADOFFICE}/ReBar.exe" "${DRIVE_C_SCADOFFICE}/UnderGround.exe" "${DRIVE_C_SCADOFFICE}/ComeIn.exe" "${DRIVE_C_SCADOFFICE}/CoCon.exe" "${DRIVE_C_SCADOFFICE}/Comet2.exe" "${DRIVE_C_SCADOFFICE}/Section.exe" "${DRIVE_C_SCADOFFICE}/Consul.exe" "${DRIVE_C_SCADOFFICE}/ConfigProtection.exe" "${DRIVE_C_SCADOFFICE}/Kristall.exe" "${DRIVE_C_SCADOFFICE}/Cross.exe" "${DRIVE_C_SCADOFFICE}/Kust2.exe" "${DRIVE_C_SCADOFFICE}/Magnum.exe" "${DRIVE_C_SCADOFFICE}/Monolit.exe" "${DRIVE_C_SCADOFFICE}/Slope.exe" "${DRIVE_C_SCADOFFICE}/Pasternak.exe" "${DRIVE_C_SCADOFFICE}/UCalc.exe" "${DRIVE_C_SCADOFFICE}/ViewProf.exe" "${DRIVE_C_SCADOFFICE}/SCalc.exe" "${DRIVE_C_SCADOFFICE}/AccelEdit.exe" "${DRIVE_C_SCADOFFICE}/BetaEdit.exe" "${DRIVE_C_SCADOFFICE}/MaterialsEdit.exe" "${DRIVE_C_SCADOFFICE}/Tonus.exe" "${DRIVE_C_SCADOFFICE}/Sezam.exe" "${DRIVE_C_SCADOFFICE}/SCADX.exe")
# Цикл создания десктоп файлов для scad office # Цикл для создания десктопных файлов
for i in "${!PROG_NAME[@]}"; do for i in "${!PROG_NAME[@]}"; do
create_desktop "${PROG_NAME[i]}" "${WIN_FILE_EXEC[i]}" "${PROG_ICON[i]}" "nocopy" create_desktop "${PROG_NAME[i]}" "${WIN_FILE_EXEC[i]}" "${PROG_ICON[i]}"
done done
fi fi
print_info "Установка дополнительных компонентов..."
if try_download "https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v01.tar.xz" "${ADDONS_PACK}" ; then
create_new_dir "${ADDONS_PATH}"
unpack "${ADDONS_PACK}" "${ADDONS_PATH}"
7z x -y "${OFFICE_EXE}" -o"${OFFICE_PACK}"
wine_run_install "${AUTOINSTALL_SETUP}" /qn
wine_run regedit "${ADDONS_PATH_REG}"/*.reg
# Установка ODBC
rm -fR "$DRIVE_C/Program Files (x86)/Common Files/System"
cp -r "${ADDONS_PATH_MDAC}/System" "$DRIVE_C/Program Files (x86)/Common Files/System"
cp -r "${ADDONS_PATH_MDAC}"/*.* "$DRIVE_C/windows/system32/"
wine_run regedit "${ADDONS_PATH_MDAC}"/*.reg
# Установка SSH
cp -r "${ADDONS_PATH_OPENSSH}" "$DRIVE_C/windows/system32/"
export PROG_NAME1="OpenOffice"
export PROG_ICON1="openoffice"
WIN_FILE_EXEC1="$DRIVE_C/Program Files (x86)/OpenOffice 4/program/soffice.exe"
create_desktop "$PROG_NAME1" "$WIN_FILE_EXEC1" "$PROG_ICON1"
try_remove_dir "$ADDONS_PATH"
try_remove_file "$ADDONS_PACK"
try_remove_file "$AUTOINSTALL_EXE"
fi

View File

@ -0,0 +1,102 @@
#!/usr/bin/env bash
# info_ru: Приложения для T-FLEX CAD 17 (T-FLEX Анализ 17, T-FLEX Динамика 17, T-FLEX Зубчатые передачи 17, T-FLEX ЧПУ 17, T-FLEX Раскрой 17, T-FLEX Электротехника 17, T-FLEX VR 17, T-FLEX Печатные платы 17)
########################################################################
export WH_WINDOWS_VER="10"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export BASE_PFX="tflex17_pfx_x64_v01"
export WINEARCH="win64"
export WINEPREFIX="tflex17"
BASE_URL="https://www.tflex.ru/downloads"
FILES=(
"T-FLEX Analysis 17.zip"
"T-FLEX Dynamics 17.zip"
"T-FLEX Gears 17.zip"
"T-FLEX CAM 17.zip"
"T-FLEX Nesting 17.zip"
"T-FLEX Electrical 17.zip"
"T-FLEX VR 17.zip"
"T-FLEX Circuits 17.zip"
)
UNPACK_APP="${WH_TMP_DIR}/unpack_applications"
prepair_wine
# Функция для распаковки файла
unpack_file() {
local archive="$1"
7z x -y "$archive" -o"${UNPACK_APP}"
}
# Функция для установки .msi файлов
install_msi_files() {
for msi_file in "${UNPACK_APP}"/*/*.msi; do
if [[ -f "$msi_file" ]]; then
echo "Установка $msi_file ..."
wine_run_install "$msi_file" /q
else
echo "Нет .msi файлов для установки в ${UNPACK_APP}/*."
fi
done
}
# Функция для кодирования URL
encode_url() {
local file_name="$1"
echo "${file_name// /%20}" # Заменяем пробелы на %20
}
# Вывод списка доступных файлов
list_files() {
echo "Доступные файлы для скачивания:"
for i in "${!FILES[@]}"; do
echo "$((i + 1)). ${FILES[$i]}"
done
}
# Скачивание одиночного файла
download_single() {
local index="$1"
local file_name="${FILES[$((index - 1))]}"
local file_url="$(encode_url "$file_name")"
local output="${WH_TMP_DIR}/${file_name// /_}"
if try_download "$BASE_URL/$file_url" "$output"; then
unpack_file "$output"
fi
}
# Скачивание всех файлов
download_all() {
for i in "${!FILES[@]}"; do
download_single "$((i + 1))"
done
}
# Основное меню
list_files
echo "Выберите опцию:"
echo "1. Скачать один файл и установить его."
echo "2. Скачать все файлы и установить их."
read -rp "Введите номер опции: " option
case "$option" in
1)
read -rp "Введите номер файла для скачивания (например, 1 для 'T-FLEX Analysis 17.zip'): " file_number
if [[ "$file_number" =~ ^[0-9]+$ ]] && (( file_number >= 1 && file_number <= ${#FILES[@]} )); then
download_single "$file_number"
else
echo "Неверный номер файла."
fi
;;
2)
download_all
;;
*)
echo "Неверный выбор. Попробуйте еще раз."
;;
esac
install_msi_files
try_remove_file ${WH_TMP_DIR}/*.zip
try_remove_dir "${UNPACK_APP}"

View File

@ -0,0 +1,101 @@
#!/usr/bin/env bash
# info_ru: Обучающие материалы, примеры, бесплатные библиотеки для T-FLEX CAD 17 (Учебное пособие 17, Стандартные элементы 17, Элементы уплотнительной техники 17, Станочные приспособления 17, Детали штампов листовой штамповки 17, Детали пресс-форм 17, Примеры 17)
########################################################################
export WH_WINDOWS_VER="10"
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
export BASE_PFX="tflex17_pfx_x64_v01"
export WINEARCH="win64"
export WINEPREFIX="tflex17"
BASE_URL="https://www.tflex.ru/downloads"
FILES=(
"T-FLEX Tutorial 17.zip"
"Standard parts 17.zip"
"Elements of sealing technology 17.zip"
"Machine tools 17.zip"
"Standard parts for sheet metal dies 17.zip"
"Standard Mold Parts 17.zip"
"Examples 17.zip"
)
UNPACK_RESOURCES="${WH_TMP_DIR}/unpack_resources"
prepair_wine
# Функция для распаковки файла
unpack_file() {
local archive="$1"
7z x -y "$archive" -o"${UNPACK_RESOURCES}"
}
# Функция для установки .msi файлов
install_msi_files() {
for msi_file in "${UNPACK_RESOURCES}"/*/*.msi; do
if [[ -f "$msi_file" ]]; then
echo "Установка $msi_file ..."
wine_run_install "$msi_file" /q
else
echo "Нет .msi файлов для установки в ${UNPACK_RESOURCES}/unpack_dop/*."
fi
done
}
# Функция для кодирования URL
encode_url() {
local file_name="$1"
echo "${file_name// /%20}" # Заменяем пробелы на %20
}
# Вывод списка доступных файлов
list_files() {
echo "Доступные файлы для скачивания:"
for i in "${!FILES[@]}"; do
echo "$((i + 1)). ${FILES[$i]}"
done
}
# Скачивание одиночного файла
download_single() {
local index="$1"
local file_name="${FILES[$((index - 1))]}"
local file_url="$(encode_url "$file_name")"
local output="${WH_TMP_DIR}/${file_name// /_}"
if try_download "$BASE_URL/$file_url" "$output"; then
unpack_file "$output"
fi
}
# Скачивание всех файлов
download_all() {
for i in "${!FILES[@]}"; do
download_single "$((i + 1))"
done
}
# Основное меню
list_files
echo "Выберите опцию:"
echo "1. Скачать один файл и установить его."
echo "2. Скачать все файлы и установить их."
read -rp "Введите номер опции: " option
case "$option" in
1)
read -rp "Введите номер файла для скачивания (например, 1 для 'T-FLEX Tutorial 17.zip'): " file_number
if [[ "$file_number" =~ ^[0-9]+$ ]] && (( file_number >= 1 && file_number <= ${#FILES[@]} )); then
download_single "$file_number"
else
echo "Неверный номер файла."
fi
;;
2)
download_all
;;
*)
echo "Неверный выбор. Попробуйте еще раз."
;;
esac
install_msi_files
try_remove_file ${WH_TMP_DIR}/*.zip
try_remove_dir "${UNPACK_RESOURCES}"

View File

@ -1,21 +0,0 @@
#!/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

View File

@ -22,7 +22,7 @@ windows приложения. Подробнее по ссылке: https://www.
apt-get install {i586-,}{glibc-core,libstdc++6,glibc-pthread,glibc-nss,\ apt-get install {i586-,}{glibc-core,libstdc++6,glibc-pthread,glibc-nss,\
libOSMesa,libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,\ libOSMesa,libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,\
libgnutls30,libGL,libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,\ libgnutls30,libGL,libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,\
libvulkan1,libcups} || fatal "Не удалось установить зависимости." libvulkan1,libcups} winetricks ca-certificates cups-pdf || fatal "Не удалось установить зависимости."
apt-get install {i586-,}wine apt-get install {i586-,}wine

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

View File

@ -3,7 +3,6 @@
3571c40a787f0386e0160b5d471b1bf11fa2a235b497156cd38198b90bcb4a9f wine_x_tkg_10-0_i586.tar.xz 3571c40a787f0386e0160b5d471b1bf11fa2a235b497156cd38198b90bcb4a9f wine_x_tkg_10-0_i586.tar.xz
71d6fdfd23d7988471d345c68e81699b8af931352b03dd216424b398f63c7b12 wine_x_tkg_10-0_amd64.tar.xz 71d6fdfd23d7988471d345c68e81699b8af931352b03dd216424b398f63c7b12 wine_x_tkg_10-0_amd64.tar.xz
fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193 wine-9.0.14-alt1-i586-spravkibk.tar.xz fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193 wine-9.0.14-alt1-i586-spravkibk.tar.xz
e0a84bb4908c3927954d7eef6b8ac7212e442b8c107d000c6890fec340f96183 wine-9.0.14-alt1-amd64.tar.xz
6f86d2220b65b709bf88c6f829a4998de3b929cc2091cd1333a51c32e1491b79 wine-9.0.9-alt1-i586.tar.xz 6f86d2220b65b709bf88c6f829a4998de3b929cc2091cd1333a51c32e1491b79 wine-9.0.9-alt1-i586.tar.xz
##### DXVK ##### ##### DXVK #####
@ -14,9 +13,6 @@ e0a84bb4908c3927954d7eef6b8ac7212e442b8c107d000c6890fec340f96183 wine-9.0.14-al
df1a940d2e072a884524f66a16e0f0ef74048bc6a6642b96eb257528a522109f vkd3d-proton-1.1-2602.tar.xz df1a940d2e072a884524f66a16e0f0ef74048bc6a6642b96eb257528a522109f vkd3d-proton-1.1-2602.tar.xz
##### CPCSP_PROXY #####
3153088ff28d6af415c3504a421e5382554dbb305f38d5a87dd84df90d680421 wine-cpcsp_proxy-0.6.1-alt1.tar.xz
##### PREFIX ##### ##### PREFIX #####
0e86cd9958d1bd1bfac99e23165a091a4ea2fa3e693c551f69aabeed5f681fea defpfx_x86_v01.tar.xz 0e86cd9958d1bd1bfac99e23165a091a4ea2fa3e693c551f69aabeed5f681fea defpfx_x86_v01.tar.xz
@ -67,9 +63,3 @@ dfb44ce5e5af7dba1686932c63d6b05e5dd6919a21c78130a7d1d0271b93958e audiorecstatio
00516ef51079d68ad0f9621c8270e0f86318539b63ebf1085d0faba36896e4ac daobit_pfx_x86_v01.tar.xz 00516ef51079d68ad0f9621c8270e0f86318539b63ebf1085d0faba36896e4ac daobit_pfx_x86_v01.tar.xz
# create with wine_x_tkg_10-0_i586 (universal user: xuser) # create with wine_x_tkg_10-0_i586 (universal user: xuser)
# winetricks arial dotnet7 dotnetdesktop7 renderer=gdi # winetricks arial dotnet7 dotnetdesktop7 renderer=gdi
25e277c7afa4a9afc5f013cb05f872c12a7f381c4f0503a423dcacccca9a14c6 scadaoffice_pfx_x64_v03.tar.xz
# create with wine_x_tkg_10-0_i586 (universal user: xuser)
# winetricks dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6 dotnet20
# + addons with ODBC, SSH, *.reg
0f4ef434df07bc338ae308af44330590eaa1d9c94b64850514e55b960642d0eb scadoffice_addons_v02.tar.xz

View File

@ -12,46 +12,23 @@ print_warning () { printf "\E[33m%s Предупреждение: $@ %s\e[0m\n"
print_info () { printf "\E[36m%s Информация: \"$@\" %s\e[0m\n" ;} print_info () { printf "\E[36m%s Информация: \"$@\" %s\e[0m\n" ;}
print_ok () { printf "\E[35m%s Успех: $@ %s\e[0m\n" ;} print_ok () { printf "\E[35m%s Успех: $@ %s\e[0m\n" ;}
print_var () { for vp in $@ ; do echo "${vp}=${!vp}" ; done ;} print_var () { for vp in $@ ; do echo "${vp}=${!vp}" ; done ;}
fatal () { fatal () { print_error "$@" ; exit 1 ;}
print_error "$@"
[[ -n "$WINESERVER" ]] && "$WINESERVER" -w
exit 1
}
##### CHECK VARIABLES ##### ##### CHECK VARIABLES #####
check_variables () { [[ -z ${!1} ]] && export $1="$2" ;} check_variables () { [[ -z ${!1} ]] && export $1="$2" ;}
##### CHECK DEBUG ##### ##### CHECK DEBUG #####
if [[ "$1" == "--debug" ]] ; then if [[ "$1" == "--debug" ]] ; then
check_variables WINEDEBUG "+loaddll,+seh" export DEBUG="full"
export DXVK_LOG_LEVEL="error"
export VKD3D_DEBUG "error"
export WINE_MONO_TRACE "E:System.NotImplementedException"
export VK_LOADER_DEBUG "error"
export VKBASALT_LOG_LEVEL "error"
export DXVK_NVAPI_LOG_LEVEL "error"
shift
else
check_variables WINEDEBUG "-all"
check_variables DXVK_LOG_LEVEL "none"
check_variables VKD3D_SHADER_DEBUG "none"
check_variables VKD3D_DEBUG "none"
check_variables DXVK_LOG_PATH "none"
check_variables VKBASALT_LOG_LEVEL "none"
check_variables DXVK_NVAPI_LOG_LEVEL "none"
fi
if [[ $WINEDEBUG != "-all" ]] ; then
export LOG_FILE="$HOME/winehelper.log" export LOG_FILE="$HOME/winehelper.log"
date > "$LOG_FILE" shift
print_warning "Включен режим логирования работы WINE." print_warning "Включен режим подробного логирования работы WINE."
print_warning "Лог будет сохранен по пути: $LOG_FILE" print_warning "Лог будет сохранен по пути: $LOG_FILE"
sleep 3 sleep 3
else
check_variables DEBUG "0"
fi fi
##### WINETRICKS VERSION #####
WINETRICKS_VERSION="20250102"
##### DEFAULT VARIABLES ##### ##### DEFAULT VARIABLES #####
SCRIPT_NAME="$(basename "$0")" SCRIPT_NAME="$(basename "$0")"
if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
@ -73,11 +50,6 @@ WH_IMAGE_PATH="$DATA_PATH/image"
WH_DB_DIR="$DATA_PATH/database" WH_DB_DIR="$DATA_PATH/database"
WH_AUTOINSTALL_DIR="$DATA_PATH/autoinstall" WH_AUTOINSTALL_DIR="$DATA_PATH/autoinstall"
WH_MANUALINSTALL_DIR="$DATA_PATH/manualinstall" WH_MANUALINSTALL_DIR="$DATA_PATH/manualinstall"
WH_WINETRICKS="$DATA_PATH/winetricks_$WINETRICKS_VERSION"
WH_MENU_DIR="$HOME/.local/share/applications/WineHelper"
WH_MENU_CATEGORY="$HOME/.local/share/desktop-directories/WineHelper.directory"
WH_MENU_CONFIG="$HOME/.config/menus/applications-merged/WineHelper.menu"
# export WINEDLLOVERRIDES=mshtml,mscoree=" # export WINEDLLOVERRIDES=mshtml,mscoree="
@ -87,9 +59,6 @@ check_variables WINEFSYNC "0"
check_variables WINEARCH "win64" # or "win32" check_variables WINEARCH "win64" # or "win32"
check_variables WH_WINE_USE "wine_x_tkg_10-0_amd64" # or system check_variables WH_WINE_USE "wine_x_tkg_10-0_amd64" # or system
check_variables WH_USE_CPCSP_PROXY "0"
check_variables CPCSP_PROXY_VER "0.6.1-alt1"
check_variables STAGING_SHARED_MEMORY "1" check_variables STAGING_SHARED_MEMORY "1"
check_variables WINE_LARGE_ADDRESS_AWARE "1" check_variables WINE_LARGE_ADDRESS_AWARE "1"
check_variables WINE_FULLSCREEN_FSR "1" check_variables WINE_FULLSCREEN_FSR "1"
@ -120,21 +89,25 @@ check_variables VKD3D_VER "1.1-2602"
export CLOUD_URL="https://cloud.linux-gaming.ru/portproton" export CLOUD_URL="https://cloud.linux-gaming.ru/portproton"
##### CHECK NOEXEC FOR /HOME ##### ##### CHECK NOEXEC FOR /HOME #####
if mount -l | grep -E "[[:space:]]/home[[:space:]]" | grep -q "noexec" ; then if grep "/home" /etc/fstab | grep -q "noexec" ; then
fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗапуск портативной версии wine не возможен из домашнего каталога." fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗапуск портативной версии wine не возможен из домашнего каталога."
fi fi
##### ROOT ##### ##### ROOT #####
su_run () { su_run () {
print_info "Для продолжения установки введите root пароль..." print_info "Для продолжения установки зависимостей введите root пароль..."
su - -c "$@" su - -c "$@"
} }
##### CHECK DEPENDENCIES ##### ##### CHECK DEPENDENCIES #####
if ! rpm -q {i586-,}{wine,glibc-core,libstdc++6,glibc-pthread,glibc-nss,libOSMesa,\ # yad zenity cups-pdf
if rpm -q {i586-,}{wine,glibc-core,libstdc++6,glibc-pthread,glibc-nss,libOSMesa,\
libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,libgnutls30,libGL,\ libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,libgnutls30,libGL,\
libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} 1>/dev/null libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} \
then winetricks ca-certificates cups-pdf 1>/dev/null
then : # Зависимости установлены. Пропускаем...
else
if su_run "$DATA_PATH/dependencies.sh" if su_run "$DATA_PATH/dependencies.sh"
then print_info "Зависимости успешно установлены. Продолжаем работу $SCRIPT_NAME" then print_info "Зависимости успешно установлены. Продолжаем работу $SCRIPT_NAME"
else fatal "Не удалось установить зависимости. Работа $SCRIPT_NAME прервана." else fatal "Не удалось установить зависимости. Работа $SCRIPT_NAME прервана."
@ -142,6 +115,15 @@ then
fi fi
##### HELPER FUNCTIONS ##### ##### HELPER FUNCTIONS #####
check_command () {
if command -v "$1" &>/dev/null ; then
return 0
else
print_warning "command: $1 - not found!"
return 1
fi
}
add_to_var () { add_to_var () {
if ! echo ${!1} | grep "$2" &>/dev/null if ! echo ${!1} | grep "$2" &>/dev/null
then export $1="${!1} $2" then export $1="${!1} $2"
@ -169,9 +151,9 @@ try_remove_dir () {
} }
try_copy_file () { try_copy_file () {
if [[ ! -f "$1" ]] ; then print_info "файла $1 не существует для копирования" && return 1 if [[ ! -f "$1" ]] ; then print_info "file $1 not found for copy" && return 1
elif [[ -z "$2" ]] ; then fatal "нет пути для копирования файла $1" elif [[ -z "$2" ]] ; then print_error "no way to copy file $1" && return 1
elif [[ -L "$2" ]] ; then elif [[ -L "$2" ]] ; then print_warning "$2 is a file with a symbolic link"
try_remove_file "$2" try_remove_file "$2"
cp -f "$1" "$2" && return 0 || return 1 cp -f "$1" "$2" && return 0 || return 1
else else
@ -181,24 +163,24 @@ try_copy_file () {
} }
try_copy_dir () { try_copy_dir () {
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для копирования" if [[ ! -d "$1" ]] ; then print_info "directory $1 not found for copy"
elif [[ -z "$2" ]] ; then fatal "нет пути для копирования каталога $1" elif [[ -z "$2" ]] ; then print_error "no way to copy directory $1"
else else
cp -fr "$1" "$2" cp -fr "$1" "$2"
[[ "$?" != 0 ]] && print_error "не удалось скопировать каталог $1 в $2" || return 0 [[ "$?" != 0 ]] && print_error "failed to copy directory $1 to $2" || return 0
fi fi
return 1 return 1
} }
try_force_link_file () { try_force_link_file () {
if [[ ! -f "$1" ]] ; then if [[ ! -f "$1" ]] ; then
print_warning "нет файла для создания символьной ссылки: $1" print_warning "file not found for link: $1"
if [[ -f "$2" ]] ; then if [[ -f "$2" ]] ; then
try_remove_file "$2" try_remove_file "$2"
print_warning "удаляем символьную ссылку: $2" print_warning "removed old link: $2"
fi fi
return 1 return 1
elif [[ -z "$2" ]] ; then fatal "нет пути для создания символьной ссылки на файл $1" elif [[ -z "$2" ]] ; then print_error "no way to link file $1" && return 1
else else
try_remove_file "$2" try_remove_file "$2"
ln -s -f -r "$1" "$2" ln -s -f -r "$1" "$2"
@ -207,12 +189,25 @@ try_force_link_file () {
return 1 return 1
} }
check_symlink () {
local CHK_SYMLINK_FILE="$(file "$1")"
if [[ -n "$(echo "$CHK_SYMLINK_FILE" | grep -v "broken" | grep "symbolic link to" | awk '{print $1}')" ]] ; then
return 0
elif [[ -n "$(echo "$CHK_SYMLINK_FILE" | grep "broken symbolic link to" | awk '{print $1}')" ]] ; then
print_error "remove broken symlink: $CHK_SYMLINK_FILE"
rm -fr "$CHK_SYMLINK_FILE"
return 1
else
return 1
fi
}
try_force_link_dir () { try_force_link_dir () {
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для создания символьной сссылки" if [[ ! -d "$1" ]] ; then print_info "directory $1 not found for link"
elif [[ -z "$2" ]] ; then fatal "не указан путь для создания символьной ссылки на каталог $1" elif [[ -z "$2" ]] ; then print_error "no way to link directory $1"
else else
ln -s -f -r "$1" "$2" ln -s -f -r "$1" "$2"
[[ "$?" != 0 ]] && print_error "не удалось сделать символьную ссылку на каталог $1 по пути $2" || return 0 [[ "$?" != 0 ]] && print_error "failed to link directory $1 to $2" || return 0
fi fi
return 1 return 1
} }
@ -312,6 +307,7 @@ try_copy_wine_dll_to_pfx_32() {
fi fi
} }
##### OVERRIDE VARIABLES FUNCTIONS #####
var_winedlloverride_update () { var_winedlloverride_update () {
if [[ -n "${WINEDLLOVERRIDES}" ]] if [[ -n "${WINEDLLOVERRIDES}" ]]
then export WINEDLLOVERRIDES="${1};${WINEDLLOVERRIDES}" then export WINEDLLOVERRIDES="${1};${WINEDLLOVERRIDES}"
@ -319,9 +315,9 @@ var_winedlloverride_update () {
fi fi
} }
var_dxvk_config_update () { var_vkd3d_config_update () {
if [[ -n "${DXVK_CONFIG}" ]] if [[ -n "${DXVK_CONFIG}" ]]
then export DXVK_CONFIG="${1};${DXVK_CONFIG}" then export DXVK_CONFIG="${1}; ${DXVK_CONFIG}"
else export DXVK_CONFIG="${1}" else export DXVK_CONFIG="${1}"
fi fi
} }
@ -357,10 +353,10 @@ var_ld_library_path_update () {
return 0 return 0
} }
##### CREATE DESKTOP FILE #####
create_desktop () { create_desktop () {
local name_desktop="$1" local name_desktop="$1"
local exe_file="$2" local exe_file="$2"
local desktop_filename="$(basename "$exe_file" .exe | sed "s| |_|")"
local icon_file="$WH_IMAGE_PATH/$3.png" local icon_file="$WH_IMAGE_PATH/$3.png"
if [[ -z "$name_desktop" ]] || [[ -z "$exe_file" ]] ; then if [[ -z "$name_desktop" ]] || [[ -z "$exe_file" ]] ; then
@ -383,78 +379,24 @@ create_desktop () {
fi fi
fi fi
# создаем .desktop файл
create_new_dir "$WH_MENU_DIR"
[[ ! -f "$icon_file" ]] && icon_file=wine [[ ! -f "$icon_file" ]] && icon_file=wine
{ {
echo "[Desktop Entry]" echo "[Desktop Entry]"
echo "Name=$name_desktop" echo "Name=$name_desktop"
echo "Exec=env \"$RUN_SCRIPT\" \"$exe_file\" %F" echo "Exec=env \"$RUN_SCRIPT\" \"$exe_file\" %F"
echo "Type=Application" echo "Type=Application"
echo "Categories=WineHelper;" echo "Categories=Other;"
echo "StartupNotify=true" echo "StartupNotify=true"
echo "Path=$DATA_PATH" echo "Path=$DATA_PATH"
echo "Icon=$icon_file" echo "Icon=$icon_file"
} > "$USER_WORK_PATH/$desktop_filename.desktop" } > "$USER_WORK_PATH/$name_desktop.desktop"
chmod +x "$USER_WORK_PATH/$desktop_filename.desktop" chmod +x "$USER_WORK_PATH/$name_desktop.desktop"
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/" create_new_dir "$HOME/.local/share/applications/"
# cp -f "$USER_WORK_PATH/$name_desktop.desktop" "$HOME/.local/share/applications/"
# добавляем информацию о приложении в "$WINEPREFIX/desktop.list" cp -f "$USER_WORK_PATH/$name_desktop.desktop" "$(xdg-user-dir DESKTOP)"
if [[ -f "$WINEPREFIX/desktop.list" ]] \ print_info "На рабочем столе создан $name_desktop.desktop"
&& grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list"
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list"
fi
create_new_dir "$WINEPREFIX/icons"
try_copy_file "$icon_file" "$WINEPREFIX/icons/"
echo "$name_desktop=${exe_file//$WINEPREFIX/}=$(basename "$icon_file")" >> "$WINEPREFIX/desktop.list"
# создаем файл категории для меню
create_new_dir "$HOME/.local/share/desktop-directories"
if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then
cat > "$WH_MENU_CATEGORY" <<EOF
[Desktop Entry]
Type=Directory
Name=WineHelper
Icon=wine
EOF
fi
# Создаем файл меню для всех приложений
create_new_dir "$HOME/.config/menus/applications-merged"
if [[ ! -f "$WH_MENU_CONFIG" ]] ; then
cat > "$WH_MENU_CONFIG" <<EOF
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
"http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
<Menu>
<Name>Applications</Name>
<Menu>
<Name>WineHelper</Name>
<Directory>WineHelper.directory</Directory>
<Include>
<Category>WineHelper</Category>
</Include>
</Menu>
</Menu>
EOF
fi
# Обновляем кэш desktop файлов
update-desktop-database "$HOME/.local/share/applications"
if [[ $4 != "nocopy" ]] ; then
if [[ -n $4 ]] ; then
local desktop_path="$(xdg-user-dir DESKTOP)/$4"
create_new_dir "$desktop_path"
print_info "В меню создан $desktop_filename.desktop и скопирован на рабочий стол в каталог $4"
else
local desktop_path="$(xdg-user-dir DESKTOP)"
print_info "В меню и на рабочем столе создан $desktop_filename.desktop"
fi
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$desktop_path"
else
print_info "В меню создан $desktop_filename.desktop"
fi
if [[ -n "$INSTALL_SCRIPT_NAME" ]] \ if [[ -n "$INSTALL_SCRIPT_NAME" ]] \
&& [[ -f "$exe_file" ]] && [[ -f "$exe_file" ]]
@ -470,26 +412,16 @@ EOF
fi fi
} }
##### REMOVE DESKTOP FILE #####
remove_desktop () { remove_desktop () {
if [[ -n "$1" ]] ; then if [[ -n "$1" ]] ; then
try_remove_file "$USER_WORK_PATH/$1.desktop" try_remove_file "$USER_WORK_PATH/$1.desktop"
try_remove_file "$WH_MENU_DIR/$1.desktop"
try_remove_file "$HOME/.local/share/applications/$1.desktop" try_remove_file "$HOME/.local/share/applications/$1.desktop"
try_remove_file "$(xdg-user-dir DESKTOP)/$1.desktop" try_remove_file "$(xdg-user-dir DESKTOP)/$1.desktop"
fi fi
# Удаляем категорию если она пуста
if [[ -d "$WH_MENU_DIR" ]] && [[ -z "$(ls -A "$WH_MENU_DIR")" ]]; then
try_remove_dir "$WH_MENU_DIR"
try_remove_file "$WH_MENU_CATEGORY"
try_remove_file "$WH_MENU_CONFIG"
fi
# Обновляем кэш desktop файлов
update-desktop-database "$HOME/.local/share/applications"
} }
##### INSTALLED PROGRAMS #####
check_installed_programs () { check_installed_programs () {
for desktop_file in "$USER_WORK_PATH"/*.desktop ; do for desktop_file in "$USER_WORK_PATH"/*.desktop ; do
if [[ ! -f "$desktop_file" ]] ; then if [[ ! -f "$desktop_file" ]] ; then
@ -528,6 +460,7 @@ run_installed_programs () {
fi fi
} }
##### USED WINED3D LIBRARY #####
init_wined3d () { init_wined3d () {
if [[ "$USE_RENDERER" != "proton" ]] ; then if [[ "$USE_RENDERER" != "proton" ]] ; then
WINED3D_FILES="d3d8 d3d9 d3d10_1 d3d10 d3d10core d3d11 dxgi d3d12 d3d12core" WINED3D_FILES="d3d8 d3d9 d3d10_1 d3d10 d3d10core d3d11 dxgi d3d12 d3d12core"
@ -545,6 +478,7 @@ init_wined3d () {
fi fi
} }
##### CHECK VULKAN LIBRARY #####
init_dxvk () { init_dxvk () {
check_variables USE_DXVK_VER "$1" check_variables USE_DXVK_VER "$1"
@ -612,19 +546,27 @@ init_vkd3d () {
done done
} }
##### DOWNLOAD WINE #####
download_wine () {
if [[ ! -d "$WH_DIST_DIR/$WH_WINE_USE" ]] ; then
WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz"
local WINE_PACKAGE="$WH_TMP_DIR/${WH_WINE_USE}.tar.xz"
if try_download "$WINE_URL" "$WINE_PACKAGE" check256sum ; then
if unpack "$WINE_PACKAGE" "$WH_DIST_DIR/" ; then
echo "$WH_WINE_USE" > "$WH_DIST_DIR/$WH_WINE_USE/version"
try_remove_file "$WINE_PACKAGE"
fi
fi
fi
}
##### INITIAL WINE SETTINGS #####
init_wine_ver () { init_wine_ver () {
if [[ "$WH_WINE_USE" != system* ]] ; then if [[ "$WH_WINE_USE" != system* ]] ; then
export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE" export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE"
if [[ ! -d "$WINEDIR" ]] ; then if [[ ! -d "$WINEDIR" ]] ; then
WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz" download_wine
local WINE_PACKAGE="$WH_TMP_DIR/${WH_WINE_USE}.tar.xz"
if try_download "$WINE_URL" "$WINE_PACKAGE" check256sum ; then
if unpack "$WINE_PACKAGE" "$WH_DIST_DIR/" ; then
echo "$WH_WINE_USE" > "$WH_DIST_DIR/$WH_WINE_USE/version"
try_remove_file "$WINE_PACKAGE"
fi
fi
fi fi
export WINE="${WINEDIR}/bin/wine" export WINE="${WINEDIR}/bin/wine"
@ -647,14 +589,7 @@ init_wine_ver () {
export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib/gstreamer-1.0" export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib/gstreamer-1.0"
fi fi
[[ ! -f "${WINEDIR}/version" ]] && echo "${WH_WINE_USE}" > "${WINEDIR}/version" if [[ "${WINEARCH}" == "win64" ]] ; then
if [[ ! -d "${WINEDIR}/lib64/wine" ]] && [[ -d "${WINEDIR}/lib/wine/x86_64-unix" ]] ; then
create_new_dir "${WINEDIR}/lib64/"
try_force_link_dir "${WINEDIR}/lib/wine/" "${WINEDIR}/lib64/"
fi
if [[ -d "${WINEDIR}/lib64" ]] ; then
export LD_LIBRARY_PATH+=":${WINEDIR}/lib64" export LD_LIBRARY_PATH+=":${WINEDIR}/lib64"
export WINEDLLPATH+=":${WINEDIR}/lib64/wine" export WINEDLLPATH+=":${WINEDIR}/lib64/wine"
if [[ -d "${WINEDIR}/lib64/gstreamer-1.0" ]] ; then if [[ -d "${WINEDIR}/lib64/gstreamer-1.0" ]] ; then
@ -662,28 +597,12 @@ init_wine_ver () {
fi fi
fi fi
if [[ $WH_USE_CPCSP_PROXY == "1" ]] \ [[ ! -f "${WINEDIR}/version" ]] && echo "${WH_WINE_USE}" > "${WINEDIR}/version"
&& ! grep -q "$CPCSP_PROXY_VER" "${WINEDIR}/cpcsp_proxy.ver"
then
CPCSP_PROXY_NAME="wine-cpcsp_proxy-$CPCSP_PROXY_VER"
CPCSP_PROXY_URL="$CLOUD_URL/$CPCSP_PROXY_NAME.tar.xz"
if [[ ! -f "$WH_TMP_DIR/$CPCSP_PROXY_NAME" ]] ; then if [[ ! -d "${WINEDIR}/lib64/" ]] && [[ -d "${WINEDIR}/lib/wine/x86_64-unix" ]] ; then
print_info "Загрузка $CPCSP_PROXY_NAME.tar.xz" create_new_dir "${WINEDIR}/lib64/wine"
if try_download "$CPCSP_PROXY_URL" "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" check256sum mv -f "${WINEDIR}/lib/wine/x86_64-unix" "${WINEDIR}/lib64/wine/"
then unpack "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" "$WH_TMP_DIR" mv -f "${WINEDIR}/lib/wine/x86_64-windows" "${WINEDIR}/lib64/wine/"
else try_remove_file "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz"
fi
else
unpack "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" "$WH_TMP_DIR"
fi
cp -fr "$WH_TMP_DIR/$CPCSP_PROXY_NAME/"i386-* "${WINEDIR}/lib/wine/"
if [[ -d "${WINEDIR}/lib64" ]] ; then
cp -fr "$WH_TMP_DIR/$CPCSP_PROXY_NAME/"x86_64-* "${WINEDIR}/lib64/wine/"
fi
try_remove_dir "$WH_TMP_DIR/$CPCSP_PROXY_NAME"
echo "$CPCSP_PROXY_VER" > "${WINEDIR}/cpcsp_proxy.ver"
fi fi
else else
# use system WINE # use system WINE
@ -695,11 +614,33 @@ init_wine_ver () {
export WINESERVER="wineserver" export WINESERVER="wineserver"
fi fi
check_variables DXVK_LOG_LEVEL "none"
check_variables VKD3D_SHADER_DEBUG "none"
check_variables VKD3D_DEBUG "none"
check_variables DXVK_LOG_PATH "none"
check_variables VKBASALT_LOG_LEVEL "none"
check_variables DXVK_NVAPI_LOG_LEVEL "none"
if [[ $DEBUG == "0" ]] ; then
check_variables WINEDEBUG "-all"
elif [[ $DEBUG == "full" ]] ; then
check_variables WINEDEBUG "+loaddll,+seh"
export DXVK_LOG_LEVEL="error"
export VKD3D_DEBUG "error"
export WINE_MONO_TRACE "E:System.NotImplementedException"
export VK_LOADER_DEBUG "error"
export VKBASALT_LOG_LEVEL "error"
export DXVK_NVAPI_LOG_LEVEL "error"
else
check_variables WINEDEBUG "err+all"
fi
print_info "Используется версия wine: $WH_WINE_USE" print_info "Используется версия wine: $WH_WINE_USE"
} }
##### INITIAL WINEPREFIX SETTINGS #####
get_and_set_reg_file () { get_and_set_reg_file () {
convert_dec_and_hex () { convert_dec_and_hex () {
local type=$1 local type=$1
local num=$2 local num=$2
@ -729,23 +670,14 @@ get_and_set_reg_file () {
case $name_type_reg in case $name_type_reg in
REG_DWORD) REG_DWORD)
if [[ $name_for_find != '@=' ]] name_for_find="\"$name_for_find\"=dword:"
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") ;; name_for_set=$(convert_dec_and_hex --dec "$name_for_set") ;;
REG_SZ) REG_SZ)
if [[ $name_for_find != '@=' ]] name_for_find="\"$name_for_find\"="
then name_for_find="\"$name_for_find\"="
else name_for_find="@="
fi
name_for_set="\"$name_for_set\"" ;; name_for_set="\"$name_for_set\"" ;;
*) *)
if [[ $name_add_or_del == --delete ]] ; then if [[ $name_add_or_del == --delete ]] ; then
if [[ $name_for_find != '@=' ]] name_for_find="\"$name_for_find\""
then name_for_find="\"$name_for_find\""
else name_for_find="@="
fi
else else
print_error "не задан тип ветки реестра: $name_fatal" print_error "не задан тип ветки реестра: $name_fatal"
return 1 return 1
@ -793,20 +725,24 @@ get_and_set_reg_file () {
fi fi
fi fi
if [[ $find_check_file == 1 ]] ; then if [[ $find_check_file == 1 ]] ; then
print_info "Меняем $name_for_find_old в ветке реестра: $name_block" print_info "Меняем $name_for_find_old в файле реестра"
sed -i "${find_number_line}s|$name_for_find.*|$name_for_find$name_for_set|" "$find_file" sed -i "${find_number_line}s|$name_for_find.*|$name_for_find$name_for_set|" "$find_file"
else else
print_info "Добавляем $name_for_find_old в ветку реестра: $name_block" print_info "Добавляем $name_for_find_old в файл реестра"
sed -i "$(( find_line + 1 ))a$name_for_find$name_for_set" "$find_file" sed -i "$(( find_line + 1 ))a$name_for_find$name_for_set" "$find_file"
fi fi
elif [[ $name_add_or_del == --delete ]] ; then elif [[ $name_add_or_del == --delete ]] ; then
[[ $find_check_file != 1 ]] && return 0 [[ $find_check_file != 1 ]] && return 0
print_info "Удаляем $name_for_find_old из ветки реестра: $name_block" print_info "Удаляем $name_for_find_old из файла реестра"
sed -i "${find_number_line}d" "$find_file" sed -i "${find_number_line}d" "$find_file"
fi fi
} }
wait_wineserver () { wait_wineserver () {
# while [[ -n "$(ls -l /proc/*/exe 2>/dev/null | grep -ie portproton | grep -E 'wine(64)?-preloader|wineserver' | awk -F/ '{print $3}')" ]] ; do
# sleep 1
# done
"$WINESERVER" -w "$WINESERVER" -w
} }
@ -830,46 +766,18 @@ get_base_pfx () {
fi fi
} }
check_prefix_var () {
if [[ -z "$WINEPREFIX" ]] ; then
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 -qv '/' ; then
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
fi
return 0
}
init_wineprefix () { 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"
fi
fi
if [[ "$WINEARCH" == "win32" ]] if [[ "$WINEARCH" == "win32" ]]
then check_variables BASE_PFX "defpfx_x86_v01" then check_variables BASE_PFX "defpfx_x86_v01"
@ -887,8 +795,8 @@ init_wineprefix () {
fi fi
print_info "Обновление префикса $WINEPREFIX." print_info "Обновление префикса $WINEPREFIX."
if [[ -d "$WINEPREFIX/drive_c/windows" ]] if [[ -d "$WINEPREFIX/drive_c/windows" ]]
then "$WINELOADER" wineboot -u then env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" wineboot -u
else "$WINELOADER" wineboot -i else env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" wineboot -i
fi fi
touch "$WINEPREFIX/.firstboot" touch "$WINEPREFIX/.firstboot"
wait_wineserver wait_wineserver
@ -901,7 +809,7 @@ init_wineprefix () {
&& [[ "$WINEARCH" != "win32" ]] && [[ "$WINEARCH" != "win32" ]]
then export WH_WINDOWS_VER="xp64" then export WH_WINDOWS_VER="xp64"
fi fi
"$WINELOADER" winecfg -v $(echo "win${WH_WINDOWS_VER}" | sed 's/.*/\L&/') env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" winecfg -v $(echo "win${WH_WINDOWS_VER}" | sed 's/.*/\L&/')
wait_wineserver wait_wineserver
print_info "Windows версия изменена на win${WH_WINDOWS_VER}" print_info "Windows версия изменена на win${WH_WINDOWS_VER}"
fi fi
@ -927,90 +835,9 @@ init_wineprefix () {
get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXRandR' get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXRandR'
get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXVidMode' get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXVidMode'
fi 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
# настраиваем префикс для работы с cpcsp_proxy
if [[ $WH_USE_CPCSP_PROXY == "1" ]] ; then
for cpcsp_proxy_file in "cpcsp_proxy.dll" "cpcsp_proxy_setup.exe" ; do
try_copy_wine_dll_to_pfx_64 "$cpcsp_proxy_file"
try_copy_wine_dll_to_pfx_32 "$cpcsp_proxy_file"
done
if ! grep -q "cpcsp_proxy.dll" "$WINEPREFIX/system.reg" ; then
if [[ "$WINEARCH" == "win32" ]]
then cpcsp_proxy_cmd=("$WINELOADER" "cpcsp_proxy_setup.exe")
else cpcsp_proxy_cmd=("${WINELOADER}64" "cpcsp_proxy_setup.exe")
fi
print_info "Запускаем настройку cpcsp_proxy..."
unset CPCSP_PROXY_OK
set -o pipefail
for ((i=2; i < 6; i++)) ; do
"${cpcsp_proxy_cmd[@]}" | tee "$WINEPREFIX/cpcsp_setup.log"
local CPCSP_EXIT_STATUS="${PIPESTATUS[0]}"
if grep -q "failed to load /opt/cprocsp/" "$WINEPREFIX/cpcsp_setup.log" ; then
fatal "Проверьте правильность установки CryptoPro в системе.\n Инструкция: https://www.altlinux.org/CryptoPro"
fi
if [[ $CPCSP_EXIT_STATUS == "0" ]] ; then
print_info "Настройка cpcsp_proxy успешно завершена."
CPCSP_PROXY_OK="1"
break
fi
print_warning "Попытка $i из 5..."
wait_wineserver
done
wait_wineserver
try_remove_file "$WINEPREFIX/cpcsp_setup.log"
[[ $CPCSP_PROXY_OK != "1" ]] && fatal "Ошибка во время настройки cpcsp_proxy."
fi
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 #####
kill_autostart () { kill_autostart () {
[[ -z "${1}" ]] && fatal "Нет аргумента для функции kill_autostart." [[ -z "${1}" ]] && fatal "Нет аргумента для функции kill_autostart."
[[ -z "${2}" ]] && SWAIT=3 || SWAIT="${2}" [[ -z "${2}" ]] && SWAIT=3 || SWAIT="${2}"
@ -1027,6 +854,25 @@ kill_autostart () {
done done
} }
update_winetricks () {
W_TRX_URL="https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks"
W_TRX_EXT_VER="$(curl -s --list-only "$W_TRX_URL" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
print_info "Актуальная версия winetricks: $W_TRX_EXT_VER"
if [[ -f "$WH_TMP_DIR/winetricks" ]] ; then
W_TRX_INT_VER="$(cat "$WH_TMP_DIR/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
print_info "Установленная портативная версия winetricks: $W_TRX_INT_VER"
fi
if [[ -n "$W_TRX_EXT_VER" ]] && [[ "$W_TRX_INT_VER" != "$W_TRX_EXT_VER" ]] ; then
if try_download "$W_TRX_URL" "$WH_TMP_DIR/winetricks_new" ; then
mv -f "$WH_TMP_DIR/winetricks_new" "$WH_TMP_DIR/winetricks"
W_TRX_INT_VER="$(cat "$WH_TMP_DIR/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/_VERSION=//')"
print_info "Портативная версия winetricks обновлена до (${W_TRX_INT_VER})"
chmod u+x "$WH_TMP_DIR/winetricks"
fi
fi
export WINETRICKS="$WH_TMP_DIR/winetricks"
}
use_winetricks () { use_winetricks () {
if [[ -n "$INSTALL_DLL" ]] ; then if [[ -n "$INSTALL_DLL" ]] ; then
WH_DLL_INSTALL="$(echo "$INSTALL_DLL $WH_DLL_INSTALL" | awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){printf("%s ",i)} }' )" WH_DLL_INSTALL="$(echo "$INSTALL_DLL $WH_DLL_INSTALL" | awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){printf("%s ",i)} }' )"
@ -1036,6 +882,10 @@ use_winetricks () {
USE_WT_FROM_DB=0 USE_WT_FROM_DB=0
[[ ! -f "$WINEPREFIX/winetricks.log" ]] && touch "$WINEPREFIX/winetricks.log" [[ ! -f "$WINEPREFIX/winetricks.log" ]] && touch "$WINEPREFIX/winetricks.log"
for need_install_dll_to_pfx in $WH_DLL_INSTALL "isolate_home" ; do for need_install_dll_to_pfx in $WH_DLL_INSTALL "isolate_home" ; do
if [[ "$need_install_dll_to_pfx" == vcrun201[5-9] ]] ; then
sed -i "/${need_install_dll_to_pfx}/d" "$WINEPREFIX/winetricks.log"
need_install_dll_to_pfx="vcrun2022"
fi
if ! grep "$need_install_dll_to_pfx" "$WINEPREFIX/winetricks.log" &>/dev/null ; then if ! grep "$need_install_dll_to_pfx" "$WINEPREFIX/winetricks.log" &>/dev/null ; then
if [[ -z "$WH_DLL_NEED_INSTALL" ]] if [[ -z "$WH_DLL_NEED_INSTALL" ]]
then WH_DLL_NEED_INSTALL="$need_install_dll_to_pfx" then WH_DLL_NEED_INSTALL="$need_install_dll_to_pfx"
@ -1045,11 +895,13 @@ use_winetricks () {
fi fi
done done
if [[ "$USE_WT_FROM_DB" == "1" ]] ; then if [[ "$USE_WT_FROM_DB" == "1" ]] ; then
print_info "Пробуем установить компоненты: ${WH_DLL_NEED_INSTALL}" if update_winetricks ; then
print_info "Запускаем WINETRICKS..." print_info "Пробуем установить библиотеки: ${WH_DLL_NEED_INSTALL}"
export WINETRICKS_DOWNLOADER="curl" print_info "Запускаем WINETRICKS..."
"$WH_WINETRICKS" -q ${WH_DLL_NEED_INSTALL} export WINETRICKS_DOWNLOADER="curl"
wait_wineserver env WINEDLLOVERRIDES="winegstreamer=" "$WH_TMP_DIR/winetricks" -q ${WH_DLL_NEED_INSTALL}
wait_wineserver
fi
fi fi
fi fi
} }
@ -1065,29 +917,28 @@ kill_wine () {
} }
init_database () { init_database () {
WHDB_FILE="0"
if [[ -f "$WIN_FILE_EXEC" ]] ; then if [[ -f "$WIN_FILE_EXEC" ]] ; then
WHDB="$(basename "$WIN_FILE_EXEC" .exe)" WHDB="$(basename "$WIN_FILE_EXEC" .exe)"
if [[ -f "$WIN_FILE_EXEC".whdb ]] ; then if [[ -f "$WIN_FILE_EXEC".whdb ]] ; then
WHDB_FILE="$WIN_FILE_EXEC".whdb WHDB_FILE="$WIN_FILE_EXEC".whdb
else else
orig_IFS="$IFS" && IFS=$'\n' orig_IFS="$IFS"
if WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )" ; then 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
WHDB_FILE="$WH_FIND_DB_FILE" WHDB_FILE="$WH_FIND_DB_FILE"
fi fi
IFS="$orig_IFS" IFS="$orig_IFS"
fi fi
fi if [[ "$WHDB_FILE" ]] ; then
print_info "Используется файл настроек: $WHDB_FILE"
if [[ "$WHDB_FILE" != "0" ]] ; then . "$WHDB_FILE"
print_info "Используется файл настроек: $WHDB_FILE" else
. "$WHDB_FILE" print_warning "Файл настроек не найден. Пропускаем."
elif check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then fi
print_info "Найдены настройки из предыдущего использования префикса: $WINEPREFIX"
cat "$WINEPREFIX/last.conf"
. "$WINEPREFIX/last.conf"
else
print_warning "Файл настроек не найден. Пропускаем."
fi fi
} }
@ -1113,10 +964,7 @@ prepair_wine () {
var_winedlloverride_update "winemenubuilder.exe=d" var_winedlloverride_update "winemenubuilder.exe=d"
if [[ -n "$INSTALL_SCRIPT_NAME" ]] init_database
then print_info "Используются настройки из скрипта установки: $INSTALL_SCRIPT_NAME"
else init_database
fi
init_wine_ver init_wine_ver
init_wineprefix init_wineprefix
use_winetricks use_winetricks
@ -1134,15 +982,13 @@ wine_run () {
WIN_FILE_PATH="$(dirname "$WIN_FILE_EXEC")" WIN_FILE_PATH="$(dirname "$WIN_FILE_EXEC")"
[[ -d "$WIN_FILE_PATH" ]] && cd "$WIN_FILE_PATH" [[ -d "$WIN_FILE_PATH" ]] && cd "$WIN_FILE_PATH"
if [[ -n $LOG_FILE ]] && [[ -f "$LOG_FILE" ]] ; then if [[ $DEBUG == "0" ]] ; then
echo "##### Основные переменные #####" | tee -a "$LOG_FILE"
env | grep -e "WH_" -e "WINE" -e "DXVK" -e "VKD3D" | tee -a "$LOG_FILE"
echo "##### Лог WINE #####" | tee -a "$LOG_FILE"
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS 2>&1 | tee -a "$LOG_FILE"
else
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS $MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS
else
print_var WH_WINE_USE WINEARCH WINEPREFIX WINEDLLOVERRIDES WH_WINDOWS_VER | tee "$LOG_FILE"
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS 2>&1 | tee -a "$LOG_FILE"
fi fi
wait_wineserver wait_wineserver
} }
@ -1206,113 +1052,6 @@ run_autoinstall () {
echo echo
} }
remove_prefix() {
local prefix_name="$1"
local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
if [[ -z "$prefix_name" ]]; then
print_error "Не указано имя префикса для удаления."
echo "Использование: $SCRIPT_NAME remove-prefix [имя_префикса]"
echo "Доступные префиксы:"
ls -1 "$WH_PREFIXES_DIR"
return 1
fi
if [[ ! -d "$prefix_path" ]]; then
print_error "Префикс "$prefix_name" не найден."
return 1
fi
if [[ ! $2 =~ --force|-y ]] ; then
echo "======================================================"
print_warning "Вы собираетесь удалить префикс "$prefix_name"."
echo "Это приведёт к:"
echo " - Полному удалению всех данных префикса"
echo " - Удалению всех программ, установленных в этом префиксе"
echo " - Удалению связанных ярлыков из меню и рабочего стола"
echo "======================================================"
read -p "Продолжить удаление? (y/N): " answer
if [[ ! "$answer" =~ ^[YyДд]$ ]]; then
print_info "Удаление префикса отменено."
return 0
fi
fi
try_remove_dir "$prefix_path"
if [[ $? -eq 0 ]]; then
print_ok "Префикс "$prefix_name" успешно удален."
for desktop_file in "$WH_MENU_DIR"/*.desktop; do
if grep -q "$prefix_path" "$desktop_file"; then
desktop_name=$(basename "$desktop_file")
remove_desktop "${desktop_name%.*}"
fi
done
return 0
else
print_error "Не удалось удалить префикс "$prefix_name"."
return 1
fi
}
remove_winehelper () {
local answer
if [[ $1 =~ --force|-y ]] ; then
answer="y"
else
echo "======================================================"
print_warning "Вы собираетесь удалить WineHelper и все связанные с ним данные."
echo " Это удалит:"
echo " - Все настройки WineHelper"
echo " - Все приложения/программы, установленные через WineHelper"
echo " - Все ярлыки из меню и с рабочего стола созданные с помощью WineHelper"
echo "======================================================"
echo "Продолжить? (y/N)"
read -r answer
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
# Второе подтверждение
echo "----------------------------------------------"
print_warning " ВЫ ТОЧНО УВЕРЕНЫ?"
echo "----------------------------------------------"
echo "Продолжить? (y/N)"
read -r answer
else
print_info "Удаление отменено."
return 1
fi
fi
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
# Удаление рабочих каталогов
try_remove_dir "$USER_WORK_PATH"
# Удаление файлов меню
try_remove_dir "$WH_MENU_DIR"
try_remove_file "$WH_MENU_CATEGORY"
try_remove_file "$WH_MENU_CONFIG"
# Удаление desktop-файлов
for desktop_file in "$(xdg-user-dir DESKTOP)"/*.desktop; do
if grep -q "Exec=env \"$RUN_SCRIPT\"" "$desktop_file"; then
try_remove_file "$desktop_file"
fi
done
# Обновление кэша desktop-файлов
update-desktop-database "$HOME/.local/share/applications"
# Удаление символических ссылок
try_remove_file "$HOME/.winehelper"
print_info "WineHelper и все связанные данные успешно удалены."
else
print_info "Удаление отменено."
fi
}
wh_info () { wh_info () {
echo "Использование: $SCRIPT_NAME [команда] echo "Использование: $SCRIPT_NAME [команда]
@ -1323,8 +1062,6 @@ wh_info () {
installed список установленных программ installed список установленных программ
run [программа.exe] запуск программы (отладка) run [программа.exe] запуск программы (отладка)
remove-all удалить WineHelper и все связанные данные
remove-prefix [имя_префикса] удалить префикс и все связанные данные
Параметры: Параметры:
--help показать эту справку и выйти --help показать эту справку и выйти
@ -1353,13 +1090,11 @@ case "${1,,}" in
winereg|regedit) prepair_wine ; wine_run "regedit" ;; winereg|regedit) prepair_wine ; wine_run "regedit" ;;
winefile|explorer) prepair_wine ; wine_run "winefile" ;; winefile|explorer) prepair_wine ; wine_run "winefile" ;;
wineconsole|cmd) prepair_wine ; wine_run "wineconsole" ;; wineconsole|cmd) prepair_wine ; wine_run "wineconsole" ;;
winetricks) shift ; prepair_wine ; "$WINETRICKS" -q "$@" ;; winetricks) shift ; update_winetricks ; prepair_wine ; "$WINETRICKS" -q "$@" ;;
desktop) shift ; create_desktop "$@" ; exit 0 ;; desktop) shift ; create_desktop "$@" ; exit 0 ;;
install|-i) shift ; run_autoinstall "$@" ;; install|-i) shift ; run_autoinstall "$@" ;;
installed) shift ; check_installed_programs "$1" ;; installed) shift ; check_installed_programs "$1" ;;
run|-r) shift ; run_installed_programs "$1" ;; run|-r) shift ; run_installed_programs "$1" ;;
remove-all) shift ; remove_winehelper "$@" ;;
remove-prefix) shift ; remove_prefix "$@" ;;
*) *)
if [[ -f "$1" ]] ; then if [[ -f "$1" ]] ; then
WIN_FILE_EXEC="$(readlink -f "$1")" WIN_FILE_EXEC="$(readlink -f "$1")"

File diff suppressed because it is too large Load Diff