From 88d4f20ad3a2daab63e15167338497521e54c108 Mon Sep 17 00:00:00 2001 From: castro-fidel Date: Sun, 27 Sep 2020 16:44:31 +0300 Subject: [PATCH] Major fix. Add debug in winefile. Choose mod for shurtcut. --- data_from_portwine/port_on | 36 ++++++---- data_from_portwine/scripts/create_shortcut | 40 ++++++++++- data_from_portwine/scripts/lang | 10 +-- data_from_portwine/scripts/port_update | 5 +- data_from_portwine/scripts/runlib | 65 +++++++++-------- data_from_portwine/scripts/start | 12 ++-- data_from_portwine/scripts/vars | 2 + data_from_portwine/scripts/winefile | 82 ++++++++++++++++++++-- 8 files changed, 187 insertions(+), 65 deletions(-) diff --git a/data_from_portwine/port_on b/data_from_portwine/port_on index 5d3bb8f7..10e44e65 100755 --- a/data_from_portwine/port_on +++ b/data_from_portwine/port_on @@ -152,15 +152,23 @@ class CompatData: os.remove(self.version_file) def upgrade_pfx(self, old_ver): - if old_ver == CURRENT_PREFIX_VERSION: - return + #if old_ver == CURRENT_PREFIX_VERSION: + # return - #replace broken .NET installations with wine-mono support - if os.path.exists(self.prefix_dir + "/drive_c/windows/Microsoft.NET/NETFXRepair.exe") and \ - file_is_wine_fake_dll(self.prefix_dir + "/drive_c/windows/system32/mscoree.dll"): - log("Broken .NET installation detected, switching to wine-mono.") - #deleting this directory allows wine-mono to work - shutil.rmtree(self.prefix_dir + "/drive_c/windows/Microsoft.NET") + #replace broken .NET installations with wine-mono support + if os.path.exists(self.prefix_dir + "/drive_c/windows/Microsoft.NET/NETFXRepair.exe") and \ + file_is_wine_fake_dll(self.prefix_dir + "/drive_c/windows/system32/mscoree.dll"): + log("Broken .NET installation detected, switching to wine-mono.") + #deleting this directory allows wine-mono to work + shutil.rmtree(self.prefix_dir + "/drive_c/windows/Microsoft.NET") + + #fix mono and gecko + if os.path.exists(self.prefix_dir + "/drive_c/windows/mono"): + shutil.rmtree(self.prefix_dir + "/drive_c/windows/mono") + if os.path.exists(self.prefix_dir + "/drive_c/windows/system32/gecko"): + shutil.rmtree(self.prefix_dir + "/drive_c/windows/system32/gecko") + if os.path.exists(self.prefix_dir + "/drive_c/windows/syswow64/gecko"): + shutil.rmtree(self.prefix_dir + "/drive_c/windows/syswow64/gecko") def copy_pfx(self): with open(self.tracked_files_file, "w") as tracked_files: @@ -228,16 +236,16 @@ class CompatData: if "wined3d" in g_session.compat_config: dxvkfiles = ["dxvk_config"] - wined3dfiles = ["d3d11", "d3d10", "d3d10core", "d3d10_1", "d3d9"] + wined3dfiles = ["d3d11", "d3d10", "d3d10core", "d3d10_1", "d3d9", "dxgi"] else: dxvkfiles = ["dxvk_config", "d3d11", "d3d10", "d3d10core", "d3d10_1", "d3d9"] wined3dfiles = [] #if the user asked for dxvk's dxgi (dxgi=n), then copy it into place - if "PW_DXGI_FOR_VKD3D" in os.environ and nonzero(os.environ["PW_DXGI_FOR_VKD3D"]): - wined3dfiles.append("dxgi") #VKD3D + if "WINEDLLOVERRIDES" in os.environ and "dxgi=n" in os.environ["WINEDLLOVERRIDES"]: + dxvkfiles.append("dxgi") else: - dxvkfiles.append("dxgi") #OPENGL and DXVK + wined3dfiles.append("dxgi") for f in wined3dfiles: try_copy(g_proton.default_pfx_dir + "drive_c/windows/system32/" + f + ".dll", @@ -252,6 +260,7 @@ class CompatData: self.prefix_dir + "drive_c/windows/syswow64/" + f + ".dll") g_session.dlloverrides[f] = "n" + def comma_escaped(s): escaped = False idx = -1 @@ -348,7 +357,7 @@ class Session: self.check_environment("PW_USE_WINED3D11", "wined3d") self.check_environment("PW_NO_D3D11", "nod3d11") self.check_environment("PW_NO_D3D10", "nod3d10") - self.check_environment("PW_NO_D9VK", "nod3d9") + self.check_environment("PW_NO_D3D9", "nod3d9") self.check_environment("PW_NO_ESYNC", "noesync") self.check_environment("PW_NO_FSYNC", "nofsync") self.check_environment("PW_FORCE_LARGE_ADDRESS_AWARE", "forcelgadd") @@ -400,6 +409,7 @@ class Session: if "nod3d9" in self.compat_config: self.dlloverrides["d3d9"] = "" + self.dlloverrides["dxgi"] = "" if "novrclient" in self.compat_config: self.dlloverrides["vrclient"] = "" diff --git a/data_from_portwine/scripts/create_shortcut b/data_from_portwine/scripts/create_shortcut index 1f9343a4..9d2ab4b8 100755 --- a/data_from_portwine/scripts/create_shortcut +++ b/data_from_portwine/scripts/create_shortcut @@ -15,14 +15,48 @@ PORTPROTON_IMG=$(zenity --file-selection --file-filter=""*.png" "*.ico"" \ --title="${sc_img}" --filename="${PORT_WINE_PATH}/data/img/") if [ $? -eq 1 ];then exit 1; fi PORTPROTON_CMD="" -PORTPROTON_CMD=$(zenity --entry --text "${sc_cmd}") -if [ $? -eq 1 ];then exit 1; fi +#PORTPROTON_CMD=$(zenity --entry --text "${sc_cmd}") +#if [ $? -eq 1 ];then exit 1; fi +start_settings=`zenity --title "${ss_title}" --text "${ss_text}" --list --radiolist \ + --column="${inst_set}" --column "${ss_ver}" --column "${ss_dr}" --width=500 --height=220 \ + TRUE "DXVK" "${ss_ogl_3}" \ + FALSE "VKD3D and OpenGL" "${ss_ogl_2}" ` + if [ $? -eq 1 ];then exit 1; fi + case $start_settings in + "VKD3D and OpenGL") + dxvk_ogl_var="off" ;; + "DXVK") + hud_settings=`zenity --list --title "HUD" --text "${hud_text}" --list --checklist \ + --column="${inst_set}" --column="HUD info:" --column="${hud_info}" --width=800 --height=550 \ + FALSE "fps" "${hud_fps}" \ + FALSE "devinfo" "${hud_devinfo}" \ + FALSE "frametimes" "${hud_frametimes}" \ + FALSE "submissions" "${hud_submissions}" \ + FALSE "drawcalls" "${hud_drawcalls}" \ + FALSE "pipelines" "${hud_pipelines}" \ + FALSE "memory" "${hud_memory}" \ + FALSE "gpuload" "${hud_gpuload}" \ + FALSE "version" "${hud_version}" \ + FALSE "api" "${hud_api}" \ + FALSE "compiler" "${hud_compiler}" \ + FALSE "samplers" "${hud_samplers}" ` + + if [ ! -z $hud_settings ]; then + for hud_set in $hud_settings + do + export dxvk_ogl_var="${hud_set}" + done + export dxvk_ogl_var=${dxvk_ogl_var} | sed -i "s/|/,/g" + else + dxvk_ogl_var="0" + fi ;; + esac ######################################################################## cp -f "${PORTPROTON_IMG}" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" name_desktop="${PORTPROTON_NAME}" echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Name=${PORTPROTON_NAME}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" -echo "Exec="env PATH_TO_GAME=\""$PORTPROTON_PATH"\" sh \"${PORT_SCRIPTS_PATH}/start\" \"${PORTPROTON_EXE}\" ${PORTPROTON_CMD}"" \ +echo "Exec="env dxvk_ogl_var=$dxvk_ogl_var PATH_TO_GAME=\""$PORTPROTON_PATH"\" sh \"${PORT_SCRIPTS_PATH}/start\" \"${PORTPROTON_EXE}\" ${PORTPROTON_CMD}"" \ >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Categories=Game" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" diff --git a/data_from_portwine/scripts/lang b/data_from_portwine/scripts/lang index 21e7ecea..b7ab4bd4 100755 --- a/data_from_portwine/scripts/lang +++ b/data_from_portwine/scripts/lang @@ -15,8 +15,8 @@ then export ss_ver="Версия?" export ss_default_1="Cтандартный запуск" export ss_default_2="Старый запуск, с вопросами и логами" - export ss_ogl_2="Использовать библиотеки wined3d" - export ss_ogl_3="Использовать библиотеки Vulkan" + export ss_ogl_2="Использовать OpenGL и VKD3D. (DX9-DX11 в OpenGL и DX12 в vulkan)" + export ss_ogl_3="Использовать DXVK и D9VK. (DX9-DX11 в Vulkan и выключить DX12)" export inst_succ="Установка завершена успешно!" @@ -53,7 +53,7 @@ then export port_time5="Сейчас не могу, может быть в другой раз." export port_time6="Я уже сделал вклад в будущее проекта." - export port_debug="После окончания ${portname}, нажмите ОК." + export port_debug="После окончания работы ${portname}, нажмите ОК." export hud_text="Выберите вывод необходимой информации на экран:" export hud_info="Отображать:" @@ -88,8 +88,8 @@ then export ss_ver="Version:" export ss_default_1="Standard start" export ss_default_2="Old startup, with questions and logs" - export ss_ogl_2="Use the built-in WINE libraries" - export ss_ogl_3="Use the Vulkan libraries" + export ss_ogl_2="Use OpenGL and VKD3D. (DX9-DX11 to OpenGL and DX12 to vulkan)" + export ss_ogl_3="Use DXVK and D9VK. (DX9-DX11 to Vulkan)" export inst_succ="The installation was successful." diff --git a/data_from_portwine/scripts/port_update b/data_from_portwine/scripts/port_update index 6c968431..ba3e25c4 100755 --- a/data_from_portwine/scripts/port_update +++ b/data_from_portwine/scripts/port_update @@ -28,7 +28,7 @@ then FALSE "${port_upd6}" ` case $xsd in "${port_upd4}") - $WINESERVER -k + "${WINESERVER}" -k xdg-open $porturl exit 0 ;; "${port_upd5}") @@ -72,7 +72,8 @@ else python -m webbrowser "$urlg" fi & echo "200" > "${HOME}/.config/.PortTime" - sleep 5 ;; + sleep 5 + exit 0 ;; "${port_time5}") echo "50" > "${HOME}/.config/.PortTime" ;; "${port_time6}") diff --git a/data_from_portwine/scripts/runlib b/data_from_portwine/scripts/runlib index bc006d0a..08317dac 100755 --- a/data_from_portwine/scripts/runlib +++ b/data_from_portwine/scripts/runlib @@ -61,7 +61,7 @@ if [ -d "${WINELIB}" ]; then done < "${config_path}"/default_lib_paths host_lib_paths="${WINELIB}/pinned_libs_32:${WINELIB}/pinned_libs_64:$host_lib_paths" portwine_runtime_libs_paths="$host_lib_paths${WINELIB}/lib/i386-linux-gnu:${WINELIB}/usr/lib/i386-linux-gnu:${WINELIB}/lib/x86_64-linux-gnu:${WINELIB}/usr/lib/x86_64-linux-gnu:${WINELIB}/lib:${WINELIB}/usr/lib" - if [ ! -z "${LD_LIBRARY_PATH}" ]; then + if [ ! -z $LD_LIBRARY_PATH ]; then export LD_LIBRARY_PATH="$portwine_runtime_libs_paths:${LD_LIBRARY_PATH-}" else export LD_LIBRARY_PATH="$portwine_runtime_libs_paths" @@ -76,10 +76,10 @@ then start_settings=`zenity --title "${ss_title}" --text "${ss_text}" --list --radiolist \ --column="${inst_set}" --column "${ss_ver}" --column "${ss_dr}" --width=500 --height=220 \ TRUE "DXVK" "${ss_ogl_3}" \ - FALSE "OpenGL" "${ss_ogl_2}" ` + FALSE "VKD3D and OpenGL" "${ss_ogl_2}" ` if [ $? -eq 1 ];then exit 1; fi case $start_settings in - "OpenGL") + "VKD3D and OpenGL") echo "off" > "${config_path}/dxvk_on" ;; "DXVK") hud_settings=`zenity --list --title "HUD" --text "${hud_text}" --list --checklist \ @@ -108,29 +108,33 @@ then fi ;; esac fi -read "var_dxvk_on" < "${config_path}/dxvk_on" -export "var_dxvk_on" -if [ "${var_dxvk_on}" != "off" ]; then - export DXVK_HUD="${var_dxvk_on}" - export DXVK_STATE_CACHE_PATH="${PATH_TO_GAME}" - export DXVK_STATE_CACHE=1 - export PW_USE_WINED3D=0 - export PW_DXGI_FOR_VKD3D=0 - export PW_NO_D9VK=0 - export PW_NO_D3D11=0 - export PW_NO_D3D10=0 - echo "Use DXVK mod." - echo "DXVK_HUD=${var_dxvk_on}" + +if [ ! -z $dxvk_ogl_var ]; then + var_dxvk_on="${dxvk_ogl_var}" else - export DXVK_STATE_CACHE=0 - export PW_USE_WINED3D=1 - export PW_DXGI_FOR_VKD3D=1 - export PW_NO_D9VK=0 - export PW_NO_D3D11=0 - export PW_NO_D3D10=0 - export PW_OLD_GL_STRING=0 - echo "Use OpenGL mod." + read "var_dxvk_on" < "${config_path}/dxvk_on" fi +export DXVK_HUD="${var_dxvk_on}" +echo "DXVK_HUD=${DXVK_HUD}" + +if [ "${var_dxvk_on}" != "off" ]; then + export PW_USE_WINED3D=0 + export PW_NO_D3D9=0 + export PW_NO_D3D10=0 + export PW_NO_D3D11=0 + export PW_OLD_GL_STRING=0 + echo "Use DXVK and D9VK (DX9-DX11 to Vulkan)" +else + export PW_USE_WINED3D=1 + export PW_NO_D3D9=0 + export PW_NO_D3D10=0 + export PW_NO_D3D11=0 + export PW_OLD_GL_STRING=0 + echo "Use OpenGL and VKD3D (DX9-DX11 to OpenGL and DX12 to vulkan)" +fi + +export DXVK_STATE_CACHE_PATH="${PATH_TO_GAME}" +export DXVK_STATE_CACHE=1 ######################################################################## export optirun_on= export check_optimus_manager= @@ -138,7 +142,7 @@ export PW_NVIDIA="$(lspci | grep NVIDIA)" if [ -x "`which optimus-manager 2>/dev/null`" ]; then export check_optimus_manager=`optimus-manager --status | grep Current | cut -f 2 -d':' | sed -e 's/^[[:space:]]*//'` fi -if [ ! -z "${PW_NVIDIA}" ] && [ "${check_optimus_manager}" != "intel" ]; then +if [ ! -z $PW_NVIDIA ] && [ "${check_optimus_manager}" != "intel" ]; then if [ "${check_optimus_manager}" = "nvidia" ]; then export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json elif [ -x "`which primusrun 2>/dev/null`" ]; then @@ -147,6 +151,9 @@ if [ ! -z "${PW_NVIDIA}" ] && [ "${check_optimus_manager}" != "intel" ]; then elif [ -x "`which optirun 2>/dev/null`" ]; then export optirun_on="optirun -b primus" export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json + elif [ -x "`which prime-run 2>/dev/null`" ]; then + export optirun_on="prime-run" + export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json fi export __NV_PRIME_RENDER_OFFLOAD=1 export __GLX_VENDOR_LIBRARY_NAME=nvidia @@ -177,14 +184,6 @@ export def_pfx="${PORT_WINE_PATH}/data/dist/share/default_pfx/" if [ ! -d "${def_pfx}" ]; then "${port_on_run}" "run" | pwzen fi -export PW_NO_FSYNC=0 -if [ "$(ulimit -n)" -lt 50000 ]; then - export PW_NO_ESYNC=1 - echo "ESYNC is disabled" -else - export PW_NO_ESYNC=0 - echo "ESYNC is enabled" -fi export int_xneur=0 if [ $(pgrep xneur)>'0' ]; then killall xneur diff --git a/data_from_portwine/scripts/start b/data_from_portwine/scripts/start index 024fbb2d..9a7cd38b 100755 --- a/data_from_portwine/scripts/start +++ b/data_from_portwine/scripts/start @@ -1,19 +1,21 @@ #!/bin/bash # Author: PortWINE-Linux.ru . "$(dirname $(readlink -f "$0"))/runlib" -"${WINESERVER}" -k +# "${WINESERVER}" -k START_PORTWINE -if [ ! -z "$1" ]; then - if [ ! -z ${optirun_on} ]; then + +if [ ! -z $1 ]; then + if [ ! -z $optirun_on ]; then ${optirun_on} "${port_on_run}" "run" "$1" else "${port_on_run}" "run" "$1" fi else - if [ ! -z ${optirun_on} ]; then + if [ ! -z $optirun_on ]; then ${optirun_on} "${port_on_run}" "run" "${gamestart}" ${launch_parameters} else "${port_on_run}" "run" "${gamestart}" ${launch_parameters} fi fi -STOP_PORTWINE + +STOP_PORTWINE \ No newline at end of file diff --git a/data_from_portwine/scripts/vars b/data_from_portwine/scripts/vars index 1a8efd18..a35279a6 100755 --- a/data_from_portwine/scripts/vars +++ b/data_from_portwine/scripts/vars @@ -17,6 +17,8 @@ export WINEDLLOVERRIDES="winemenubuilder.exe=d" export PW_LOG=0 export PW_ACO=1 export PW_NO_VR=1 +export PW_NO_FSYNC=0 +export PW_NO_ESYNC=1 export PW_FILELOCK=1 export PW_DXVK_ASYNC=0 export PW_USE_SECCOMP=0 diff --git a/data_from_portwine/scripts/winefile b/data_from_portwine/scripts/winefile index c6de89f9..7fc0a2b0 100755 --- a/data_from_portwine/scripts/winefile +++ b/data_from_portwine/scripts/winefile @@ -1,12 +1,86 @@ #!/bin/bash # Author: PortWINE-Linux.ru . "$(dirname $(readlink -f "$0"))/runlib" +"${WINESERVER}" -k START_PORTWINE -PW_LOG=1 +if [ -z "${PATH_TO_GAME}" ]; then + export DXVK_STATE_CACHE_PATH="${config_path}" + export __GL_SHADER_DISK_CACHE_PATH="${config_path}" + export MESA_GLSL_CACHE_DIR="${config_path}" +fi +echo "${port_deb1}" > "${PORT_WINE_PATH}/${portname}.log" +echo "${port_deb2}" >> "${PORT_WINE_PATH}/${portname}.log" +echo "--------------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "PortWINE version:" >> "${PORT_WINE_PATH}/${portname}.log" +read install_ver < "${config_path}/${portname}_ver" +echo "${portname}-${install_ver}" >> "${PORT_WINE_PATH}/${portname}.log" +echo "-------------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "var_dxvk_on = ${var_dxvk_on}" >> "${PORT_WINE_PATH}/${portname}.log" +echo "------------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "Date and time of start debug for ${portname}" >> "${PORT_WINE_PATH}/${portname}.log" +date >> "${PORT_WINE_PATH}/${portname}.log" +echo "-----------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "The installation path of the ${portname}:" >> "${PORT_WINE_PATH}/${portname}.log" +echo "$link" >> "${PORT_WINE_PATH}/${portname}.log" +echo "----------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "Operating system" >> "${PORT_WINE_PATH}/${portname}.log" +lsb_release -d | sed s/Description/ОС/g >> "${PORT_WINE_PATH}/${portname}.log" +echo "--------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "Desktop Environment" >> "${PORT_WINE_PATH}/${portname}.log" +echo "$DESKTOP_SESSION" >> "${PORT_WINE_PATH}/${portname}.log" +echo "${XDG_CURRENT_DESKTOP}" >> "${PORT_WINE_PATH}/${portname}.log" +echo "--------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "Kernel" >> "${PORT_WINE_PATH}/${portname}.log" +uname -r >> "${PORT_WINE_PATH}/${portname}.log" +echo "-------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "CPU" >> "${PORT_WINE_PATH}/${portname}.log" +cat /proc/cpuinfo | grep "model name" >> "${PORT_WINE_PATH}/${portname}.log" +echo "------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "RAM" >> "${PORT_WINE_PATH}/${portname}.log" +free -m >> "${PORT_WINE_PATH}/${portname}.log" +echo "-----------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "Graphic cards and drivers" >> "${PORT_WINE_PATH}/${portname}.log" +lspci | grep VGA >> "${PORT_WINE_PATH}/${portname}.log" +lspci | grep 3D >> "${PORT_WINE_PATH}/${portname}.log" +if [ -x "`which glxinfo 2>/dev/null`" ] +then + glxinfo | grep OpenGL >> "${PORT_WINE_PATH}/${portname}.log" +else + echo "!!!glxinfo not found!!!" >> "${PORT_WINE_PATH}/${portname}.log" +fi +echo "----------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "Vulkan info device name" >> "${PORT_WINE_PATH}/${portname}.log" +if [ -x "`which vulkaninfo 2>/dev/null`" ] +then + vulkaninfo | grep deviceName >> "${PORT_WINE_PATH}/${portname}.log" +else + echo "!!!vulkaninfo not found!!!" >> "${PORT_WINE_PATH}/${portname}.log" +fi +echo "---------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +if [ ! -x "`which gamemoderun 2>/dev/null`" ] +then + echo "!!!gamemod not found!!!" >> "${PORT_WINE_PATH}/${portname}.log" +fi +echo "--------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "Version WINE in the Port" >> "${PORT_WINE_PATH}/${portname}.log" +"$WINELOADER" --version 2>&1 | tee -a "${PORT_WINE_PATH}/${portname}.log" +echo "-------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" +echo "log WINE" >> "${PORT_WINE_PATH}/${portname}.log" + +export DXVK_HUD="full" +export PW_LOG=1 +export PW_WINEDBG_DISABLE=0 if [ ! -z ${optirun_on} ] then - ${optirun_on} "${port_on_run}" "run" "explorer" + ${optirun_on} "${port_on_run}" "run" "explorer" >> "${PORT_WINE_PATH}/${portname}.log" 2>&1 & else - "${port_on_run}" "run" "explorer" + "${port_on_run}" "run" "explorer" >> "${PORT_WINE_PATH}/${portname}.log" 2>&1 & fi -STOP_PORTWINE +zenity --info --title "DEBUG" --text "${port_debug}" --no-wrap && "${WINESERVER}" -k +STOP_PORTWINE | pwzen + +deb_text=$(cat "${PORT_WINE_PATH}/${portname}.log" | awk '! a[$0]++') +echo "$deb_text" > "${PORT_WINE_PATH}/${portname}.log" +echo "$deb_text" | zenity --text-info --editable \ +--width=800 --height=600 \ +--title="${portname}.log" \ No newline at end of file