start.sh 12.9 KB
Newer Older
1 2 3 4 5 6
#!/bin/bash
# Author: PortWINE-Linux.ru
if [ -f "$1" ]; then
    export portwine_exe="$(readlink -f "$1")"
fi
. "$(dirname $(readlink -f "$0"))/runlib"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
7
PW_SCRIPTS_UPDATE
Mikhail Tergoev's avatar
Mikhail Tergoev committed
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

PORTWINE_LAUNCH () {
    KILL_PORTWINE
    START_PORTWINE
    PORTWINE_MSI=`basename "${portwine_exe}" | grep .msi`
    PORTWINE_BAT=`basename "${portwine_exe}" | grep .bat`
    if [ ! -z "${PW_VIRTUAL_DESKTOP}" ] && [ "${PW_VIRTUAL_DESKTOP}" == "1" ] ; then
        pw_screen_resolution=`xrandr --current | grep "*" | awk '{print $1;}' | head -1`
        PW_RUN explorer "/desktop=portwine,${pw_screen_resolution}" "$portwine_exe"
    elif [ ! -z "${PORTWINE_MSI}" ]; then   
        echo "PORTWINE_MSI=${PORTWINE_MSI}"
        PW_RUN msiexec /i "$portwine_exe"
    elif [ ! -z "${PORTWINE_BAT}" ]; then   
        echo "PORTWINE_BAT=${PORTWINE_BAT}"
        PW_RUN explorer "$portwine_exe" 
    elif [ ! -z "${portwine_exe}" ]; then
        PW_RUN "$portwine_exe"
    elif [ -z "${gamestart}" ]; then  
        PW_RUN explorer
    else
        PW_RUN "${gamestart}"
29 30
    fi
}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
31 32 33
PORTWINE_CREATE_SHORTCUT () {
    if [ ! -z "${portwine_exe}" ]; then
        PORTPROTON_EXE="${portwine_exe}"
34
    else
Mikhail Tergoev's avatar
Mikhail Tergoev committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
        PORTPROTON_EXE=$(zenity --file-selection --file-filter=""*.exe" "*.bat"" \
        --title="${sc_path}" --filename="${PORT_WINE_PATH}/data/pfx/drive_c/")
        if [ $? -eq 1 ];then exit 1; fi
    fi
    PORTPROTON_NAME="$(basename "${PORTPROTON_EXE}" | sed s/".exe"/""/gi )"
    PORTPROTON_PATH="$( cd "$( dirname "${PORTPROTON_EXE}" )" >/dev/null 2>&1 && pwd )" 
    if [ -x "`which wrestool 2>/dev/null`" ]; then
        wrestool -x --output="${PORTPROTON_PATH}/" -t14 "${PORTPROTON_EXE}"
        cp "$(ls -S -1 "${PORTPROTON_EXE}"*".ico"  | head -n 1)" "${PORTPROTON_EXE}.ico"
        cp -f "${PORTPROTON_EXE}.ico" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.ico"
        rm -f "${PORTPROTON_PATH}/"*.ico
    fi
    if [ $? -eq 1 ] ; then exit 1 ; fi
    export PW_VULKAN_TO_DB=`cat "${PORT_WINE_TMP_PATH}/pw_vulkan"`
    if [ ! -z "${PORTWINE_DB}" ]; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
50
        PORTWINE_DB_FILE=`grep -il "\#${PORTWINE_DB}.exe" "${PORT_SCRIPTS_PATH}/portwine_db"/*`
Mikhail Tergoev's avatar
Mikhail Tergoev committed
51 52 53 54 55 56 57 58 59 60
        if [ ! -z "${PORTWINE_DB_FILE}" ] && [ -z "${PW_VULKAN_USE}" ]; then
            echo "export PW_VULKAN_USE=${PW_VULKAN_TO_DB}" >> "${PORTWINE_DB_FILE}"
        elif [ -z "${PORTWINE_DB_FILE}" ]; then
            echo "#!/bin/bash
    #Author: "${USER}"
    #"${PORTWINE_DB}.exe" 
    #Rating=1-5
    ################################################
    export PW_VULKAN_USE=${PW_VULKAN_TO_DB}" > "${PORT_SCRIPTS_PATH}/portwine_db/$PORTWINE_DB"
        cat "${PORT_SCRIPTS_PATH}/portwine_db/default" | grep "##" >> "${PORT_SCRIPTS_PATH}/portwine_db/$PORTWINE_DB"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
61
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
    fi
    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 PW_GUI_DISABLED_CS=1 "\"${PORT_SCRIPTS_PATH}/start.sh\" \"${PORTPROTON_EXE}\" "" \
    >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
    echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
    echo "Categories=Game" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
    echo "StartupNotify=true" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
    echo "Path="${PORT_SCRIPTS_PATH}/"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
    echo "Icon="${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.ico"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
    chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
    `zenity --question --title "${inst_set}." --text "${ss_done}" --no-wrap ` > /dev/null 2>&1  
    if [ $? -eq "0" ]; then
        cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" /home/${USER}/.local/share/applications/ 
77
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
78 79 80
    xdg-open "${PORT_WINE_PATH}" 2>1 >/dev/null &
}
PORTWINE_DEBUG () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
81
    KILL_PORTWINE 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
82 83 84 85 86
    export PW_LOG=1
    export PW_WINEDBG_DISABLE=0
    START_PORTWINE
    echo "${port_deb1}" > "${PORT_WINE_PATH}/${portname}.log"
    echo "${port_deb2}" >> "${PORT_WINE_PATH}/${portname}.log"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
87
    echo "-----------------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
88 89 90
    echo "PortWINE version:" >> "${PORT_WINE_PATH}/${portname}.log"
    read install_ver < "${PORT_WINE_TMP_PATH}/${portname}_ver"
    echo "${portname}-${install_ver}" >> "${PORT_WINE_PATH}/${portname}.log"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
91 92 93 94 95 96 97 98 99
    echo "----------------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log"
    if [ ! -z "${portwine_exe}" ] ; then 
        echo "Debug for programm:" >> "${PORT_WINE_PATH}/${portname}.log"
        echo "${portwine_exe}" >> "${PORT_WINE_PATH}/${portname}.log"
        echo "---------------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log"
    fi
    echo "GLIBC version:" >> "${PORT_WINE_PATH}/${portname}.log"
    echo `ldd --version | grep -m1 ldd | awk '{print $NF}'` >> "${PORT_WINE_PATH}/${portname}.log"
    echo "--------------------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
    echo "var_pw_vulkan = ${var_pw_vulkan}" >> "${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 "$PORT_WINE_PATH" >> "${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"
    "${WINELIB}/amd64/usr/bin/glxinfo" -B >> "${PORT_WINE_PATH}/${portname}.log"
    echo "----------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log"
    echo "Vulkan info device name:" >> "${PORT_WINE_PATH}/${portname}.log"
    "${WINELIB}/amd64/usr/bin/vulkaninfo" | grep deviceName >> "${PORT_WINE_PATH}/${portname}.log"
    "${WINELIB}/amd64/usr/bin/vkcube" --c 50 
    if [ $? -eq 0 ]; then 
        echo "Vulkan cube test passed successfully" >> "${PORT_WINE_PATH}/${portname}.log"
132
    else
Mikhail Tergoev's avatar
Mikhail Tergoev committed
133 134 135 136 137 138
        echo "Vkcube test completed with error" >> "${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"
139
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
140 141 142 143 144 145 146
    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"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
147

Mikhail Tergoev's avatar
Mikhail Tergoev committed
148
    PORTWINE_LAUNCH & zenity --info --title "DEBUG" --text "${port_debug}" --no-wrap && KILL_PORTWINE
Mikhail Tergoev's avatar
Mikhail Tergoev committed
149 150
    deb_text=$(cat "${PORT_WINE_PATH}/${portname}.log"  | awk '! a[$0]++') 
    echo "$deb_text" > "${PORT_WINE_PATH}/${portname}.log"
151
    xdg-open "${PORT_WINE_PATH}/${portname}.log"
152
}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
153 154 155
PW_WINECFG () {
    START_PORTWINE
    PW_RUN winecfg
156
} 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
157 158 159
PW_WINEFILE () {
    START_PORTWINE
    PW_RUN "explorer" 
160
}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
161 162 163 164
PW_WINECMD () {
    export PW_USE_TERMINAL=1
    START_PORTWINE
    PW_RUN "cmd"
165
}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
166 167 168
PW_WINEREG () {
    START_PORTWINE
    PW_RUN "regedit"
169
}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
170 171 172 173 174
PW_WINETRICKS () {
    UPDATE_WINETRICKS
    export PW_USE_TERMINAL=1
    START_PORTWINE
    $PW_TERM "${PW_RUNTIME}" "${PORT_WINE_TMP_PATH}/winetricks" -q --force
175
}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
176 177 178
PW_EDIT_DB () {
    xdg-open "${PORTWINE_DB_FILE}"
}
179 180 181 182 183 184 185 186
if [ ! -z "${portwine_exe}" ]; then
    if [ -z "${PW_GUI_DISABLED_CS}" ] || [ "${PW_GUI_DISABLED_CS}" = 0 ] ; then
        if [ ! -z "${PORTWINE_DB_FILE}" ] && [ ! -z "${PW_VULKAN_USE}" ]; then
            if [ -z "${PW_COMMENT_DB}" ] ; then
                PW_COMMENT_DB="PortWINE database file for "\"${PORTWINE_DB}"\" was found."
            fi
            OUTPUT_START=$("${pw_yad}" --text-align=center --text "$PW_COMMENT_DB" --wrap-width=150 --borders=15 --form --center  \
            --title "$portname"  --image "$PW_GUI_ICON_PATH/port_proton.png" --separator=";" \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
187 188 189 190 191 192 193 194 195 196 197 198 199
            --button='EDIT  DB'!!"${loc_edit_db} ${PORTWINE_DB}":118 \
            --button='CREATE SHORTCUT'!!"${loc_creat_shortcut}":100 \
            --button='DEBUG'!!"${loc_debug}":102 \
            --button='LAUNCH'!!"${loc_launch}":106 )
            PW_YAD_SET="$?"
        elif [ ! -z "${PORTWINE_DB_FILE}" ] && [ -z "${PW_VULKAN_USE}" ]; then
            if [ -z "${PW_COMMENT_DB}" ] ; then
                PW_COMMENT_DB="PortWINE database file for "\"${PORTWINE_DB}"\" was found."
            fi
            OUTPUT_START=$("${pw_yad}" --text-align=center --text "$PW_COMMENT_DB" --wrap-width=150 --borders=15 --form --center  \
            --title "$portname"  --image "$PW_GUI_ICON_PATH/port_proton.png" --separator=";" \
            --field="WINE:CB" "DXVK ${PW_WINE_VER_DXVK}"!"VKD3D ${PW_WINE_VER_VKD3D}"!"OPENGL ${PW_WINE_VER_DXVK}" \
            --button='EDIT  DB'!!"${loc_edit_db} ${PORTWINE_DB}":118 \
200 201 202
            --button='CREATE SHORTCUT'!!"${loc_creat_shortcut}":100 \
            --button='DEBUG'!!"${loc_debug}":102 \
            --button='LAUNCH'!!"${loc_launch}":106 )
203 204 205 206 207
            PW_YAD_SET="$?"
        else
            OUTPUT_START=$("${pw_yad}" --wrap-width=250 --borders=15 --form --center  \
            --title "$portname"  --image "$PW_GUI_ICON_PATH/port_proton.png" --separator=";" \
            --field="WINE:CB" "DXVK ${PW_WINE_VER_DXVK}"!"VKD3D ${PW_WINE_VER_VKD3D}"!"OPENGL ${PW_WINE_VER_DXVK}" \
208 209 210
            --button='CREATE SHORTCUT'!!"${loc_creat_shortcut}":100 \
            --button='DEBUG'!!"${loc_debug}":102 \
            --button='LAUNCH'!!"${loc_launch}":106 )
211 212 213 214 215 216 217 218
            PW_YAD_SET="$?"
        fi
    elif [ ! -z "${PORTWINE_DB_FILE}" ]; then
        PORTWINE_LAUNCH
    else
        OUTPUT_START=$("${pw_yad}" --wrap-width=250 --borders=15 --form --center  \
        --title "$portname"  --image "$PW_GUI_ICON_PATH/port_proton.png" --separator=";" \
        --field="WINE:CB" "DXVK ${PW_WINE_VER_DXVK}"!"VKD3D ${PW_WINE_VER_VKD3D}"!"OPENGL ${PW_WINE_VER_DXVK}" \
219 220 221
        --button='CREATE SHORTCUT'!!"${loc_creat_shortcut}":100 \
        --button='DEBUG'!!"${loc_debug}":102 \
        --button='LAUNCH'!!"${loc_launch}":106 )
222 223 224 225 226 227
        PW_YAD_SET="$?"
    fi
else
    OUTPUT_START=$("${pw_yad}" --wrap-width=250 --borders=15 --form --center  \
    --title "$portname"  --image "$PW_GUI_ICON_PATH/port_proton.png" --separator=";" \
    --field="WINE:CB" "DXVK ${PW_WINE_VER_DXVK}"!"VKD3D ${PW_WINE_VER_VKD3D}"!"OPENGL ${PW_WINE_VER_DXVK}" \
228 229 230 231 232 233
    --button='DEBUG'!!"${loc_debug}":102 \
    --button='WINECFG'!!"${loc_winecfg}":108 \
    --button='WINEFILE'!!"${loc_winefile}":110 \
    --button='WINECMD'!!"${loc_winecmd}":112 \
    --button='WINEREG'!!"${loc_winereg}":114 \
    --button='WINETRICKS'!!"${loc_winetricks}":116 )
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
    PW_YAD_SET="$?"
fi
export VULKAN_MOD=$(echo $OUTPUT_START | awk 'BEGIN {FS=";" } { print $1 }')
if [ "${VULKAN_MOD}" = "DXVK ${PW_WINE_VER_DXVK}" ]; then
    echo "dxvk" > "${PORT_WINE_TMP_PATH}/pw_vulkan"
elif [ "${VULKAN_MOD}" = "VKD3D ${PW_WINE_VER_VKD3D}" ]; then
    echo "vkd3d" > "${PORT_WINE_TMP_PATH}/pw_vulkan"
else   
    echo "0" > "${PORT_WINE_TMP_PATH}/pw_vulkan"
fi
case "$PW_YAD_SET" in
    100) PORTWINE_CREATE_SHORTCUT ;;
    102) PORTWINE_DEBUG ;;
    106) PORTWINE_LAUNCH ;;
    108) PW_WINECFG ;;
    110) PW_WINEFILE ;;
    112) PW_WINECMD ;;
    114) PW_WINEREG ;;
    116) PW_WINETRICKS ;;
Mikhail Tergoev's avatar
Mikhail Tergoev committed
253
    118) PW_EDIT_DB ;;
254 255
esac
########################################################################
Mikhail Tergoev's avatar
Mikhail Tergoev committed
256
STOP_PORTWINE