forked from CastroFidel/winehelper
Compare commits
34 Commits
remove_win
...
master
Author | SHA1 | Date | |
---|---|---|---|
0ee9b42d1f | |||
98902bd8f2 | |||
17afd90e93 | |||
19af68332b | |||
a2a63cf1ff | |||
858507fc8d | |||
68870f8307 | |||
8f6300c6b8 | |||
ed8d28c81f | |||
bd482ea757 | |||
8cc9cb17bb | |||
b29e586137 | |||
ace00616ca | |||
5b6a05a09e | |||
3be6b8c4a1 | |||
b684afe1ad | |||
bda5a31205 | |||
e55bc209c1 | |||
33f12d5287 | |||
bb0ec33202 | |||
a4998d2f26 | |||
ca9e1d7f75 | |||
b4d36b15e8 | |||
717e6c0e7d | |||
3ea9462025 | |||
8774a8b34d | |||
052a07a42b | |||
112933c7b1 | |||
de34f84e04 | |||
4310fe1e8c | |||
cd619bb9cc | |||
b319f4146c | |||
70b577dce5 | |||
388293e929 |
27
CHANGELOG
27
CHANGELOG
@ -1,5 +1,32 @@
|
|||||||
История изменений:
|
История изменений:
|
||||||
|
|
||||||
|
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:
|
0.3.6:
|
||||||
* добавлена категория WineHelper для desktop файлов (ярлыков) в меню
|
* добавлена категория WineHelper для desktop файлов (ярлыков) в меню
|
||||||
|
|
||||||
|
@ -20,3 +20,6 @@ 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
|
||||||
|
27
autoinstall/easymnemo
Normal file
27
autoinstall/easymnemo
Normal 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
|
@ -3,13 +3,16 @@
|
|||||||
########################################################################
|
########################################################################
|
||||||
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_v01"
|
export BASE_PFX="scadaoffice_pfx_x64_v03"
|
||||||
export WH_WINDOWS_VER="10"
|
export WH_WINDOWS_VER="10"
|
||||||
export WINEARCH="win64"
|
export WINEARCH="win64"
|
||||||
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 dotnet20"
|
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 WH_XDG_OPEN="rtf"
|
||||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_installer.exe"
|
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_installer.exe"
|
||||||
|
SCADOFFICE_ADDONS_URL="https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v02.tar.xz"
|
||||||
|
|
||||||
prepair_wine
|
prepair_wine
|
||||||
|
|
||||||
DRIVE_C_SCADOFFICE="$DRIVE_C/SCAD Soft/SCADOffice/64"
|
DRIVE_C_SCADOFFICE="$DRIVE_C/SCAD Soft/SCADOffice/64"
|
||||||
|
|
||||||
if [[ -n $2 ]] ; then
|
if [[ -n $2 ]] ; then
|
||||||
@ -29,21 +32,16 @@ fi
|
|||||||
if [[ $BASE_PFX == "none" ]] ; then
|
if [[ $BASE_PFX == "none" ]] ; then
|
||||||
print_info "Установка дополнительных компонентов..."
|
print_info "Установка дополнительных компонентов..."
|
||||||
|
|
||||||
ADDONS_PACK="${WH_TMP_DIR}/scadoffice_addons_v01.tar.xz"
|
ADDONS_PACK="${WH_TMP_DIR}/$(basename "$SCADOFFICE_ADDONS_URL")"
|
||||||
ADDONS_PATH="${WH_TMP_DIR}/scadoffice_addons"
|
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_REG="${ADDONS_PATH}/REG"
|
||||||
ADDONS_PATH_MDAC="${ADDONS_PATH}/mdac64"
|
ADDONS_PATH_MDAC="${ADDONS_PATH}/mdac64"
|
||||||
ADDONS_PATH_OPENSSH="${ADDONS_PATH}/OpenSSH"
|
ADDONS_PATH_OPENSSH="${ADDONS_PATH}/OpenSSH"
|
||||||
|
|
||||||
if try_download "https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v01.tar.xz" "${ADDONS_PACK}" ; then
|
if try_download "$SCADOFFICE_ADDONS_URL" "${ADDONS_PACK}" ; then
|
||||||
create_new_dir "${ADDONS_PATH}"
|
create_new_dir "${ADDONS_PATH}"
|
||||||
unpack "${ADDONS_PACK}" "${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
|
wine_run regedit "${ADDONS_PATH_REG}"/*.reg
|
||||||
|
|
||||||
# Установка ODBC
|
# Установка ODBC
|
||||||
@ -73,12 +71,8 @@ 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 в каталог SCADOFFICE на рабочемм столе
|
# Цикл создания десктоп файлов для 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]}" "nocopy"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Cоздание десктоп файла для openoffice
|
|
||||||
WIN_FILE_EXEC1="$DRIVE_C/Program Files (x86)/OpenOffice 4/program/soffice.exe"
|
|
||||||
create_desktop "OpenOffice" "$WIN_FILE_EXEC1" "openoffice" "nocopy"
|
|
||||||
fi
|
fi
|
||||||
|
21
autoinstall/zulugis
Normal file
21
autoinstall/zulugis
Normal 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
|
@ -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} winetricks ca-certificates cups-pdf || fatal "Не удалось установить зависимости."
|
libvulkan1,libcups} || fatal "Не удалось установить зависимости."
|
||||||
|
|
||||||
apt-get install {i586-,}wine
|
apt-get install {i586-,}wine
|
||||||
|
|
||||||
|
BIN
image/easymnemo.png
Normal file
BIN
image/easymnemo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.1 KiB |
BIN
image/zulugis.png
Normal file
BIN
image/zulugis.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
@ -3,6 +3,7 @@
|
|||||||
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 #####
|
||||||
@ -13,6 +14,9 @@ fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193 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
|
||||||
@ -64,7 +68,8 @@ dfb44ce5e5af7dba1686932c63d6b05e5dd6919a21c78130a7d1d0271b93958e audiorecstatio
|
|||||||
# 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
|
||||||
|
|
||||||
daaaef625f8f44688faf12f9ef4360ad1d35b377b23be634b45c1b8d43239686 scadaoffice_pfx_x64_v01.tar.xz
|
25e277c7afa4a9afc5f013cb05f872c12a7f381c4f0503a423dcacccca9a14c6 scadaoffice_pfx_x64_v03.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 dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6 dotnet20
|
# 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 openoffice, ODBC, SSH, *.reg
|
# + addons with ODBC, SSH, *.reg
|
||||||
|
0f4ef434df07bc338ae308af44330590eaa1d9c94b64850514e55b960642d0eb scadoffice_addons_v02.tar.xz
|
||||||
|
516
winehelper
516
winehelper
@ -12,23 +12,46 @@ 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 () { print_error "$@" ; exit 1 ;}
|
fatal () {
|
||||||
|
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
|
||||||
export DEBUG="full"
|
check_variables WINEDEBUG "+loaddll,+seh"
|
||||||
export LOG_FILE="$HOME/winehelper.log"
|
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
|
shift
|
||||||
print_warning "Включен режим подробного логирования работы WINE."
|
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"
|
||||||
|
date > "$LOG_FILE"
|
||||||
|
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
|
||||||
@ -50,6 +73,7 @@ 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_DIR="$HOME/.local/share/applications/WineHelper"
|
||||||
WH_MENU_CATEGORY="$HOME/.local/share/desktop-directories/WineHelper.directory"
|
WH_MENU_CATEGORY="$HOME/.local/share/desktop-directories/WineHelper.directory"
|
||||||
@ -63,6 +87,9 @@ 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"
|
||||||
@ -93,25 +120,21 @@ 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 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 не возможен из домашнего каталога."
|
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 #####
|
||||||
# yad zenity cups-pdf
|
if ! rpm -q {i586-,}{wine,glibc-core,libstdc++6,glibc-pthread,glibc-nss,libOSMesa,\
|
||||||
|
|
||||||
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} \
|
libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} 1>/dev/null
|
||||||
winetricks ca-certificates cups-pdf 1>/dev/null
|
then
|
||||||
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 прервана."
|
||||||
@ -119,15 +142,6 @@ else
|
|||||||
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"
|
||||||
@ -155,9 +169,9 @@ try_remove_dir () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try_copy_file () {
|
try_copy_file () {
|
||||||
if [[ ! -f "$1" ]] ; then print_info "file $1 not found for copy" && return 1
|
if [[ ! -f "$1" ]] ; then print_info "файла $1 не существует для копирования" && return 1
|
||||||
elif [[ -z "$2" ]] ; then print_error "no way to copy file $1" && return 1
|
elif [[ -z "$2" ]] ; then fatal "нет пути для копирования файла $1"
|
||||||
elif [[ -L "$2" ]] ; then print_warning "$2 is a file with a symbolic link"
|
elif [[ -L "$2" ]] ; then
|
||||||
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
|
||||||
@ -167,24 +181,24 @@ try_copy_file () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try_copy_dir () {
|
try_copy_dir () {
|
||||||
if [[ ! -d "$1" ]] ; then print_info "directory $1 not found for copy"
|
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для копирования"
|
||||||
elif [[ -z "$2" ]] ; then print_error "no way to copy directory $1"
|
elif [[ -z "$2" ]] ; then fatal "нет пути для копирования каталога $1"
|
||||||
else
|
else
|
||||||
cp -fr "$1" "$2"
|
cp -fr "$1" "$2"
|
||||||
[[ "$?" != 0 ]] && print_error "failed to copy directory $1 to $2" || return 0
|
[[ "$?" != 0 ]] && print_error "не удалось скопировать каталог $1 в $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 "file not found for link: $1"
|
print_warning "нет файла для создания символьной ссылки: $1"
|
||||||
if [[ -f "$2" ]] ; then
|
if [[ -f "$2" ]] ; then
|
||||||
try_remove_file "$2"
|
try_remove_file "$2"
|
||||||
print_warning "removed old link: $2"
|
print_warning "удаляем символьную ссылку: $2"
|
||||||
fi
|
fi
|
||||||
return 1
|
return 1
|
||||||
elif [[ -z "$2" ]] ; then print_error "no way to link file $1" && return 1
|
elif [[ -z "$2" ]] ; then fatal "нет пути для создания символьной ссылки на файл $1"
|
||||||
else
|
else
|
||||||
try_remove_file "$2"
|
try_remove_file "$2"
|
||||||
ln -s -f -r "$1" "$2"
|
ln -s -f -r "$1" "$2"
|
||||||
@ -193,25 +207,12 @@ 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 "directory $1 not found for link"
|
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для создания символьной сссылки"
|
||||||
elif [[ -z "$2" ]] ; then print_error "no way to link directory $1"
|
elif [[ -z "$2" ]] ; then fatal "не указан путь для создания символьной ссылки на каталог $1"
|
||||||
else
|
else
|
||||||
ln -s -f -r "$1" "$2"
|
ln -s -f -r "$1" "$2"
|
||||||
[[ "$?" != 0 ]] && print_error "failed to link directory $1 to $2" || return 0
|
[[ "$?" != 0 ]] && print_error "не удалось сделать символьную ссылку на каталог $1 по пути $2" || return 0
|
||||||
fi
|
fi
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
@ -311,7 +312,6 @@ 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 +319,9 @@ var_winedlloverride_update () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
var_vkd3d_config_update () {
|
var_dxvk_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,7 +357,6 @@ 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"
|
||||||
@ -384,11 +383,9 @@ create_desktop () {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# создаем .desktop файл
|
||||||
create_new_dir "$WH_MENU_DIR"
|
create_new_dir "$WH_MENU_DIR"
|
||||||
|
|
||||||
[[ ! -f "$icon_file" ]] && icon_file=wine
|
[[ ! -f "$icon_file" ]] && icon_file=wine
|
||||||
|
|
||||||
# Создаем .desktop файл
|
|
||||||
{
|
{
|
||||||
echo "[Desktop Entry]"
|
echo "[Desktop Entry]"
|
||||||
echo "Name=$name_desktop"
|
echo "Name=$name_desktop"
|
||||||
@ -403,7 +400,16 @@ create_desktop () {
|
|||||||
|
|
||||||
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
|
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
|
||||||
|
|
||||||
# Создаем файл категории для меню
|
# добавляем информацию о приложении в "$WINEPREFIX/desktop.list"
|
||||||
|
if [[ -f "$WINEPREFIX/desktop.list" ]] \
|
||||||
|
&& 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"
|
create_new_dir "$HOME/.local/share/desktop-directories"
|
||||||
if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then
|
if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then
|
||||||
cat > "$WH_MENU_CATEGORY" <<EOF
|
cat > "$WH_MENU_CATEGORY" <<EOF
|
||||||
@ -431,16 +437,10 @@ EOF
|
|||||||
</Menu>
|
</Menu>
|
||||||
</Menu>
|
</Menu>
|
||||||
EOF
|
EOF
|
||||||
# Обновляем меню
|
|
||||||
if check_command update-menus ; then
|
|
||||||
update-menus
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Обновляем кэш desktop файлов
|
# Обновляем кэш desktop файлов
|
||||||
if check_command update-desktop-database ; then
|
|
||||||
update-desktop-database "$HOME/.local/share/applications"
|
update-desktop-database "$HOME/.local/share/applications"
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $4 != "nocopy" ]] ; then
|
if [[ $4 != "nocopy" ]] ; then
|
||||||
if [[ -n $4 ]] ; then
|
if [[ -n $4 ]] ; then
|
||||||
@ -470,7 +470,6 @@ 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"
|
||||||
@ -484,19 +483,13 @@ remove_desktop () {
|
|||||||
try_remove_dir "$WH_MENU_DIR"
|
try_remove_dir "$WH_MENU_DIR"
|
||||||
try_remove_file "$WH_MENU_CATEGORY"
|
try_remove_file "$WH_MENU_CATEGORY"
|
||||||
try_remove_file "$WH_MENU_CONFIG"
|
try_remove_file "$WH_MENU_CONFIG"
|
||||||
# Обновляем меню
|
|
||||||
if check_command update-menus ; then
|
|
||||||
update-menus
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Обновляем кэш desktop файлов
|
# Обновляем кэш desktop файлов
|
||||||
if check_command update-desktop-database ; then
|
|
||||||
update-desktop-database "$HOME/.local/share/applications"
|
update-desktop-database "$HOME/.local/share/applications"
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
##### 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
|
||||||
@ -535,7 +528,6 @@ 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"
|
||||||
@ -553,7 +545,6 @@ init_wined3d () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
##### CHECK VULKAN LIBRARY #####
|
|
||||||
init_dxvk () {
|
init_dxvk () {
|
||||||
check_variables USE_DXVK_VER "$1"
|
check_variables USE_DXVK_VER "$1"
|
||||||
|
|
||||||
@ -621,9 +612,11 @@ init_vkd3d () {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
##### DOWNLOAD WINE #####
|
init_wine_ver () {
|
||||||
download_wine () {
|
if [[ "$WH_WINE_USE" != system* ]] ; then
|
||||||
if [[ ! -d "$WH_DIST_DIR/$WH_WINE_USE" ]] ; then
|
export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE"
|
||||||
|
|
||||||
|
if [[ ! -d "$WINEDIR" ]] ; then
|
||||||
WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz"
|
WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz"
|
||||||
local WINE_PACKAGE="$WH_TMP_DIR/${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 try_download "$WINE_URL" "$WINE_PACKAGE" check256sum ; then
|
||||||
@ -633,16 +626,6 @@ download_wine () {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
|
||||||
|
|
||||||
##### INITIAL WINE SETTINGS #####
|
|
||||||
init_wine_ver () {
|
|
||||||
if [[ "$WH_WINE_USE" != system* ]] ; then
|
|
||||||
export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE"
|
|
||||||
|
|
||||||
if [[ ! -d "$WINEDIR" ]] ; then
|
|
||||||
download_wine
|
|
||||||
fi
|
|
||||||
|
|
||||||
export WINE="${WINEDIR}/bin/wine"
|
export WINE="${WINEDIR}/bin/wine"
|
||||||
export WINELOADER="${WINEDIR}/bin/wine"
|
export WINELOADER="${WINEDIR}/bin/wine"
|
||||||
@ -664,7 +647,14 @@ 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
|
||||||
|
|
||||||
if [[ "${WINEARCH}" == "win64" ]] ; then
|
[[ ! -f "${WINEDIR}/version" ]] && echo "${WH_WINE_USE}" > "${WINEDIR}/version"
|
||||||
|
|
||||||
|
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
|
||||||
@ -672,12 +662,28 @@ init_wine_ver () {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[[ ! -f "${WINEDIR}/version" ]] && echo "${WH_WINE_USE}" > "${WINEDIR}/version"
|
if [[ $WH_USE_CPCSP_PROXY == "1" ]] \
|
||||||
|
&& ! 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 [[ ! -d "${WINEDIR}/lib64/" ]] && [[ -d "${WINEDIR}/lib/wine/x86_64-unix" ]] ; then
|
if [[ ! -f "$WH_TMP_DIR/$CPCSP_PROXY_NAME" ]] ; then
|
||||||
create_new_dir "${WINEDIR}/lib64/wine"
|
print_info "Загрузка $CPCSP_PROXY_NAME.tar.xz"
|
||||||
mv -f "${WINEDIR}/lib/wine/x86_64-unix" "${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-windows" "${WINEDIR}/lib64/wine/"
|
then unpack "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" "$WH_TMP_DIR"
|
||||||
|
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
|
||||||
@ -689,31 +695,9 @@ 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 () {
|
||||||
@ -745,14 +729,23 @@ get_and_set_reg_file () {
|
|||||||
|
|
||||||
case $name_type_reg in
|
case $name_type_reg in
|
||||||
REG_DWORD)
|
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") ;;
|
name_for_set=$(convert_dec_and_hex --dec "$name_for_set") ;;
|
||||||
REG_SZ)
|
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\"" ;;
|
name_for_set="\"$name_for_set\"" ;;
|
||||||
*)
|
*)
|
||||||
if [[ $name_add_or_del == --delete ]] ; then
|
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
|
else
|
||||||
print_error "не задан тип ветки реестра: $name_fatal"
|
print_error "не задан тип ветки реестра: $name_fatal"
|
||||||
return 1
|
return 1
|
||||||
@ -800,24 +793,20 @@ 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 в файле реестра"
|
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"
|
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 в файл реестра"
|
print_info "Добавляем $name_for_find_old в ветку реестра: $name_block"
|
||||||
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 из файла реестра"
|
print_info "Удаляем $name_for_find_old из ветки реестра: $name_block"
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -841,18 +830,46 @@ get_base_pfx () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
init_wineprefix () {
|
check_prefix_var () {
|
||||||
if [[ -z "$WINEPREFIX" ]] ; then
|
if [[ -z "$WINEPREFIX" ]] ; then
|
||||||
print_warning "Префикс не выбран, используйте пееременную: WINEPREFIX=имя_префикса"
|
print_warning "Префикс не выбран."
|
||||||
print_info "Список существующих префиксов:"
|
|
||||||
ls -1 "$WH_PREFIXES_DIR"
|
local prefixes=()
|
||||||
echo
|
local count=1
|
||||||
exit 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
|
else
|
||||||
if echo "$WINEPREFIX" | grep -v '/' ; then
|
fatal "Неверный выбор."
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_info "Выбран префикс: $WINEPREFIX"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$WINEPREFIX" | grep -qv '/' ; then
|
||||||
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
|
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
init_wineprefix () {
|
||||||
|
check_prefix_var
|
||||||
|
|
||||||
if [[ "$WINEARCH" == "win32" ]]
|
if [[ "$WINEARCH" == "win32" ]]
|
||||||
then check_variables BASE_PFX "defpfx_x86_v01"
|
then check_variables BASE_PFX "defpfx_x86_v01"
|
||||||
@ -870,8 +887,8 @@ init_wineprefix () {
|
|||||||
fi
|
fi
|
||||||
print_info "Обновление префикса $WINEPREFIX."
|
print_info "Обновление префикса $WINEPREFIX."
|
||||||
if [[ -d "$WINEPREFIX/drive_c/windows" ]]
|
if [[ -d "$WINEPREFIX/drive_c/windows" ]]
|
||||||
then env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" wineboot -u
|
then "$WINELOADER" wineboot -u
|
||||||
else env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" wineboot -i
|
else "$WINELOADER" wineboot -i
|
||||||
fi
|
fi
|
||||||
touch "$WINEPREFIX/.firstboot"
|
touch "$WINEPREFIX/.firstboot"
|
||||||
wait_wineserver
|
wait_wineserver
|
||||||
@ -884,7 +901,7 @@ init_wineprefix () {
|
|||||||
&& [[ "$WINEARCH" != "win32" ]]
|
&& [[ "$WINEARCH" != "win32" ]]
|
||||||
then export WH_WINDOWS_VER="xp64"
|
then export WH_WINDOWS_VER="xp64"
|
||||||
fi
|
fi
|
||||||
env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" winecfg -v $(echo "win${WH_WINDOWS_VER}" | sed 's/.*/\L&/')
|
"$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
|
||||||
@ -910,9 +927,90 @@ 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}"
|
||||||
@ -929,25 +1027,6 @@ 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)} }' )"
|
||||||
@ -957,10 +1036,6 @@ 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"
|
||||||
@ -970,15 +1045,13 @@ use_winetricks () {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if [[ "$USE_WT_FROM_DB" == "1" ]] ; then
|
if [[ "$USE_WT_FROM_DB" == "1" ]] ; then
|
||||||
if update_winetricks ; then
|
print_info "Пробуем установить компоненты: ${WH_DLL_NEED_INSTALL}"
|
||||||
print_info "Пробуем установить библиотеки: ${WH_DLL_NEED_INSTALL}"
|
|
||||||
print_info "Запускаем WINETRICKS..."
|
print_info "Запускаем WINETRICKS..."
|
||||||
export WINETRICKS_DOWNLOADER="curl"
|
export WINETRICKS_DOWNLOADER="curl"
|
||||||
env WINEDLLOVERRIDES="winegstreamer=" "$WH_TMP_DIR/winetricks" -q ${WH_DLL_NEED_INSTALL}
|
"$WH_WINETRICKS" -q ${WH_DLL_NEED_INSTALL}
|
||||||
wait_wineserver
|
wait_wineserver
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_wine () {
|
kill_wine () {
|
||||||
@ -992,29 +1065,30 @@ 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"
|
orig_IFS="$IFS" && IFS=$'\n'
|
||||||
IFS=$'\n'
|
if WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )" ; then
|
||||||
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
|
||||||
if [[ "$WHDB_FILE" ]] ; then
|
fi
|
||||||
|
|
||||||
|
if [[ "$WHDB_FILE" != "0" ]] ; then
|
||||||
print_info "Используется файл настроек: $WHDB_FILE"
|
print_info "Используется файл настроек: $WHDB_FILE"
|
||||||
. "$WHDB_FILE"
|
. "$WHDB_FILE"
|
||||||
|
elif check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then
|
||||||
|
print_info "Найдены настройки из предыдущего использования префикса: $WINEPREFIX"
|
||||||
|
cat "$WINEPREFIX/last.conf"
|
||||||
|
. "$WINEPREFIX/last.conf"
|
||||||
else
|
else
|
||||||
print_warning "Файл настроек не найден. Пропускаем."
|
print_warning "Файл настроек не найден. Пропускаем."
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prepair_wine () {
|
prepair_wine () {
|
||||||
@ -1039,7 +1113,10 @@ prepair_wine () {
|
|||||||
|
|
||||||
var_winedlloverride_update "winemenubuilder.exe=d"
|
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_wine_ver
|
||||||
init_wineprefix
|
init_wineprefix
|
||||||
use_winetricks
|
use_winetricks
|
||||||
@ -1057,13 +1134,15 @@ 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 [[ $DEBUG == "0" ]] ; then
|
if [[ -n $LOG_FILE ]] && [[ -f "$LOG_FILE" ]] ; then
|
||||||
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS
|
echo "##### Основные переменные #####" | tee -a "$LOG_FILE"
|
||||||
else
|
env | grep -e "WH_" -e "WINE" -e "DXVK" -e "VKD3D" | tee -a "$LOG_FILE"
|
||||||
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
|
|
||||||
|
|
||||||
|
echo "##### Лог WINE #####" | tee -a "$LOG_FILE"
|
||||||
|
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS 2>&1 | tee -a "$LOG_FILE"
|
||||||
|
else
|
||||||
|
$MANGOHUD_RUN "$WINELOADER" "$@" $LAUNCH_PARAMETERS
|
||||||
|
fi
|
||||||
wait_wineserver
|
wait_wineserver
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1127,10 +1206,62 @@ run_autoinstall () {
|
|||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
##### REMOVE WINEHELPER #####
|
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 () {
|
remove_winehelper () {
|
||||||
local answer
|
local answer
|
||||||
|
if [[ $1 =~ --force|-y ]] ; then
|
||||||
|
answer="y"
|
||||||
|
else
|
||||||
echo "======================================================"
|
echo "======================================================"
|
||||||
print_warning "Вы собираетесь удалить WineHelper и все связанные с ним данные."
|
print_warning "Вы собираетесь удалить WineHelper и все связанные с ним данные."
|
||||||
echo " Это удалит:"
|
echo " Это удалит:"
|
||||||
@ -1141,16 +1272,20 @@ remove_winehelper () {
|
|||||||
echo "Продолжить? (y/N)"
|
echo "Продолжить? (y/N)"
|
||||||
read -r answer
|
read -r answer
|
||||||
|
|
||||||
if [[ "$answer" =~ ^[YyДд]$ ]]; then
|
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
|
||||||
# Второе подтверждение
|
# Второе подтверждение
|
||||||
echo "----------------------------------------------"
|
echo "----------------------------------------------"
|
||||||
print_warning " ВЫ ТОЧНО УВЕРЕНЫ?"
|
print_warning " ВЫ ТОЧНО УВЕРЕНЫ?"
|
||||||
echo "----------------------------------------------"
|
echo "----------------------------------------------"
|
||||||
echo "Продолжить? (y/N)"
|
echo "Продолжить? (y/N)"
|
||||||
read -r answer
|
read -r answer
|
||||||
|
else
|
||||||
|
print_info "Удаление отменено."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$answer" =~ ^[YyДд]$ ]]; then
|
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
|
||||||
|
|
||||||
# Удаление рабочих каталогов
|
# Удаление рабочих каталогов
|
||||||
try_remove_dir "$USER_WORK_PATH"
|
try_remove_dir "$USER_WORK_PATH"
|
||||||
|
|
||||||
@ -1167,9 +1302,7 @@ remove_winehelper () {
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Обновление кэша desktop-файлов
|
# Обновление кэша desktop-файлов
|
||||||
if check_command update-desktop-database; then
|
|
||||||
update-desktop-database "$HOME/.local/share/applications"
|
update-desktop-database "$HOME/.local/share/applications"
|
||||||
fi
|
|
||||||
|
|
||||||
# Удаление символических ссылок
|
# Удаление символических ссылок
|
||||||
try_remove_file "$HOME/.winehelper"
|
try_remove_file "$HOME/.winehelper"
|
||||||
@ -1178,9 +1311,6 @@ remove_winehelper () {
|
|||||||
else
|
else
|
||||||
print_info "Удаление отменено."
|
print_info "Удаление отменено."
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
print_info "Удаление отменено."
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wh_info () {
|
wh_info () {
|
||||||
@ -1193,7 +1323,8 @@ wh_info () {
|
|||||||
|
|
||||||
installed список установленных программ
|
installed список установленных программ
|
||||||
run [программа.exe] запуск программы (отладка)
|
run [программа.exe] запуск программы (отладка)
|
||||||
remove удалить WineHelper и все связанные данные
|
remove-all удалить WineHelper и все связанные данные
|
||||||
|
remove-prefix [имя_префикса] удалить префикс и все связанные данные
|
||||||
|
|
||||||
Параметры:
|
Параметры:
|
||||||
--help показать эту справку и выйти
|
--help показать эту справку и выйти
|
||||||
@ -1222,12 +1353,13 @@ 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 ; update_winetricks ; prepair_wine ; "$WINETRICKS" -q "$@" ;;
|
winetricks) shift ; 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|--remove) remove_winehelper ;;
|
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")"
|
||||||
|
19204
winetricks_20250102
Executable file
19204
winetricks_20250102
Executable file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user