Compare commits

..

8 Commits

Author SHA1 Message Date
Mikhail Tergoev
9696b33f34 Scripts version 2383 2024-12-22 18:37:56 +03:00
Mikhail Tergoev
723596bb16 updated create shortcat from epic games 2024-12-22 18:37:22 +03:00
Mikhail Tergoev
c26ca666c5 Merge branch 'alex2844-epicgames' into devel 2024-12-22 16:35:23 +03:00
Mikhail Tergoev
fc7346c681 Merge branch 'epicgames' of github.com:alex2844/PortWINE into alex2844-epicgames 2024-12-22 16:35:11 +03:00
Mikhail Tergoev
5eb82457b8 updated AMD_VULKAN_DRIVER_LIST 2024-12-22 16:20:42 +03:00
Alex Smith
8c60222c27 "${PORT_WINE_TMP_PATH}/processes" 2024-12-13 19:23:37 +05:00
Alex Smith
fc565a2de8 removed debug information 2024-12-13 19:13:00 +05:00
Alex Smith
f7c9fee8c1 support egs 2024-12-13 19:09:54 +05:00
5 changed files with 108 additions and 68 deletions

@ -2,6 +2,9 @@ You can help us in the development of the project on the website: https://linux-
---------------------------------------- ----------------------------------------
Changelog: Changelog:
###Scripts version 2383### / Date: 22.12.2024 / Download update size: 4 megabytes
* added automatic creation of shortcuts for games from Epic Games Launcher (thanks alex2844)
###Scripts version 2382### / Date: 22.12.2024 / Download update size: 270 megabytes ###Scripts version 2382### / Date: 22.12.2024 / Download update size: 270 megabytes
* updated PROTON_LG to version "9-21" * updated PROTON_LG to version "9-21"
* updated versions: * updated versions:

@ -2,6 +2,9 @@
----------------------------------------- -----------------------------------------
История изменений: История изменений:
###Scripts version 2383### / Дата: 22.12.2024 / Размер скачиваемого обновления: 4 мегабайта
* добавлено автоматическое создание ярлыков для игр из Epic Games Launcher (спасибо alex2844)
###Scripts version 2382### / Дата: 22.12.2024 / Размер скачиваемого обновления: 270 мегабайт ###Scripts version 2382### / Дата: 22.12.2024 / Размер скачиваемого обновления: 270 мегабайт
* обновлен PROTON_LG до версии "9-21" * обновлен PROTON_LG до версии "9-21"
* обновлены версии: * обновлены версии:

@ -1890,8 +1890,7 @@ export -f wait_wineserver
kill_portwine () { kill_portwine () {
if [[ "${PW_WINE_USE}" != "USE_SYSTEM_WINE" ]] ; then if [[ "${PW_WINE_USE}" != "USE_SYSTEM_WINE" ]] ; then
check_flatpak if check_flatpak && [[ "$ALPINE_FP" == "1" ]] ; then
if [[ "$ALPINE_FP" == "1" ]] ; then
wine_pids=$(ls -l /proc/*/exe >/dev/null 2>&1 | grep -ie PortProton | grep -E 'wine(64)?-preloader|wineserver' | awk -F/ '{print $3}') wine_pids=$(ls -l /proc/*/exe >/dev/null 2>&1 | grep -ie PortProton | grep -E 'wine(64)?-preloader|wineserver' | awk -F/ '{print $3}')
bwrap_pids=$(pgrep -f wrap | grep PortProton | head -n 1) bwrap_pids=$(pgrep -f wrap | grep PortProton | head -n 1)
else else
@ -1908,7 +1907,6 @@ kill_portwine () {
kill -n 9 "${pw_kill_pids}" &>/dev/null kill -n 9 "${pw_kill_pids}" &>/dev/null
fi fi
done done
return 0 return 0
} }
export -f kill_portwine export -f kill_portwine
@ -2799,45 +2797,45 @@ pw_skip_get_info () {
GET_AMD_VULKAN_DRIVER_LIST="amdvlk amdgpupro radv" GET_AMD_VULKAN_DRIVER_LIST="amdvlk amdgpupro radv"
unset AMD_VULKAN_DRIVER_LIST unset AMD_VULKAN_DRIVER_LIST
for DRIVER in $GET_AMD_VULKAN_DRIVER_LIST; do if ! check_flatpak \
case "$DRIVER" in && [[ $(check_vendor_gpu) =~ amd ]]
"amdvlk") then
for file in /opt/amdgpu/etc/vulkan/icd.d/amd_icd*.json \ for DRIVER in $GET_AMD_VULKAN_DRIVER_LIST; do
/etc/vulkan/icd.d/amd_icd*.json \ case "$DRIVER" in
/usr/share/vulkan/icd.d/amd_icd*.json ; do "amdvlk")
if [ -f "$file" ]; then for file in /opt/amdgpu/etc/vulkan/icd.d/amd_icd*.json \
AMD_VULKAN_DRIVER_LIST+="amdvlk" /etc/vulkan/icd.d/amd_icd*.json \
break /usr/share/vulkan/icd.d/amd_icd*.json ; do
fi if [ -f "$file" ]; then
done AMD_VULKAN_DRIVER_LIST+="amdvlk"
;; break
"amdgpupro") fi
for file in /opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd*.json \ done
/usr/share/vulkan/icd.d/amd_pro_icd*.json; do ;;
if [ -f "$file" ]; then "amdgpupro")
AMD_VULKAN_DRIVER_LIST+="!amdgpupro" for file in /opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd*.json \
break /usr/share/vulkan/icd.d/amd_pro_icd*.json; do
fi if [ -f "$file" ]; then
done AMD_VULKAN_DRIVER_LIST+="!amdgpupro"
;; break
"radv") fi
for file in /usr/share/vulkan/icd.d/radeon_icd.*.json ; do done
if [ -f "$file" ]; then ;;
AMD_VULKAN_DRIVER_LIST+="!radv" "radv")
break for file in /usr/share/vulkan/icd.d/radeon_icd.*.json ; do
fi if [ -f "$file" ]; then
done AMD_VULKAN_DRIVER_LIST+="!radv"
;; break
esac fi
done done
export AMD_VULKAN_DRIVER_LIST ;;
esac
if [[ -z "$AMD_VULKAN_DRIVER_LIST" ]] || check_flatpak ; then done
AMD_VULKAN_CB=":DCB" export AMD_VULKAN_DRIVER_LIST
export AMD_VULKAN_CB=":CB"
else else
AMD_VULKAN_CB=":CB" export AMD_VULKAN_CB=":DCB"
fi fi
export AMD_VULKAN_CB
logical_cores=$(grep -c ^"processor" /proc/cpuinfo) logical_cores=$(grep -c ^"processor" /proc/cpuinfo)
if [[ "${logical_cores}" -le "4" ]] ; then if [[ "${logical_cores}" -le "4" ]] ; then
@ -4377,24 +4375,34 @@ portwine_launch () {
fi fi
[[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME" [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME"
case "${portwine_exe,,}" in if [[ -n "${LAUNCH_URI}" ]]; then
*.exe) pw_run start /high /b "${LAUNCH_URI}" &
pw_run "${PW_VD_TMP[@]}" ${WINE_WIN_START} "$portwine_exe" while true ; do
;; sleep 5
*.bat) GAMEPID="$(pgrep -fa "$(basename "$portwine_exe")" | grep -v "start.sh" | grep -i "epic" | awk '{print $1}')"
PW_USE_TERMINAL=1 [[ -n $GAMEPID ]] && break
pw_run "${PW_VD_TMP[@]}" "$portwine_exe" done
;; while [[ -f "/proc/$GAMEPID/exe" ]] ; do sleep 5 ; done
*.msi) else
pw_run "${PW_VD_TMP[@]}" msiexec /i "$portwine_exe" case "${portwine_exe,,}" in
;; *.exe)
*.reg) pw_run "${PW_VD_TMP[@]}" ${WINE_WIN_START} "$portwine_exe"
pw_run "${PW_VD_TMP[@]}" regedit "$portwine_exe" ;;
;; *.bat)
*) PW_USE_TERMINAL=1
pw_run "${PW_VD_TMP[@]}" winefile pw_run "${PW_VD_TMP[@]}" "$portwine_exe"
;; ;;
esac *.msi)
pw_run "${PW_VD_TMP[@]}" msiexec /i "$portwine_exe"
;;
*.reg)
pw_run "${PW_VD_TMP[@]}" regedit "$portwine_exe"
;;
*)
pw_run "${PW_VD_TMP[@]}" winefile
;;
esac
fi
} }
pw_winecfg () { pw_winecfg () {
@ -6176,8 +6184,7 @@ portwine_output_yad_shortcut () {
export PW_NEW_DESKTOP="1" export PW_NEW_DESKTOP="1"
if [[ "$PW_NO_RESTART_PPDB" != "1" ]] \ if [[ "$PW_NO_RESTART_PPDB" != "1" ]] ; then
|| [[ -z ${LINKS[1]} ]] ; then
print_info "Restarting PP..." print_info "Restarting PP..."
[[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB
restart_pp restart_pp
@ -6192,18 +6199,21 @@ portwine_output_yad_shortcut () {
parse_lnk () { parse_lnk () {
prefix_name=$(echo "$1" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') prefix_name=$(echo "$1" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}')
if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then
&& [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then exe_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}')
link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/${prefix_name:-DEFAULT}/dosdevices/$link_drive|g" | sed 's/\\/\//g')
else else
link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') exe_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/${prefix_name:-DEFAULT}/dosdevices/$link_drive|g" | sed 's/\\/\//g')
fi fi
get_lnk_path "${exe_path}"
link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||')
link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp")
} }
get_lnk_path () {
link_drive=$(echo "$1" | cut -d: -f1 | awk '{print tolower($0)}')
link_path=$(echo "$1" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/${prefix_name:-${PW_PREFIX_NAME:-DEFAULT}}/dosdevices/${link_drive}|g" | sed 's/\\/\//g')
}
get_lnk () { get_lnk () {
if command -v exiftool &>/dev/null ; then if command -v exiftool &>/dev/null ; then
if timeout 3 exiftool "$1" &> "${PW_TMPFS_PATH}/exiftool.tmp" ; then if timeout 3 exiftool "$1" &> "${PW_TMPFS_PATH}/exiftool.tmp" ; then
@ -6228,6 +6238,30 @@ pw_auto_create_shortcut () {
return 0 return 0
fi fi
if [[ "${portwine_exe}" =~ EpicGamesLauncher.exe$ ]]; then
for item_file in "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/ProgramData/Epic/EpicGamesLauncher/Data/Manifests/"*".item"; do
if [[ -f "${item_file}" ]]; then
exe_path=$(jq -r '.InstallLocation + "\\" + .LaunchExecutable' "${item_file}")
get_lnk_path "${exe_path}"
PORTWINE_CREATE_SHORTCUT_NAME=$(jq -r '.DisplayName' "${item_file}")
if ! exe_path="$(realpath "${link_path}" 2>/dev/null)" || [[ ! -f "${exe_path}" ]]; then
print_warning "Link broken for: ${PORTWINE_CREATE_SHORTCUT_NAME}"
elif [[ ! -f "${exe_path}.ppdb" ]]; then
unset FILE_SHA256SUM DESKTOP_NAME_FILE DESKTOP_CORRECT_FILE
item_id=$(jq -r '.AppName' "${item_file}")
portwine_exe="${exe_path}"
PORTWINE_DB_FILE="${portwine_exe}.ppdb"
LAUNCH_URI="com.epicgames.launcher://apps/${item_id}?action=launch&silent=true"
pw_init_db
export PW_NO_RESTART_PPDB="1"
edit_db_from_gui PW_PREFIX_NAME LAUNCH_URI
portwine_create_shortcut
fi
fi
done
return 0
fi
unset LINKS unset LINKS
for link_file in "${PORT_WINE_PATH}"/data/prefixes/*/drive_c/users/*/Desktop/*.lnk ; do for link_file in "${PORT_WINE_PATH}"/data/prefixes/*/drive_c/users/*/Desktop/*.lnk ; do
link_file=$(readlink -f "$link_file") link_file=$(readlink -f "$link_file")

@ -99,7 +99,7 @@ unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_T
unset PW_PREFIX_NAME WINEPREFIX VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR PW_WINE_CPU_TOPOLOGY unset PW_PREFIX_NAME WINEPREFIX VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR PW_WINE_CPU_TOPOLOGY
unset MANGOHUD_CONFIG FPS_LIMIT PW_WINE_USE WINEDLLPATH WINE WINEDIR WINELOADER WINESERVER PW_USE_RUNTIME PORTWINE_CREATE_SHORTCUT_NAME MIRROR unset MANGOHUD_CONFIG FPS_LIMIT PW_WINE_USE WINEDLLPATH WINE WINEDIR WINELOADER WINESERVER PW_USE_RUNTIME PORTWINE_CREATE_SHORTCUT_NAME MIRROR
unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR RADV_DEBUG PW_NO_AUTO_CREATE_SHORTCUT unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR RADV_DEBUG PW_NO_AUTO_CREATE_SHORTCUT
unset PW_TERM PW_EXEC_FROM_DESKTOP WEBKIT_DISABLE_DMABUF_RENDERER PW_AMD_VULKAN_USE PW_VK_ICD_FILENAMES unset PW_TERM PW_EXEC_FROM_DESKTOP WEBKIT_DISABLE_DMABUF_RENDERER PW_AMD_VULKAN_USE PW_VK_ICD_FILENAMES LAUNCH_URI
export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}* rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}*

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#Author: Castro-Fidel (linux-gaming.ru) #Author: Castro-Fidel (linux-gaming.ru)
#SCRIPTS_NEXT_VERSION=2382 #SCRIPTS_NEXT_VERSION=2383
#SCRIPTS_STABLE_VERSION=2380 #SCRIPTS_STABLE_VERSION=2380
######################################################################## ########################################################################
export AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET PW_WORLD_OF_SEA_BATTLE PW_RUSSIAN_FISHING PW_HO_YO_PLAY PW_FARLIGHT84 PW_WARFRAME PW_WGC PW_UBISOFT" export AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET PW_WORLD_OF_SEA_BATTLE PW_RUSSIAN_FISHING PW_HO_YO_PLAY PW_FARLIGHT84 PW_WARFRAME PW_WGC PW_UBISOFT"