Compare commits

..

11 Commits

5 changed files with 163 additions and 147 deletions

View File

@ -1,5 +1,10 @@
История изменений: История изменений:
0.4.0:
* добавлена автоматическая установка и настройка wine-cpcsp_proxy при
использовании переменной WH_USE_CPCSP_PROXY=1
* подготовка функций для создания бэкапов префикса
0.3.9: 0.3.9:
* обновлен скрипт установки scadoffice * обновлен скрипт установки scadoffice
* добавлена автоустановка: * добавлена автоустановка:
@ -8,7 +13,8 @@
* добавлена возможность удаления префикса * добавлена возможность удаления префикса
0.3.8: 0.3.8:
* добавлена возможность ассоциации и запуска файлов из WINE в нативном Linux приложении * добавлена возможность ассоциации и запуска файлов из WINE в нативном Linux
приложении с помощью перемененной. Пример: WH_XDG_OPEN="rtf txt doc"
* добавлен выбор префикса, если переменная WINEPREFIX не объявлена * добавлен выбор префикса, если переменная WINEPREFIX не объявлена
* добавлено сохранение последней конфигурации использования префикса * добавлено сохранение последней конфигурации использования префикса
* добавлено сохранение скписка создаваемых ярлыков для приложений * добавлено сохранение скписка создаваемых ярлыков для приложений

View File

@ -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

View File

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

View File

@ -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

View File

@ -12,21 +12,41 @@ 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 #####
@ -67,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"
@ -103,19 +126,15 @@ 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 прервана."
@ -123,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"
@ -159,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
@ -171,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"
@ -197,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
} }
@ -315,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}"
@ -323,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
} }
@ -361,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"
@ -388,11 +383,9 @@ create_desktop () {
fi fi
fi fi
create_new_dir "$WH_MENU_DIR"
[[ ! -f "$icon_file" ]] && icon_file=wine
# создаем .desktop файл # создаем .desktop файл
create_new_dir "$WH_MENU_DIR"
[[ ! -f "$icon_file" ]] && icon_file=wine
{ {
echo "[Desktop Entry]" echo "[Desktop Entry]"
echo "Name=$name_desktop" echo "Name=$name_desktop"
@ -407,13 +400,14 @@ 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" # добавляем информацию о приложении в "$WINEPREFIX/desktop.list"
if [[ -f "$WINEPREFIX/desktop.list" ]] \ if [[ -f "$WINEPREFIX/desktop.list" ]] \
&& grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list" && grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list"
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list" then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list"
fi 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" create_new_dir "$HOME/.local/share/desktop-directories"
@ -446,9 +440,7 @@ EOF
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
@ -478,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"
@ -495,12 +486,10 @@ remove_desktop () {
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
@ -539,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"
@ -557,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"
@ -625,27 +612,19 @@ init_vkd3d () {
done done
} }
##### DOWNLOAD WINE #####
download_wine () {
if [[ ! -d "$WH_DIST_DIR/$WH_WINE_USE" ]] ; then
WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz"
local WINE_PACKAGE="$WH_TMP_DIR/${WH_WINE_USE}.tar.xz"
if try_download "$WINE_URL" "$WINE_PACKAGE" check256sum ; then
if unpack "$WINE_PACKAGE" "$WH_DIST_DIR/" ; then
echo "$WH_WINE_USE" > "$WH_DIST_DIR/$WH_WINE_USE/version"
try_remove_file "$WINE_PACKAGE"
fi
fi
fi
}
##### INITIAL WINE SETTINGS #####
init_wine_ver () { init_wine_ver () {
if [[ "$WH_WINE_USE" != system* ]] ; then if [[ "$WH_WINE_USE" != system* ]] ; then
export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE" export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE"
if [[ ! -d "$WINEDIR" ]] ; then if [[ ! -d "$WINEDIR" ]] ; then
download_wine WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz"
local WINE_PACKAGE="$WH_TMP_DIR/${WH_WINE_USE}.tar.xz"
if try_download "$WINE_URL" "$WINE_PACKAGE" check256sum ; then
if unpack "$WINE_PACKAGE" "$WH_DIST_DIR/" ; then
echo "$WH_WINE_USE" > "$WH_DIST_DIR/$WH_WINE_USE/version"
try_remove_file "$WINE_PACKAGE"
fi
fi
fi fi
export WINE="${WINEDIR}/bin/wine" export WINE="${WINEDIR}/bin/wine"
@ -668,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
@ -676,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
@ -693,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 () {
@ -827,10 +807,6 @@ get_and_set_reg_file () {
} }
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
} }
@ -885,7 +861,7 @@ check_prefix_var () {
print_info "Выбран префикс: $WINEPREFIX" print_info "Выбран префикс: $WINEPREFIX"
fi fi
if echo "$WINEPREFIX" | grep -v '/' ; then if echo "$WINEPREFIX" | grep -qv '/' ; then
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX" export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
fi fi
@ -911,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
@ -925,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
@ -989,6 +965,43 @@ init_wineprefix () {
try_remove_file "$WRAPPER" try_remove_file "$WRAPPER"
fi 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" echo "# переменные последнего использования префикса:" > "$WINEPREFIX/last.conf"
for var in WH_WINE_USE BASE_PFX WINEARCH WH_WINDOWS_VER WINEESYNC WINEFSYNC \ 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 \ STAGING_SHARED_MEMORY WINE_LARGE_ADDRESS_AWARE WH_USE_SHADER_CACHE WH_USE_WINE_DXGI \
@ -998,7 +1011,6 @@ init_wineprefix () {
done 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}"
@ -1024,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"
@ -1040,7 +1048,7 @@ use_winetricks () {
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_WINETRICKS" -q ${WH_DLL_NEED_INSTALL} "$WH_WINETRICKS" -q ${WH_DLL_NEED_INSTALL}
wait_wineserver wait_wineserver
fi fi
fi fi
@ -1063,10 +1071,8 @@ init_database () {
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) -eq 1 ]] ; then
WHDB_FILE="$WH_FIND_DB_FILE" WHDB_FILE="$WH_FIND_DB_FILE"
fi fi
IFS="$orig_IFS" IFS="$orig_IFS"
@ -1077,8 +1083,7 @@ init_database () {
print_info "Используется файл настроек: $WHDB_FILE" print_info "Используется файл настроек: $WHDB_FILE"
. "$WHDB_FILE" . "$WHDB_FILE"
elif check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then elif check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then
print_info "Найдены настройки из предыдущего использования префикса." print_info "Найдены настройки из предыдущего использования префикса: $WINEPREFIX"
echo "$WINEPREFIX/last.conf"
cat "$WINEPREFIX/last.conf" cat "$WINEPREFIX/last.conf"
. "$WINEPREFIX/last.conf" . "$WINEPREFIX/last.conf"
else else
@ -1129,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
} }
@ -1199,7 +1206,6 @@ run_autoinstall () {
echo echo
} }
##### REMOVE PREFIX #####
remove_prefix() { remove_prefix() {
local prefix_name="$1" local prefix_name="$1"
local prefix_path="$WH_PREFIXES_DIR/$prefix_name" local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
@ -1251,7 +1257,6 @@ remove_prefix() {
fi fi
} }
##### REMOVE WINEHELPER #####
remove_winehelper () { remove_winehelper () {
local answer local answer
if [[ $1 =~ --force|-y ]] ; then if [[ $1 =~ --force|-y ]] ; then
@ -1297,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"
@ -1355,7 +1358,7 @@ case "${1,,}" in
install|-i) shift ; run_autoinstall "$@" ;; install|-i) shift ; run_autoinstall "$@" ;;
installed) shift ; check_installed_programs "$1" ;; installed) shift ; check_installed_programs "$1" ;;
run|-r) shift ; run_installed_programs "$1" ;; run|-r) shift ; run_installed_programs "$1" ;;
remove-all) shift ; remove_winehelper "$@ ";; remove-all) shift ; remove_winehelper "$@" ;;
remove-prefix) shift ; remove_prefix "$@" ;; remove-prefix) shift ; remove_prefix "$@" ;;
*) *)
if [[ -f "$1" ]] ; then if [[ -f "$1" ]] ; then