From 73edeb4b3ca797ea8fbbc5de9e7cde7508fdfdaa Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Mon, 12 Feb 2024 00:53:22 +0300 Subject: [PATCH] Scripts version 2255 --- data_from_portwine/changelog_eng | 4 ++ data_from_portwine/changelog_rus | 4 ++ data_from_portwine/scripts/functions_helper | 52 ++++++++++++++----- data_from_portwine/scripts/lang | 2 - .../scripts/portwine_db/UbisoftConnect | 1 - .../scripts/portwine_db/WorldOfTanks | 1 - .../scripts/portwine_db/default | 1 - data_from_portwine/scripts/portwine_db/setup | 1 - data_from_portwine/scripts/runlib | 20 ++++--- data_from_portwine/scripts/setup.sh | 6 ++- data_from_portwine/scripts/start.sh | 4 +- data_from_portwine/scripts/var | 4 +- data_from_portwine/scripts/yad_gui | 12 +++-- 13 files changed, 76 insertions(+), 36 deletions(-) diff --git a/data_from_portwine/changelog_eng b/data_from_portwine/changelog_eng index e88169f..6b8bba0 100755 --- a/data_from_portwine/changelog_eng +++ b/data_from_portwine/changelog_eng @@ -2,6 +2,10 @@ You can help us in the development of the project on the website: https://linux- ---------------------------------------- Changelog: +###Scripts version 2255### Date: 12.02.2024 / Download update size: 15 megabytes +* the portable versions of MANGOHUD and GAMESCOPE are disabled for Steam Deck in Gaming Mode +* small additional script improvements + ###Scripts version 2254### Date: 11.02.2024 / Download update size: 15 megabytes * PortProton interface restart has been accelerated * added priority for using the system gamemode if it is installed (thanks to Boria138) diff --git a/data_from_portwine/changelog_rus b/data_from_portwine/changelog_rus index 819a51e..1b9192f 100755 --- a/data_from_portwine/changelog_rus +++ b/data_from_portwine/changelog_rus @@ -2,6 +2,10 @@ ----------------------------------------- История изменений: +###Scripts version 2255### Дата: 11.02.2024 / Размер скачиваемого обновления: 15 мегабайт +* для Steam Deck в режиме Gaming Mode отключены портативные версии MANGOHUD и GAMESCOPE +* небольшие дополнительные улучшения скриптов + ###Scripts version 2254### Дата: 11.02.2024 / Размер скачиваемого обновления: 15 мегабайт * ускорен перезапуск интерфейса PortProton * добавлен приоритет использования системного gamemode если он установлен (спасибо Boria138) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index c0c9d0e..33d874b 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -252,6 +252,13 @@ check_start_from_steam () { fi } +check_gamescope_session () { + if echo "${DESKTOP_SESSION}" | grep -i "gamescope" &>/dev/null + then return 0 + else return 1 + fi +} + unpack_tar_zst () { set -o pipefail unset PW_ZSTD_PORT @@ -469,9 +476,9 @@ init_wine_ver () { pw_init_runtime () { - if grep -q -E '(ROSA Fresh|RED OS)' "/etc/os-release" ; then + if grep -i -E '(ROSA|RED OS)' "/etc/os-release" &>/dev/null ; then export LOCPATH="/run/host/usr/share/locale/" - elif grep -q "altlinux" "/etc/os-release" ; then + elif grep -i "altlinux" "/etc/os-release" &>/dev/null ; then export LIBGL_DRIVERS_PATH="/usr/lib/X11/modules/dri:/usr/lib64/X11/modules/dri" fi @@ -553,7 +560,7 @@ pw_init_runtime () { } pw_mangohud_check () { - if [[ "${PW_MANGOHUD}" == "1" ]] ; then + if [[ "${PW_MANGOHUD}" == "1" ]] && ! check_gamescope_session ; then export PW_MANGOHUD_SLR='MANGOHUD=1' MANGOHUD_LIB_NAME="libMangoHud.so" if [[ "${PW_VULKAN_USE}" = "0" ]] ; then @@ -564,10 +571,10 @@ pw_mangohud_check () { else export PW_LD_PRELOAD="${MANGOHUD_LIB_NAME}" fi var_vk_istance_layers_config_update "VK_LAYER_MANGOHUD_overlay64:VK_LAYER_MANGOHUD_overlay32" - print_info "MANGOHUD is enabled" + print_info "Portable MANGOHUD is enabled" else - export PW_MANGOHUD_SLR='DISABLE_MANGOHUD=1' - print_info "MANGOHUD is disabled" + export PW_MANGOHUD_SLR="" + print_info "Portable MANGOHUD is disabled" fi return 0 } @@ -1152,19 +1159,40 @@ pw_create_gui_png () { if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then try_remove_dir "${PORT_WINE_TMP_PATH}/tmp_img" create_new_dir "${PORT_WINE_TMP_PATH}/tmp_img" - env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" "${PW_PLUGINS_PATH}/portable/bin/wrestool" -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" -t14 "$(readlink -f "${portwine_exe}")" + if command -v wrestool &>/dev/null ; then + wrestool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" -t14 "$(readlink -f "${portwine_exe}")" + else + env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" "${PW_PLUGINS_PATH}/portable/bin/wrestool" \ + -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" -t14 "$(readlink -f "${portwine_exe}")" + fi cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".ico" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" - env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" "${PW_PLUGINS_PATH}/portable/bin/icotool" -x --width=${PW_RESIZE_TO} --height=${PW_RESIZE_TO} --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" + + if command -v icotool &>/dev/null ; then + icotool -x --width=${PW_RESIZE_TO} --height=${PW_RESIZE_TO} --output="${PORT_WINE_TMP_PATH}/tmp_img/" \ + "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" + else + env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" "${PW_PLUGINS_PATH}/portable/bin/icotool" \ + -x --width=${PW_RESIZE_TO} --height=${PW_RESIZE_TO} --output="${PORT_WINE_TMP_PATH}/tmp_img/" \ + "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" + fi if [[ ! -f "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}")" ]] ; then - env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" "${PW_PLUGINS_PATH}/portable/bin/icotool" -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" + if command -v icotool &>/dev/null ; then + icotool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" + else + env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" "${PW_PLUGINS_PATH}/portable/bin/icotool" \ + -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" + fi cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png" else - cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png" + cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}" | head -n 1)" \ + "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png" fi cp -f "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" fi - if [[ -z "`file "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" | grep "${PW_RESIZE_TO} x ${PW_RESIZE_TO}"`" ]] && \ - [[ -x "`command -v "convert" 2>/dev/null`" ]] && [[ -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then + if [[ -z "`file "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" | grep "${PW_RESIZE_TO} x ${PW_RESIZE_TO}"`" ]] \ + && command -v convert &>/dev/null \ + && [[ -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] + then convert "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" -resize ${PW_RESIZE_TO}x${PW_RESIZE_TO} "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" fi if [[ -z "${PW_ICON_FOR_YAD}" ]] ; then diff --git a/data_from_portwine/scripts/lang b/data_from_portwine/scripts/lang index 185059d..bf4ba8f 100755 --- a/data_from_portwine/scripts/lang +++ b/data_from_portwine/scripts/lang @@ -136,7 +136,6 @@ if [[ "${update_loc}" == "RUS" ]] ; then export PW_HIDE_NVIDIA_GPU_INFO='Замаскировать все функции используемые для видеокарт NVIDIA' export PW_FORCE_USE_VSYNC_INFO='Принудительное включение вертикальной синхронизации' export PW_VIRTUAL_DESKTOP_INFO='Включить запуск приложение в виртуальном рабочем столе WINE' - export PW_WINEDBG_DISABLE_INFO='Отключить все функции отладки WINE (Рекомендуется не изменять значение)' export PW_USE_TERMINAL_INFO='Запускать приложение в терминале' export PW_HEAP_DELAY_FREE_INFO='Включить задержку освобождения некоторой памяти, чтобы обойти ошибки, связанные с использованием приложения после освобождения памяти.' export PW_NO_WRITE_WATCH_INFO='Очень опасный способ взлома таймера записи в памяти в ntdll. Это улучшает производительность некоторых очень специфических игр. (Рекомендуется не изменять значение)' @@ -541,7 +540,6 @@ elif [[ "${update_loc}" == "ENG" ]] ; then export PW_HIDE_NVIDIA_GPU_INFO='Disguise all features used for NVIDIA graphics cards' export PW_FORCE_USE_VSYNC_INFO='Forced activation of vertical sync' export PW_VIRTUAL_DESKTOP_INFO='Enable the application to run in the WINE virtual desktop' - export PW_WINEDBG_DISABLE_INFO='Disable all WINE debugging functions (It is recommended not to change the value)' export PW_USE_TERMINAL_INFO='Run the application in the terminal' export PW_HEAP_DELAY_FREE_INFO='Include a delay in releasing some memory to bypass errors associated with using the application after the memory is released' export PW_NO_WRITE_WATCH_INFO='A very dangerous way to hack the memory write timer in ntdll. This improves the performance of some very specific games. (It is recommended not to change the value.)' diff --git a/data_from_portwine/scripts/portwine_db/UbisoftConnect b/data_from_portwine/scripts/portwine_db/UbisoftConnect index 712a375..52355a6 100755 --- a/data_from_portwine/scripts/portwine_db/UbisoftConnect +++ b/data_from_portwine/scripts/portwine_db/UbisoftConnect @@ -20,7 +20,6 @@ export PW_DLL_INSTALL="" ##export PW_NO_WRITE_WATCH=0 # Disable support for memory write watches in ntdll. This is a very dangerous hack and should only be applied if you have verified that the game can operate without write watches. This improves performance for some very specific games (e.g. CoreRT-based games). ##export PW_HIDE_NVIDIA_GPU=0 ##export PW_FORCE_USE_VSYNC=2 # Vsync: 0-FORCE_OFF, 1-FORCE_ON, 2-BY_DEFAULT -##export PW_WINEDBG_DISABLE=1 # Disabled WINEDBG ##export PW_USE_GAMEMODE=0 # Force disabele gamemod ##export PW_FORCE_LARGE_ADDRESS_AWARE=1 # Force Wine to enable the LARGE_ADDRESS_AWARE flag for all executables. Enabled by default. ##export PULSE_LATENCY_MSEC=60 # Fix crackling audio in games diff --git a/data_from_portwine/scripts/portwine_db/WorldOfTanks b/data_from_portwine/scripts/portwine_db/WorldOfTanks index 45f31f9..11cec4f 100755 --- a/data_from_portwine/scripts/portwine_db/WorldOfTanks +++ b/data_from_portwine/scripts/portwine_db/WorldOfTanks @@ -6,5 +6,4 @@ export PW_VULKAN_USE=1 #dxvk, vkd3d or 0 for OpenGL export PW_DLL_INSTALL="lucida vcrun2019" # Install DDL in port prefix (used winetricks) export WINEDLLOVERRIDES="xaudio2_7=" -export PW_WINEDBG_DISABLE=1 # Disabled WINEDBG export PW_USE_D3D_EXTRAS=0 diff --git a/data_from_portwine/scripts/portwine_db/default b/data_from_portwine/scripts/portwine_db/default index c3a8567..4140a69 100755 --- a/data_from_portwine/scripts/portwine_db/default +++ b/data_from_portwine/scripts/portwine_db/default @@ -38,7 +38,6 @@ ##export WINEARCH=win32 # defaut = win64 ##export WINEPREFIX= -##export PW_WINEDBG_DISABLE=1 # Disabled WINEDBG ##export PW_USE_TERMINAL=1 # Force run in terminal ##export PW_GUI_DISABLED_CS=1 # 1 = disabled GUI diff --git a/data_from_portwine/scripts/portwine_db/setup b/data_from_portwine/scripts/portwine_db/setup index d1de0d9..1dbb4c0 100755 --- a/data_from_portwine/scripts/portwine_db/setup +++ b/data_from_portwine/scripts/portwine_db/setup @@ -12,7 +12,6 @@ export PW_VULKAN_USE=1 export PW_MANGOHUD=0 export PW_NO_FSYNC=1 # Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support. export PW_NO_ESYNC=1 # Do not use eventfd-based in-process synchronization primitives -export PW_WINEDBG_DISABLE=1 export PW_USE_GAMEMODE=0 # Force disabele gamemod export PW_FORCE_LARGE_ADDRESS_AWARE=1 # Force Wine to enable the LARGE_ADDRESS_AWARE flag for all executables. Enabled by default. export PW_DLL_INSTALL="" diff --git a/data_from_portwine/scripts/runlib b/data_from_portwine/scripts/runlib index 6c4f100..0becf59 100755 --- a/data_from_portwine/scripts/runlib +++ b/data_from_portwine/scripts/runlib @@ -115,10 +115,10 @@ start_portwine () { var_vkd3d_config_update single_queue fi - if [[ "${PW_USE_GAMESCOPE}" == 1 ]] && command -v gamescope &>/dev/null ; then + if [[ "${PW_USE_GAMESCOPE}" == 1 ]] && command -v gamescope &>/dev/null && ! check_gamescope_session ; then # Workaround for https://gitlab.freedesktop.org/mesa/mesa/-/issues/6029 if [[ -d "/sys/module/i915" ]] ; then - export INTEL_DEBUG=norbc + export INTEL_DEBUG="norbc" fi if [[ "${PW_GPU_USE}" != "disabled" ]] ; then PW_vendorID="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep -B3 "${PW_GPU_USE}" | grep vendorID | sort -u | awk -F'0x' '{print $2}')" @@ -128,11 +128,11 @@ start_portwine () { unset PW_ID_VIDEO fi export PW_RUN_GAMESCOPE="gamescope -o 30 ${PW_ID_VIDEO} ${GAMESCOPE_ARGS} --" - export PW_WINE_FULLSCREEN_FSR=0 - export vk_xwayland_wait_ready=false + export PW_WINE_FULLSCREEN_FSR="0" + export vk_xwayland_wait_ready="false" else - export PW_USE_GAMESCOPE=0 - unset PW_RUN_GAMESCOPE INTEL_DEBUG vk_xwayland_wait_ready + export PW_USE_GAMESCOPE="0" + export PW_RUN_GAMESCOPE="" fi enabled_fake_nvidia_videocard () @@ -729,6 +729,13 @@ pw_run () { print_var "WINEDLLPATH" "WINE_CPU_TOPOLOGY" "PW_RUN_GAMESCOPE" "LD_LIBRARY_PATH" kill -s SIGUSR1 "$PW_YAD_PID_PFX_COVER_UI" &>/dev/null if [[ "${PW_LOG}" == 1 ]] ; then + if check_start_from_steam ; then + for VAR_LOGGER in PW_WINE_USE WINEDIR WINEDLLPATH WINEPREFIX PATH_TO_GAME PW_VULKAN_USE PW_LD_LIBRARY_PATH LD_LIBRARY_PATH PATH \ + VKD3D_CONFIG WINEESYNC WINEFSYNC WINEFSYNC_FUTEX2 WINE_CPU_TOPOLOGY DESKTOP_SESSION + do + echo "${VAR_LOGGER}=${!VAR_LOGGER}" >> "${PW_LOG_TO_FILE}" + done + fi echo "WINEDLLOVERRIDES=${WINEDLLOVERRIDES}" >> "${PW_LOG_TO_FILE}" echo "------------------------------------" >> "${PW_LOG_TO_FILE}" echo "Log WINE:" >> "${PW_LOG_TO_FILE}" @@ -869,6 +876,7 @@ export install_ver=`cat "${PORT_WINE_TMP_PATH}/${portname}_ver" | head -n 1` export WINETRICKS_DOWNLOADER="curl" export USER_CONF="${PORT_WINE_PATH}/data/user.conf" check_user_conf +check_variables PW_LOG "0" if [[ -z "${INSTALLING_PORT}" ]] ; then . "${USER_CONF}" diff --git a/data_from_portwine/scripts/setup.sh b/data_from_portwine/scripts/setup.sh index cf87838..db16f43 100755 --- a/data_from_portwine/scripts/setup.sh +++ b/data_from_portwine/scripts/setup.sh @@ -32,10 +32,14 @@ else chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" fi -if [[ ! -f /usr/bin/portproton ]]; then +if [[ ! -f /usr/bin/portproton ]] ; then cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" ${HOME}/.local/share/applications/ fi +if grep "SteamOS" "/etc/os-release" &>/dev/null ; then + cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "$(xdg-user-dir DESKTOP)" +fi + update-desktop-database -q "${HOME}/.local/share/applications" if ! grep -i "flatpak" /etc/os-release &>/dev/null ; then diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 604440e..b920fe8 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -99,7 +99,6 @@ portwine_launch () { portwine_start_debug () { kill_portwine export PW_LOG=1 - export PW_WINEDBG_DISABLE=0 if [[ -z "$VULKAN_DRIVER_NAME" ]] || [[ "$VULKAN_DRIVER_NAME" == "llvmpipe" ]] ; then yad_info "Attention working version of vulkan not detected!\nIt is recommended to run games in OpenGL (low performance possible)!" fi @@ -495,7 +494,7 @@ pw_edit_db () { /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi - # PW_FORCE_USE_VSYNC PW_WINEDBG_DISABLE HEAP_DELAY_FREE + # PW_FORCE_USE_VSYNC HEAP_DELAY_FREE } pw_autoinstall_from_db () { @@ -504,7 +503,6 @@ pw_autoinstall_from_db () { export PW_USE_GAMEMODE=0 export PW_CHECK_AUTOINSTAL=1 export PW_GUI_DISABLED_CS=1 - export PW_WINEDBG_DISABLE=1 export PW_NO_WRITE_WATCH=0 export PW_VULKAN_USE=1 export PW_USE_EAC_AND_BE=0 diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var index 9907614..d2f4e6e 100755 --- a/data_from_portwine/scripts/var +++ b/data_from_portwine/scripts/var @@ -1,6 +1,6 @@ #!/usr/bin/env bash #Author: Castro-Fidel (linux-gaming.ru) -#SCRIPTS_NEXT_VERSION=2254 +#SCRIPTS_NEXT_VERSION=2255 ######################################################################## export PW_MANGOHUD="0" export DEFAULT_MANGOHUD_CONFIG="cpu_stats,cpu_temp,cpu_mhz,gpu_stats,gpu_temp,gpu_core_clock,gpu_mem_clock,vulkan_driver,gpu_name,vram,ram,frame_timing=1,time,arch,wine,toggle_hud=Shift_R+F12,resolution,vkbasalt,gamemode" @@ -14,9 +14,7 @@ export PW_RT_MOUNT_RW=("/media" "/mnt" "/run/media/${USER}" "${PORT_WINE_PATH}") export PW_NO_ESYNC="1" export PW_USE_GAMEMODE="1" export PW_FORCE_USE_VSYNC="2" -export PW_LOG="0" export PW_USE_TERMINAL="0" -export PW_WINEDBG_DISABLE="1" export PW_WINDOWS_VER="10" export WINEARCH="win64" export PW_LIBS_VER="_v46" diff --git a/data_from_portwine/scripts/yad_gui b/data_from_portwine/scripts/yad_gui index 91592a8..83c8071 100755 --- a/data_from_portwine/scripts/yad_gui +++ b/data_from_portwine/scripts/yad_gui @@ -781,13 +781,15 @@ portwine_create_shortcut () { } portwine_delete_shortcut () { - rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" $>/dev/null - rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" $>/dev/null - # rm -f "$(grep -il "${portwine_exe}" "${STEAM_SCRIPTS}"/*.sh)" $>/dev/null + rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" &>/dev/null + # rm -f "$(grep -il "${portwine_exe}" "${STEAM_SCRIPTS}"/*.sh)" &>/dev/null if [[ -d "${HOME}/Desktop" ]] ; then - rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" $>/dev/null + rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" &>/dev/null elif [[ -d "${HOME}/Рабочий стол" ]] ; then - rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" $>/dev/null + rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" &>/dev/null + elif [[ $(xdg-user-dir DESKTOP) ]] ; then + rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" &>/dev/null fi }