Compare commits
	
		
			30 Commits
		
	
	
		
			0.3.7
			...
			0ee9b42d1f
		
	
	| 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 | 
							
								
								
									
										19
									
								
								CHANGELOG
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								CHANGELOG
									
									
									
									
									
								
							| @@ -1,5 +1,24 @@ | |||||||
| История изменений: | История изменений: | ||||||
|  |  | ||||||
|  | 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: | 0.3.7: | ||||||
| * обновлены функции создания desktop файлов (ярлыков) и категория WineHelper в меню | * обновлены функции создания desktop файлов (ярлыков) и категория WineHelper в меню | ||||||
| * обновлен скрипт установки scadoffice | * обновлен скрипт установки scadoffice | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -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 | 
| @@ -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 -E "/home[[:space:]]" /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