Scripts version 2257

This commit is contained in:
Mikhail Tergoev
2024-02-15 05:34:45 +03:00
parent 9a6e1f14f9
commit c322b56eed
17 changed files with 265 additions and 314 deletions

View File

@ -22,50 +22,36 @@ fi
. "$(dirname $(readlink -f "$0"))/functions_helper"
start_portwine () {
var_winedlloverride_update "${PW_MUST_WINEDLLOVERRIDES}"
export WINEPREFIX="$(readlink -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}")"
if [[ "$WINEPREFIX" != "${PORT_WINE_PATH}/data/prefixes/"* ]] && [[ ! -d "$WINEPREFIX" ]] ; then
yad_error "Path to PREFIX not found:\n$WINEPREFIX"
exit 1
fi
create_new_dir "${WINEPREFIX}/drive_c/windows/system32/"
create_new_dir "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_dir "${PORT_WINE_PATH}/data/prefixes" "${WINEPREFIX}/drive_c/"
export WINEARCH="win64"
if [[ "${PW_VULKAN_USE}" == 3 ]] ; then
export PW_WINE_USE="${PW_PROTON_LG_VER}"
echo "Force to use $PW_WINE_USE"
if [ ! -d "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}" ] ; then
if try_download "github.com/Castro-Fidel/wine_builds/releases/download/${PW_WINE_USE}/${PW_WINE_USE}.tar.xz" \
"${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" ; then
if unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" "${PORT_WINE_PATH}/data/dist/" ; then
try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz"
UNPACK_STATUS=0
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz"
try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}"
fi
fi
[[ "${UNPACK_STATUS}" != 0 ]] && exit 1
PROGPFX_URL="github.com/Castro-Fidel/PortWINE/releases/download/progpfx${PROGPFX_VER}/progpfx${PROGPFX_VER}.tar.xz"
if [[ "${PW_PREFIX_NAME}" == "PROGRAMS" && ! -f "${WINEPREFIX}"/.progpfx ]] ; then
print_info "Download and install PROGRAMS pfx..."
if try_download "${PROGPFX_URL}" "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" ; then
unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/"
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
yad_error_download && exit 1
fi
edit_db_from_gui PW_WINE_USE
else
pw_check_and_download_wine "${PW_WINE_USE}"
fi
pw_install_dll_in_prefix
DOTPFX_URL="github.com/Castro-Fidel/PortWINE/releases/download/dotpfx${DOTPFX_VER}/dotpfx${DOTPFX_VER}.tar.xz"
if [[ "${PW_PREFIX_NAME}" == "DOTNET" ]] && [[ ! -f "${WINEPREFIX}"/.dotnet${DOTPFX_VER} ]] ; then
print_info "Download and install DOTNET pfx..."
if try_download "${DOTPFX_URL}" "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" ; then
unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/"
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
yad_error_download && exit 1
fi
fi
var_winedlloverride_update "${PW_MUST_WINEDLLOVERRIDES}"
pw_list_install_dll_in_prefix
pw_check_and_download_wine "${PW_WINE_USE}"
init_wine_ver
if [[ -f "$portwine_exe" ]] && [[ "${WARN_CYRILLIC_IN_PATH}" == 1 ]] ; then
edit_db_from_gui WARN_CYRILLIC_IN_PATH
unset WARN_CYRILLIC_IN_PATH
fi
if [[ "$PW_USE_OBS_VKCAPTURE" == "1" ]] ; then
export OBS_VKCAPTURE="1"
export PW_USE_SYSTEM_VK_LAYERS="1"
print_warning "System mangohud, vkBasalt, obs-vk capture and other applications using vulkan layers are forcibly used."
fi
pw_init_runtime
check_variables VKD3D_DEBUG none
@ -82,6 +68,65 @@ start_portwine () {
unset WINE_MONO_TRACE
fi
if [[ ! -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/windows ]] \
|| [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/userdef.reg ]] \
|| [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/system.reg ]] \
|| [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/user.reg ]]
then
pw_clear_pfx
check_dirs_and_files_in_pfx
pw_wineboot () {
print_info "Used wineboot $@ for prefix: ${PW_PREFIX_NAME}"
${pw_runtime} env GST_PLUGIN_SYSTEM_PATH_1_0="" LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" \
"${WINELOADER}" wineboot $@ &>>"${PORT_WINE_TMP_PATH}/update_pfx_log"
wait_wineserver
print_info "The prefix has been updated."
}
if [[ "${PW_PREFIX_NAME}" == DEFAULT ]] ; then
pw_update_pfx_cover_gui
unpack_tar_xz "${PW_WINELIB}/default_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent
pw_wineboot -u
elif [[ "${PW_CHECK_AUTOINSTAL}" == 1 ]] \
&& [[ "${DISABLE_CP_DEFPFX}" != 1 ]] ; then
pw_update_pfx_cover_gui
unpack_tar_xz "${PW_WINELIB}/default_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent
pw_wineboot -u
elif yad_question "$loc_gui_dll_new_pfx ${PW_PREFIX_NAME}" ; then
pw_update_pfx_cover_gui
unpack_tar_xz "${PW_WINELIB}/default_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent
pw_wineboot -u
else
pw_update_pfx_cover_gui
pw_wineboot -i
fi
else
check_dirs_and_files_in_pfx
if [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" ]] \
|| ! grep "${PW_WINE_USE}" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" &>/dev/null
then
pw_update_pfx_cover_gui
# HOTFIX - update prefix for vkPlay
if echo "$portwine_exe" | grep -i vkplay &>/dev/null
then pw_kill_autostart GameCe 5 please & :
fi
pw_wineboot -u
fi
fi
echo "${PW_WINE_USE}" > "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver"
# if [[ -f "$portwine_exe" ]] && [[ "${WARN_CYRILLIC_IN_PATH}" == 1 ]] ; then
# edit_db_from_gui WARN_CYRILLIC_IN_PATH
# unset WARN_CYRILLIC_IN_PATH
# fi
if [[ "$PW_USE_OBS_VKCAPTURE" == "1" ]] ; then
export OBS_VKCAPTURE="1"
export PW_USE_SYSTEM_VK_LAYERS="1"
print_warning "System mangohud, vkBasalt, obs-vk capture and other applications using vulkan layers are forcibly used."
fi
if [[ "${PW_NO_ESYNC}" == 1 ]]
then export WINEESYNC="0"
else export WINEESYNC="1"
@ -134,18 +179,6 @@ start_portwine () {
export PW_USE_GAMESCOPE="0"
export PW_RUN_GAMESCOPE=""
fi
if [[ "${PW_DISABLE_COMPOSITING}" == "1" ]] ; then
if [[ "${DESKTOP_SESSION}" =~ "plasma" ]] ; then
qdbus org.kde.KWin /Compositor suspend
elif [[ "${DESKTOP_SESSION}" =~ "mate" ]] ; then
gsettings set org.mate.Marco.general compositing-manager false
elif [[ "${DESKTOP_SESSION}" =~ "xfce" ]] ; then
xfconf-query -c xfwm4 -p /general/use_compositing -s false
elif [[ "${DESKTOP_SESSION}" =~ "cinnamon" ]] ; then
gsettings set org.cinnamon.muffin unredirect-fullscreen-windows true
fi
fi
enabled_fake_nvidia_videocard ()
{
@ -222,8 +255,8 @@ start_portwine () {
var_winedlloverride_update "nvngx,_nvngx="
fi
if [[ "${PW_USE_GALLIUM_ZINK}" == 1 ]] ; then
export PW_VULKAN_USE=5
if [[ "${PW_USE_GALLIUM_ZINK}" == 1 ]]
then export PW_VULKAN_USE=5
fi
if [[ "${PW_HEAP_DELAY_FREE}" == 1 ]]
@ -265,36 +298,6 @@ start_portwine () {
fi
fi
# if [[ "${PW_AMD_VULKAN_USE}" == "amdvlk" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# if grep -i -q -E '(rosa|redos|nobara|linuxmint|ubuntu|centos|rhel|fedora)' "/etc/os-release" ; then
# export VK_ICD_FILENAMES="/opt/amdgpu/etc/vulkan/icd.d/amd_icd32.json:/opt/amdgpu/etc/vulkan/icd.d/amd_icd64.json"
# elif grep -i -q "altlinux" '/etc/os-release' ; then
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/amd_icd.json"
# else
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/amd_icd32.json:/usr/share/vulkan/icd.d/amd_icd64.json"
# fi
# elif [[ "${PW_AMD_VULKAN_USE}" == "amdgpupro" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# if grep -i -q -E '(rosa|redos|nobara|linuxmint|ubuntu|centos|rhel|fedora)' "/etc/os-release" ; then
# export VK_ICD_FILENAMES="/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd32.json:/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd64.json"
# var_ld_library_path_update "/opt/amdgpu/libdrm/lib64:/opt/amdgpu/libdrm/lib32"
# else
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/amd_pro_icd32.json:/usr/share/vulkan/icd.d/amd_pro_icd64.json"
# fi
# elif [[ "${PW_AMD_VULKAN_USE}" == "radv" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json"
# elif [[ "${PW_AMD_VULKAN_USE}" == "radv_aco" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# var_radv_perftest_config_update aco
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json"
# elif [[ "${PW_AMD_VULKAN_USE}" == "radv_gpl" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# var_radv_perftest_config_update gpl
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json"
# fi
case "$PW_FORCE_USE_VSYNC" in # 0-FORCE_OFF, 1-FORCE_ON, 2-BY_DEFAULT
0)
export vblank_mode=0
@ -308,14 +311,15 @@ start_portwine () {
unset vblank_mode __GL_SYNC_TO_VBLANK
;;
esac
export int_xneur=0
if [[ ! -z "`pgrep xneur`" ]]; then
killall xneur
export int_xneur=1
fi
if [[ "$PW_USE_GAMEMODE" = "1" ]] ; then
if command -v gamemoded ; then
if [[ "$PW_USE_GAMEMODE" = "1" ]] ; then
if command -v gamemoded &>/dev/null ; then
export GAMEMODERUN=1
PW_GAMEMODERUN_SLR="gamemoderun"
systemctl enable --now --user gamemoded &>/dev/null
@ -342,110 +346,7 @@ start_portwine () {
print_info "Gamemod is not installed or disabled in vars script or db file: PW_USE_GAMEMODE=$PW_USE_GAMEMODE"
fi
pw_other_fixes
check_dirs_and_files_in_pfx () {
create_new_dir "${WINEPREFIX}"
create_new_dir "${WINEPREFIX}/drive_c"
create_new_dir "${WINEPREFIX}/dosdevices"
create_new_dir "${WINEPREFIX}/drive_c/windows/syswow64/"
create_new_dir "${WINEPREFIX}/drive_c/windows/system32/"
create_new_dir "${WINEPREFIX}/drive_c/tmp/.private/$USER/"
create_new_dir "${WINEPREFIX}/drive_c/tmp/.private/steamuser/"
[ ! -d "${WINEPREFIX}/dosdevices/c:" ] && try_force_link_dir "${WINEPREFIX}/drive_c/" "${WINEPREFIX}/dosdevices/c:"
[ ! -d "${WINEPREFIX}/dosdevices/z:" ] && try_force_link_dir "/" "${WINEPREFIX}/dosdevices/z:"
[ ! -d "${WINEPREFIX}/dosdevices/h:" ] && try_force_link_dir "$HOME" "${WINEPREFIX}/dosdevices/h:"
create_new_dir "${WINEPREFIX}/drive_c/windows/Fonts/"
LN_FONTS="arialbd.ttf courbd.ttf georgia.ttf micross.ttf msyh.ttf simsun.ttc arial.ttf cour.ttf malgun.ttf msgothic.ttc nirmala.ttf times.ttf"
for link_font in $LN_FONTS ; do
if [[ ! -f "${WINEPREFIX}/drive_c/windows/Fonts/${link_font}" ]] ; then
try_force_link_file "${WINEDIR}/share/fonts/${link_font}" "${WINEPREFIX}/drive_c/windows/Fonts/"
fi
done
find "${WINEPREFIX}/dosdevices" -xtype l -maxdepth 1 2>/dev/null -exec rm {} \;
rm -f "${WINEPREFIX}/dosdevices/"*::
DRIVES=(d e f g i j k l m n o p q r s t u v w x y)
DEF_MOUNT_DIRS=('/media' "/media/$USER" '/mnt' '/run/media' "/run/media/$USER")
MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -type d 2>/dev/null | sort -u))
for drive_dir in "${MOUNT_DIRS[@]}" ; do
if [[ ! "${DEF_MOUNT_DIRS[@]}" =~ "$drive_dir" ]] \
&& ! realpath "${WINEPREFIX}/dosdevices"/*: | grep "$drive_dir" &>/dev/null ; then
drive_num=0
while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do
drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:"
if [ ! -d "$drive_path" ] ; then
ln -sf "$drive_dir" "$drive_path"
break
else
((drive_num++))
fi
done
fi
done
}
PROGPFX_URL="github.com/Castro-Fidel/PortWINE/releases/download/progpfx${PROGPFX_VER}/progpfx${PROGPFX_VER}.tar.xz"
if [[ "${PW_PREFIX_NAME}" == "PROGRAMS" && ! -f "${WINEPREFIX}"/.progpfx ]] ; then
print_info "Download and install PROGRAMS pfx..."
if try_download "${PROGPFX_URL}" "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" ; then
unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/"
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
yad_error_download && exit 1
fi
fi
DOTPFX_URL="github.com/Castro-Fidel/PortWINE/releases/download/dotpfx${DOTPFX_VER}/dotpfx${DOTPFX_VER}.tar.xz"
if [[ "${PW_PREFIX_NAME}" == "DOTNET" ]] && [[ ! -f "${WINEPREFIX}"/.dotnet${DOTPFX_VER} ]] ; then
print_info "Download and install DOTNET pfx..."
if try_download "${DOTPFX_URL}" "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" ; then
unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/"
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
yad_error_download && exit 1
fi
fi
pw_update_pfx_cover_gui
if [[ ! -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" \
|| ! -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/windows \
|| ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/userdef.reg \
|| ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/system.reg \
|| ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/user.reg ]]
then
pw_clear_pfx
check_dirs_and_files_in_pfx
if [[ -f "${PW_WINELIB}/default_pfx.tar.xz" ]] && [[ "${DISABLE_CP_DEFPFX}" != 1 ]] ; then
unpack_tar_xz "${PW_WINELIB}/default_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent
fi
fi
echo "${PW_WINE_USE}" > "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver"
check_dirs_and_files_in_pfx
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser"
if [ ! -d "${WINEPREFIX}/drive_c/users/${USER}" ]; then
try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser" "${WINEPREFIX}/drive_c/users/${USER}"
fi
create_new_dir "${WINEPREFIX}/drive_c/users/Public/Documents/Steam"
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/Documents/Steam"
if [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/My Documents" ]
then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/Documents" "${WINEPREFIX}/drive_c/users/steamuser/My Documents"
fi
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming"
if [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/Application Data" ]
then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming" "${WINEPREFIX}/drive_c/users/steamuser/Application Data"
fi
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local"
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/Local Settings"
if [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data" ]
then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local" "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data"
fi
#enabled BattleEye_Runtime and EasyAntiCheat_Runtime
if [[ "${PW_USE_EAC_AND_BE}" == 1 ]] ; then
export PROTON_BATTLEYE_RUNTIME="${PW_PLUGINS_PATH}/BattlEye_Runtime"
@ -462,7 +363,10 @@ start_portwine () {
unset PULSE_LATENCY_MSEC
fi
if [[ "$PW_USE_US_LAYOUT" == "1" ]] && [[ "${XDG_SESSION_TYPE}" != "wayland" ]] && command -v setxkbmap &>/dev/null ; then
if [[ "$PW_USE_US_LAYOUT" == "1" ]] \
&& [[ "${XDG_SESSION_TYPE}" != "wayland" ]] \
&& command -v setxkbmap &>/dev/null
then
setxkbmap -model pc101 us -print | xkbcomp - $DISPLAY &>/dev/null
else
export PW_USE_US_LAYOUT="0"
@ -692,6 +596,7 @@ start_portwine () {
fi
done
if [[ "${USE_WT_FROM_DB}" == "1" ]] ; then
pw_update_pfx_cover_gui
update_winetricks
echo "START WINETRICKS..." >> "${PORT_WINE_TMP_PATH}/update_pfx_log"
echo "Try to install DLL in prefix: ${PW_DLL_NEED_INSTALL}" >> "${PORT_WINE_TMP_PATH}/update_pfx_log"
@ -731,6 +636,20 @@ start_portwine () {
if [[ -f "${PATH_TO_GAME}/dxvk.conf" ]] ; then
export DXVK_CONFIG_FILE="${PATH_TO_GAME}/dxvk.conf"
fi
if [[ "${PW_DISABLE_COMPOSITING}" == "1" ]] \
&& ! check_gamescope_session
then
if [[ "${DESKTOP_SESSION}" =~ "plasma" ]] ; then
qdbus org.kde.KWin /Compositor suspend
elif [[ "${DESKTOP_SESSION}" =~ "mate" ]] ; then
gsettings set org.mate.Marco.general compositing-manager false
elif [[ "${DESKTOP_SESSION}" =~ "xfce" ]] ; then
xfconf-query -c xfwm4 -p /general/use_compositing -s false
elif [[ "${DESKTOP_SESSION}" =~ "cinnamon" ]] ; then
gsettings set org.cinnamon.muffin unredirect-fullscreen-windows true
fi
fi
}
pw_run () {