Compare commits
	
		
			22 Commits
		
	
	
		
			0.3.8
			...
			98902bd8f2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 98902bd8f2 | ||
|  | 17afd90e93 | ||
|  | 19af68332b | ||
|  | a2a63cf1ff | ||
|  | 858507fc8d | ||
|  | 68870f8307 | ||
|  | 8f6300c6b8 | ||
|  | ed8d28c81f | ||
|  | bd482ea757 | ||
|  | 8cc9cb17bb | ||
|  | b29e586137 | ||
|  | ace00616ca | ||
|  | 5b6a05a09e | ||
|  | 3be6b8c4a1 | ||
|  | b684afe1ad | ||
|  | bda5a31205 | ||
|  | e55bc209c1 | ||
|  | 33f12d5287 | ||
|  | bb0ec33202 | ||
|  | a4998d2f26 | ||
|  | ca9e1d7f75 | ||
|  | b4d36b15e8 | 
							
								
								
									
										15
									
								
								CHANGELOG
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								CHANGELOG
									
									
									
									
									
								
							| @@ -1,7 +1,20 @@ | ||||
| История изменений: | ||||
|  | ||||
| 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 приложении | ||||
| * добавлена возможность ассоциации и запуска файлов из WINE в нативном Linux | ||||
| приложении с помощью перемененной. Пример: WH_XDG_OPEN="rtf txt doc" | ||||
| * добавлен выбор префикса, если переменная WINEPREFIX не объявлена | ||||
| * добавлено сохранение последней конфигурации использования префикса | ||||
| * добавлено сохранение скписка создаваемых ярлыков для приложений | ||||
|   | ||||
| @@ -20,3 +20,6 @@ https://github.com/HansKristian-Work/vkd3d-proton | ||||
|  | ||||
| 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 WINEPREFIX="scadoffice" | ||||
| export BASE_PFX="scadaoffice_pfx_x64_v01" | ||||
| export BASE_PFX="scadaoffice_pfx_x64_v03" | ||||
| export WH_WINDOWS_VER="10" | ||||
| 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" | ||||
| SCADOFFICE_ADDONS_URL="https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v02.tar.xz" | ||||
|  | ||||
| prepair_wine | ||||
|  | ||||
| DRIVE_C_SCADOFFICE="$DRIVE_C/SCAD Soft/SCADOffice/64" | ||||
|  | ||||
| if [[ -n $2 ]] ; then | ||||
| @@ -29,21 +32,16 @@ fi | ||||
| if [[ $BASE_PFX == "none" ]] ; then | ||||
|     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" | ||||
|     OFFICE_EXE="${ADDONS_PATH}/OpenOffice.exe" | ||||
|     OFFICE_PACK="${ADDONS_PATH}/OpenOffice" | ||||
|     AUTOINSTALL_SETUP="${ADDONS_PATH}/OpenOffice/setup.exe" | ||||
|  | ||||
|     ADDONS_PATH_REG="${ADDONS_PATH}/REG" | ||||
|     ADDONS_PATH_MDAC="${ADDONS_PATH}/mdac64" | ||||
|     ADDONS_PATH_OPENSSH="${ADDONS_PATH}/OpenSSH" | ||||
|  | ||||
|     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}" | ||||
|         unpack "${ADDONS_PACK}" "${ADDONS_PATH}" | ||||
|         7z x -y "${OFFICE_EXE}" -o"${OFFICE_PACK}" | ||||
|         wine_run_install "${AUTOINSTALL_SETUP}" /qn | ||||
|  | ||||
|         wine_run regedit "${ADDONS_PATH_REG}"/*.reg | ||||
|  | ||||
|         # Установка ODBC | ||||
| @@ -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") | ||||
|  | ||||
|     # Цикл создания десктоп файлов для scad office в каталог SCADOFFICE на рабочемм столе | ||||
|     # Цикл создания десктоп файлов для scad office | ||||
|     for i in "${!PROG_NAME[@]}"; do | ||||
|         create_desktop "${PROG_NAME[i]}" "${WIN_FILE_EXEC[i]}" "${PROG_ICON[i]}" "nocopy" | ||||
|     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 | ||||
|   | ||||
| @@ -22,7 +22,7 @@ windows приложения. Подробнее по ссылке: https://www. | ||||
| apt-get install {i586-,}{glibc-core,libstdc++6,glibc-pthread,glibc-nss,\ | ||||
| libOSMesa,libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,\ | ||||
| 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 | ||||
|  | ||||
|   | ||||
							
								
								
									
										
											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 | ||||
| 71d6fdfd23d7988471d345c68e81699b8af931352b03dd216424b398f63c7b12  wine_x_tkg_10-0_amd64.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 | ||||
|  | ||||
| ##### DXVK ##### | ||||
| @@ -13,6 +14,9 @@ fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193  wine-9.0.14-al | ||||
|  | ||||
| df1a940d2e072a884524f66a16e0f0ef74048bc6a6642b96eb257528a522109f  vkd3d-proton-1.1-2602.tar.xz | ||||
|  | ||||
| ##### CPCSP_PROXY ##### | ||||
| 3153088ff28d6af415c3504a421e5382554dbb305f38d5a87dd84df90d680421  wine-cpcsp_proxy-0.6.1-alt1.tar.xz | ||||
|  | ||||
| ##### PREFIX ##### | ||||
|  | ||||
| 0e86cd9958d1bd1bfac99e23165a091a4ea2fa3e693c551f69aabeed5f681fea  defpfx_x86_v01.tar.xz | ||||
| @@ -64,7 +68,8 @@ dfb44ce5e5af7dba1686932c63d6b05e5dd6919a21c78130a7d1d0271b93958e  audiorecstatio | ||||
| # create with wine_x_tkg_10-0_i586 (universal user: xuser) | ||||
| # 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) | ||||
| # 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 | ||||
|   | ||||
							
								
								
									
										315
									
								
								winehelper
									
									
									
									
									
								
							
							
						
						
									
										315
									
								
								winehelper
									
									
									
									
									
								
							| @@ -12,7 +12,11 @@ print_warning () { printf "\E[33m%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_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 () { [[ -z ${!1} ]] && export $1="$2" ;} | ||||
| @@ -29,6 +33,9 @@ else | ||||
|     check_variables DEBUG "0" | ||||
| fi | ||||
|  | ||||
| ##### WINETRICKS VERSION ##### | ||||
| WINETRICKS_VERSION="20250102" | ||||
|  | ||||
| ##### DEFAULT VARIABLES ##### | ||||
| SCRIPT_NAME="$(basename "$0")" | ||||
| if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then | ||||
| @@ -50,6 +57,7 @@ WH_IMAGE_PATH="$DATA_PATH/image" | ||||
| WH_DB_DIR="$DATA_PATH/database" | ||||
| WH_AUTOINSTALL_DIR="$DATA_PATH/autoinstall" | ||||
| WH_MANUALINSTALL_DIR="$DATA_PATH/manualinstall" | ||||
| WH_WINETRICKS="$DATA_PATH/winetricks_$WINETRICKS_VERSION" | ||||
|  | ||||
| WH_MENU_DIR="$HOME/.local/share/applications/WineHelper" | ||||
| WH_MENU_CATEGORY="$HOME/.local/share/desktop-directories/WineHelper.directory" | ||||
| @@ -63,6 +71,9 @@ check_variables WINEFSYNC "0" | ||||
| check_variables WINEARCH "win64" # or "win32" | ||||
| 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 WINE_LARGE_ADDRESS_AWARE "1" | ||||
| check_variables WINE_FULLSCREEN_FSR "1" | ||||
| @@ -99,19 +110,15 @@ fi | ||||
|  | ||||
| ##### ROOT ##### | ||||
| su_run () { | ||||
|     print_info "Для продолжения установки зависимостей введите root пароль..." | ||||
|     print_info "Для продолжения установки введите root пароль..." | ||||
|     su - -c "$@" | ||||
| } | ||||
|  | ||||
| ##### 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,\ | ||||
| libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} \ | ||||
| winetricks ca-certificates cups-pdf 1>/dev/null | ||||
| then : # Зависимости установлены. Пропускаем... | ||||
| else | ||||
| libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} 1>/dev/null | ||||
| then | ||||
|     if su_run "$DATA_PATH/dependencies.sh" | ||||
|     then print_info "Зависимости успешно установлены. Продолжаем работу $SCRIPT_NAME" | ||||
|     else fatal "Не удалось установить зависимости. Работа $SCRIPT_NAME прервана." | ||||
| @@ -119,15 +126,6 @@ else | ||||
| fi | ||||
|  | ||||
| ##### 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 () { | ||||
|     if ! echo ${!1} | grep "$2" &>/dev/null | ||||
|     then export $1="${!1} $2" | ||||
| @@ -155,9 +153,9 @@ try_remove_dir () { | ||||
| } | ||||
|  | ||||
| try_copy_file () { | ||||
|     if [[ ! -f "$1" ]] ; then print_info "file $1 not found for copy" && return 1 | ||||
|     elif [[ -z "$2" ]] ; then print_error "no way to copy file $1" && return 1 | ||||
|     elif [[ -L "$2" ]] ; then print_warning "$2 is a file with a symbolic link" | ||||
|     if [[ ! -f "$1" ]] ; then print_info "файла $1 не существует для копирования" && return 1 | ||||
|     elif [[ -z "$2" ]] ; then fatal "нет пути для копирования файла $1" | ||||
|     elif [[ -L "$2" ]] ; then | ||||
|         try_remove_file "$2" | ||||
|         cp -f "$1" "$2" && return 0 || return 1 | ||||
|     else | ||||
| @@ -167,24 +165,24 @@ try_copy_file () { | ||||
| } | ||||
|  | ||||
| try_copy_dir () { | ||||
|     if [[ ! -d "$1" ]] ; then print_info "directory $1 not found for copy" | ||||
|     elif [[ -z "$2" ]] ; then print_error "no way to copy directory $1" | ||||
|     if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для копирования" | ||||
|     elif [[ -z "$2" ]] ; then fatal "нет пути для копирования каталога $1" | ||||
|     else | ||||
|         cp -fr "$1" "$2" | ||||
|         [[ "$?" != 0 ]] && print_error "failed to copy directory $1 to $2" || return 0 | ||||
|         [[ "$?" != 0 ]] && print_error "не удалось скопировать каталог $1 в $2" || return 0 | ||||
|     fi | ||||
|     return 1 | ||||
| } | ||||
|  | ||||
| try_force_link_file () { | ||||
|     if [[ ! -f "$1" ]] ; then | ||||
|         print_warning "file not found for link: $1" | ||||
|         print_warning "нет файла для создания символьной ссылки: $1" | ||||
|         if [[ -f "$2" ]] ; then | ||||
|             try_remove_file "$2" | ||||
|             print_warning "removed old link: $2" | ||||
|             print_warning "удаляем символьную ссылку: $2" | ||||
|         fi | ||||
|         return 1 | ||||
|     elif [[ -z "$2" ]] ; then print_error "no way to link file $1" && return 1 | ||||
|     elif [[ -z "$2" ]] ; then fatal "нет пути для создания символьной ссылки на файл $1" | ||||
|     else | ||||
|         try_remove_file "$2" | ||||
|         ln -s -f -r "$1" "$2" | ||||
| @@ -193,25 +191,12 @@ try_force_link_file () { | ||||
|     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 () { | ||||
|     if [[ ! -d "$1" ]] ; then print_info "directory $1 not found for link" | ||||
|     elif [[ -z "$2" ]] ; then print_error "no way to link directory $1" | ||||
|     if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для создания символьной сссылки" | ||||
|     elif [[ -z "$2" ]] ; then fatal "не указан путь для создания символьной ссылки на каталог $1" | ||||
|     else | ||||
|         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 | ||||
|     return 1 | ||||
| } | ||||
| @@ -311,7 +296,6 @@ try_copy_wine_dll_to_pfx_32() { | ||||
|     fi | ||||
| } | ||||
|  | ||||
| ##### OVERRIDE VARIABLES FUNCTIONS ##### | ||||
| var_winedlloverride_update () { | ||||
|     if [[ -n "${WINEDLLOVERRIDES}" ]] | ||||
|     then export WINEDLLOVERRIDES="${1};${WINEDLLOVERRIDES}" | ||||
| @@ -319,7 +303,7 @@ var_winedlloverride_update () { | ||||
|     fi | ||||
| } | ||||
|  | ||||
| var_vkd3d_config_update () { | ||||
| var_dxvk_config_update () { | ||||
|     if [[ -n "${DXVK_CONFIG}" ]] | ||||
|     then export DXVK_CONFIG="${1};${DXVK_CONFIG}" | ||||
|     else export DXVK_CONFIG="${1}" | ||||
| @@ -357,7 +341,6 @@ var_ld_library_path_update () { | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| ##### CREATE DESKTOP FILE ##### | ||||
| create_desktop () { | ||||
|     local name_desktop="$1" | ||||
|     local exe_file="$2" | ||||
| @@ -384,11 +367,9 @@ create_desktop () { | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     create_new_dir "$WH_MENU_DIR" | ||||
|  | ||||
|     [[ ! -f "$icon_file" ]] && icon_file=wine | ||||
|  | ||||
|     # создаем .desktop файл | ||||
|     create_new_dir "$WH_MENU_DIR" | ||||
|     [[ ! -f "$icon_file" ]] && icon_file=wine | ||||
|     { | ||||
|         echo "[Desktop Entry]" | ||||
|         echo "Name=$name_desktop" | ||||
| @@ -403,12 +384,14 @@ create_desktop () { | ||||
|  | ||||
|     cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/" | ||||
|  | ||||
|  | ||||
|     # добавляем информацию о приложении в "$WINEPREFIX/desktop.list" | ||||
|     if grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list" | ||||
|     if [[ -f "$WINEPREFIX/desktop.list" ]] \ | ||||
|     && grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list" | ||||
|     then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list" | ||||
|     fi | ||||
|     echo "$name_desktop=${exe_file//$WINEPREFIX/}" >> "$WINEPREFIX/desktop.list" | ||||
|     create_new_dir "$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" | ||||
| @@ -441,9 +424,7 @@ EOF | ||||
|     fi | ||||
|  | ||||
|     # Обновляем кэш desktop файлов | ||||
|     if check_command update-desktop-database ; then | ||||
|     update-desktop-database "$HOME/.local/share/applications" | ||||
|     fi | ||||
|  | ||||
|     if [[ $4 != "nocopy" ]] ; then | ||||
|         if [[ -n $4 ]] ; then | ||||
| @@ -473,7 +454,6 @@ EOF | ||||
|     fi | ||||
| } | ||||
|  | ||||
| ##### REMOVE DESKTOP FILE ##### | ||||
| remove_desktop () { | ||||
|     if [[ -n "$1" ]] ; then | ||||
|         try_remove_file "$USER_WORK_PATH/$1.desktop" | ||||
| @@ -490,12 +470,10 @@ remove_desktop () { | ||||
|     fi | ||||
|  | ||||
|     # Обновляем кэш desktop файлов | ||||
|     if check_command update-desktop-database ; then | ||||
|     update-desktop-database "$HOME/.local/share/applications" | ||||
|     fi | ||||
|  | ||||
| } | ||||
|  | ||||
| ##### INSTALLED PROGRAMS ##### | ||||
| check_installed_programs () { | ||||
|     for desktop_file in "$USER_WORK_PATH"/*.desktop ; do | ||||
|         if [[ ! -f "$desktop_file" ]] ; then | ||||
| @@ -534,7 +512,6 @@ run_installed_programs () { | ||||
|     fi | ||||
| } | ||||
|  | ||||
| ##### USED WINED3D LIBRARY ##### | ||||
| init_wined3d () { | ||||
|     if [[ "$USE_RENDERER" != "proton" ]] ; then | ||||
|         WINED3D_FILES="d3d8 d3d9 d3d10_1 d3d10 d3d10core d3d11 dxgi d3d12 d3d12core" | ||||
| @@ -552,7 +529,6 @@ init_wined3d () { | ||||
|     fi | ||||
| } | ||||
|  | ||||
| ##### CHECK VULKAN LIBRARY ##### | ||||
| init_dxvk () { | ||||
|     check_variables USE_DXVK_VER "$1" | ||||
|  | ||||
| @@ -620,9 +596,11 @@ init_vkd3d () { | ||||
|     done | ||||
| } | ||||
|  | ||||
| ##### DOWNLOAD WINE ##### | ||||
| download_wine () { | ||||
|     if [[ ! -d "$WH_DIST_DIR/$WH_WINE_USE" ]] ; then | ||||
| init_wine_ver () { | ||||
|     if [[ "$WH_WINE_USE" != system* ]] ; then | ||||
|         export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE" | ||||
|  | ||||
|         if [[ ! -d "$WINEDIR" ]] ; then | ||||
|             WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz" | ||||
|             local WINE_PACKAGE="$WH_TMP_DIR/${WH_WINE_USE}.tar.xz" | ||||
|             if try_download "$WINE_URL" "$WINE_PACKAGE" check256sum ; then | ||||
| @@ -632,16 +610,6 @@ download_wine () { | ||||
|                 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 WINELOADER="${WINEDIR}/bin/wine" | ||||
| @@ -663,7 +631,14 @@ init_wine_ver () { | ||||
|             export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib/gstreamer-1.0" | ||||
|         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 WINEDLLPATH+=":${WINEDIR}/lib64/wine" | ||||
|             if [[ -d "${WINEDIR}/lib64/gstreamer-1.0" ]] ; then | ||||
| @@ -671,12 +646,28 @@ init_wine_ver () { | ||||
|             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 | ||||
|             create_new_dir "${WINEDIR}/lib64/wine" | ||||
|             mv -f "${WINEDIR}/lib/wine/x86_64-unix" "${WINEDIR}/lib64/wine/" | ||||
|             mv -f "${WINEDIR}/lib/wine/x86_64-windows" "${WINEDIR}/lib64/wine/" | ||||
|             if [[ ! -f "$WH_TMP_DIR/$CPCSP_PROXY_NAME" ]] ; then | ||||
|                 print_info "Загрузка $CPCSP_PROXY_NAME.tar.xz" | ||||
|                 if try_download "$CPCSP_PROXY_URL" "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" check256sum | ||||
|                 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 | ||||
|     else | ||||
|         # use system WINE | ||||
| @@ -712,7 +703,6 @@ init_wine_ver () { | ||||
|     print_info "Используется версия wine: $WH_WINE_USE" | ||||
| } | ||||
|  | ||||
| ##### INITIAL WINEPREFIX SETTINGS ##### | ||||
| get_and_set_reg_file () { | ||||
|  | ||||
|     convert_dec_and_hex () { | ||||
| @@ -822,10 +812,6 @@ get_and_set_reg_file () { | ||||
| } | ||||
|  | ||||
| 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 | ||||
| } | ||||
|  | ||||
| @@ -880,7 +866,7 @@ check_prefix_var () { | ||||
|         print_info "Выбран префикс: $WINEPREFIX" | ||||
|     fi | ||||
|  | ||||
|     if echo "$WINEPREFIX" | grep -v '/' ; then | ||||
|     if echo "$WINEPREFIX" | grep -qv '/' ; then | ||||
|         export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX" | ||||
|     fi | ||||
|  | ||||
| @@ -906,8 +892,8 @@ init_wineprefix () { | ||||
|         fi | ||||
|         print_info "Обновление префикса $WINEPREFIX." | ||||
|         if [[ -d "$WINEPREFIX/drive_c/windows" ]] | ||||
|         then env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" wineboot -u | ||||
|         else env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" wineboot -i | ||||
|         then "$WINELOADER" wineboot -u | ||||
|         else "$WINELOADER" wineboot -i | ||||
|         fi | ||||
|         touch "$WINEPREFIX/.firstboot" | ||||
|         wait_wineserver | ||||
| @@ -920,7 +906,7 @@ init_wineprefix () { | ||||
|         && [[ "$WINEARCH" != "win32" ]] | ||||
|         then export WH_WINDOWS_VER="xp64" | ||||
|         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 | ||||
|         print_info "Windows версия изменена на win${WH_WINDOWS_VER}" | ||||
|     fi | ||||
| @@ -984,6 +970,43 @@ init_wineprefix () { | ||||
|         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 \ | ||||
| @@ -993,7 +1016,6 @@ init_wineprefix () { | ||||
|     done | ||||
| } | ||||
|  | ||||
| ##### KILL AUTOSTART AFTER INSTALLING ##### | ||||
| kill_autostart () { | ||||
|     [[ -z "${1}" ]] && fatal "Нет аргумента для функции kill_autostart." | ||||
|     [[ -z "${2}" ]] && SWAIT=3 || SWAIT="${2}" | ||||
| @@ -1010,25 +1032,6 @@ kill_autostart () { | ||||
|     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 () { | ||||
|     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)} }' )" | ||||
| @@ -1038,10 +1041,6 @@ use_winetricks () { | ||||
|         USE_WT_FROM_DB=0 | ||||
|         [[ ! -f "$WINEPREFIX/winetricks.log" ]] && touch "$WINEPREFIX/winetricks.log" | ||||
|         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 [[ -z "$WH_DLL_NEED_INSTALL" ]] | ||||
|                 then WH_DLL_NEED_INSTALL="$need_install_dll_to_pfx" | ||||
| @@ -1051,15 +1050,13 @@ use_winetricks () { | ||||
|             fi | ||||
|         done | ||||
|         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..." | ||||
|             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 | ||||
|         fi | ||||
|     fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| kill_wine () { | ||||
| @@ -1079,10 +1076,8 @@ init_database () { | ||||
|         if [[ -f "$WIN_FILE_EXEC".whdb ]] ; then | ||||
|             WHDB_FILE="$WIN_FILE_EXEC".whdb | ||||
|         else | ||||
|             orig_IFS="$IFS" | ||||
|             IFS=$'\n' | ||||
|             WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )" | ||||
|             if [[ $(echo "$WH_FIND_DB_FILE" | wc -l) -eq 1 ]] ; then | ||||
|             orig_IFS="$IFS" && IFS=$'\n' | ||||
|             if WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )" ; then | ||||
|                 WHDB_FILE="$WH_FIND_DB_FILE" | ||||
|             fi | ||||
|             IFS="$orig_IFS" | ||||
| @@ -1093,8 +1088,7 @@ init_database () { | ||||
|         print_info "Используется файл настроек: $WHDB_FILE" | ||||
|         . "$WHDB_FILE" | ||||
|     elif check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then | ||||
|         print_info "Найдены настройки из предыдущего использования префикса." | ||||
|         echo "$WINEPREFIX/last.conf" | ||||
|         print_info "Найдены настройки из предыдущего использования префикса: $WINEPREFIX" | ||||
|         cat "$WINEPREFIX/last.conf" | ||||
|         . "$WINEPREFIX/last.conf" | ||||
|     else | ||||
| @@ -1215,10 +1209,62 @@ run_autoinstall () { | ||||
|     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 () { | ||||
|     local answer | ||||
|  | ||||
|     if [[ $1 =~ --force|-y ]] ; then | ||||
|         answer="y" | ||||
|     else | ||||
|         echo "======================================================" | ||||
|         print_warning "Вы собираетесь удалить WineHelper и все связанные с ним данные." | ||||
|         echo " Это удалит:" | ||||
| @@ -1236,9 +1282,13 @@ remove_winehelper () { | ||||
|             echo "----------------------------------------------" | ||||
|             echo "Продолжить? (y/N)" | ||||
|             read -r answer | ||||
|         else | ||||
|             print_info "Удаление отменено." | ||||
|             return 1 | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     if [[ "$answer" =~ ^[YyДд]$ ]] ; then | ||||
|  | ||||
|         # Удаление рабочих каталогов | ||||
|         try_remove_dir "$USER_WORK_PATH" | ||||
|  | ||||
| @@ -1255,9 +1305,7 @@ remove_winehelper () { | ||||
|         done | ||||
|  | ||||
|         # Обновление кэша desktop-файлов | ||||
|             if check_command update-desktop-database; then | ||||
|         update-desktop-database "$HOME/.local/share/applications" | ||||
|             fi | ||||
|  | ||||
|         # Удаление символических ссылок | ||||
|         try_remove_file "$HOME/.winehelper" | ||||
| @@ -1266,9 +1314,6 @@ remove_winehelper () { | ||||
|     else | ||||
|         print_info "Удаление отменено." | ||||
|     fi | ||||
|     else | ||||
|         print_info "Удаление отменено." | ||||
|     fi | ||||
| } | ||||
|  | ||||
| wh_info () { | ||||
| @@ -1281,7 +1326,8 @@ wh_info () { | ||||
|  | ||||
|     installed                     список установленных программ | ||||
|     run [программа.exe]           запуск программы (отладка) | ||||
|     remove                        удалить WineHelper и все связанные данные | ||||
|     remove-all                    удалить WineHelper и все связанные данные | ||||
|     remove-prefix [имя_префикса]  удалить префикс и все связанные данные | ||||
|  | ||||
| Параметры: | ||||
|     --help                        показать эту справку и выйти | ||||
| @@ -1310,12 +1356,13 @@ case "${1,,}" in | ||||
|     winereg|regedit) prepair_wine ; wine_run "regedit" ;; | ||||
|     winefile|explorer) prepair_wine ; wine_run "winefile" ;; | ||||
|     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 ;; | ||||
|     install|-i) shift ; run_autoinstall "$@" ;; | ||||
|     installed) shift ; check_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 | ||||
|             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