1
0
Fork 0
bn3t/bn3t-run.sh

383 linhas
12 KiB
Bash

#!/bin/bash
## Copyright © 2018-2021 Bret Human
## https://cynop.me/
##
## Documentation at:
## https://mage.cynop.me/en/bn3t
## https://psi.cynop.me/Caffarius/bn3t/
##
## For questions or comments write:
## info@cynop.me
#####################################################################
# bn3t-run
script_ver="0.3.1"
page="https://mage.cynop.me/en/bn3t"
# author: Bret Human
# date: Dec 6, 2018
#
#####################################################################
#
# A wrapper for wrappers, used to install/manage/own a Battle.net
# installation within Wine in a Linux environment.
#
# This script is intended to be run by bn3t, Hence the name.
#
# This is the second script in the line, fired off by bn3t. This
# script handles conditionals for safely running Battle.net or
# most of its apps. The syntax makes it easily modular.
#
# If you want to add a game, search for "function game_on".
#
#####################################################################
#
# This is free software; you are free to change and redistribute it.
# There is NO WARRANTY of any kind.
#
#####################################################################
runas_user="`whoami`"
app_name="Battle.net"
dl_addr="https://www.battle.net/download/getInstallerForGame?os=win&locale=enUS&version=LIVE&gameProgram=BATTLENET_APP"
tc_addr="https://desktop.twitchsvc.net/installer/windows/TwitchSetup.exe"
install_dir="/drive_c/Program Files (x86)"
app_loc="/Battle.net/Battle.net.exe"
console="bash"
usage="bn3t-run, version ${script_ver}
Usage: ./`basename ${0}` -g (game) -p (prefix) -a (arch) -dvsbwtnchx
-a | Selects the architecture to run as (32 | 64)
-b | Runs wineboot
-c | Launch a console session as specified user (can launch Xapps)
-d | Debug messages on (turns verbose on)
-g | Launches the game of your choice
-h | Help (this message)
-m | Runs Twitch client
-n | No BS mode - doesn't launch an app (for boot/tricks/console safety)
-p | Selects the location of the Wine prefix
-s | Runs ${app_name} setup
-t | Attempts to launch to the system tray
-v | Verbose messages on
-w | Runs winetricks
-x | Force upgrade DXVK
-z | Set the DISPLAY variable
See more documentation at: ${page}"
# Catch CTRL+C and cleanup
trap "echo '' && inform '---------------------------------' && inform 'Caught CTRL+C' && warp 2" 2
## Set default environment
cd /home/"${runas_user}"
export RADV_PERFTEST=aco
export WINEPREFIX="/home/${runas_user}/.bnet"
export HOME="/home/${runas_user}"
export USER="${runas_user}"
export USERNAME="${runas_user}"
export LOGNAME="${runas_user}"
export WINEDEBUG=-all
#export WINEDLLOVERRIDES="winemenubuilder.exe=d"
export XAUTHORITY="/home/${runas_user}/.Xauthority"
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin"
unset OLDPWD
unset SUDO_GID
unset SUDO_COMMAND
unset SUDO_USER
unset SUDO_UID
## Define our functions
function debug () {
if [ ! "${WINEDEBUG}" ]; then
echo "-d- ${1}"
fi
}
function inform () {
if [ "${app_verbose}" ]; then
echo "--- ${1}"
fi
}
if [ -z "${DISPLAY}" ]; then
inform "DISPLAY not set - using default (0.0)";
export DISPLAY=:0.0
else
debug "Using DISPLAY variable: ${DISPLAY}";
fi
function clean {
debug "clean"
# Var
unset script_ver
unset runas_user
unset app_name
unset dl_addr
unset install_dir
unset app_loc
unset console
unset usage
unset WINEPREFIX
unset WINEDEBUG
unset WINEARCH
unset game_launch
unset game_name
unset game_start
unset to_tray
unset DISPLAY
# Func
unset debug
unset inform
unset game_on
unset run_wine
}
function warp () {
debug "warp" # exit the dungeon
inform "Cleaning up ${runas_user}-side..."
clean
unset clean
if [ "$1" ]; then
unset warp && exit $1
else
echo "...what...?"
unset warp && exit 5
fi
}
function game_on {
debug "game_on"
case "${game_launch}" in
test)
echo "glxgears!"
if [ "`which glxgears`" ]; then
glxgears
else
echo "glxgears is not installed, or I can't find it in PATH"
warp 1
fi
;;
wtcg|Wtcg|WTCG|hearth|hearthstone|HEARTH|HEARTHSTONE|hs|HS)
game_name="Hearthstone"
game_start="/Hearthstone/Hearthstone Beta Launcher.exe"
;;
d3|D3|diablo3|Diablo3|DIABLO3)
game_name="Diablo 3"
game_start="/Diablo III/Diablo III Launcher.exe"
;;
sc2|SC2|starcraft2|Starcraft2|StarCraft2|STARCRAFT2)
game_name="StarCraft II"
game_start="/StarCraft II/StarCraft II.exe"
;;
sc|SC|starcraft|Starcraft|StarCraft|STARCRAFT)
game_name="StarCraft"
game_start="/StarCraft/StarCraft Launcher.exe"
;;
wow|Wow|woW|WoW|WOW|worldofwarcraft|WorldofWarcraft|WorldOfWarcraft|WorldofWarCraft|WorldOfWarCraft|WORLDOFWARCRAFT)
game_name="World of WarCraft"
game_start="/World of Warcraft/World of Warcraft Launcher.exe"
;;
hero|Hero|HERO|heros|Heros|HEROS|hots|HotS|HOTS)
game_name="Heroes of the Storm"
game_start="/Heroes of the Storm/Heroes of the Storm.exe"
;;
pro|Pro|PRO|ow|OW|overwatch|Overwatch|OverWatch|OVERWATCH)
game_name="Overwatch"
game_start="/Overwatch/Overwatch Launcher.exe"
;;
dst2|Dst2|DST2|destiny2|Destiny2|DESTINY2)
echo "Destiny 2 cannot currently run on Linux without being banned."
warp 1
;;
*) echo "Unrecognized game: ${game_launch} - Can't launch!"
echo "${usage}"
warp 1
;;
esac
if [ "${game_launch}" != "test" ]; then
echo "Attempting to run ${game_name}..."
if [ -f "${WINEPREFIX}${install_dir}${game_start}" ]; then
run_wine "${WINEPREFIX}${install_dir}${game_start}"
else
echo "${game_name} is not currently installed."
warp 1
fi
fi
}
function run_wine () {
debug "run_wine ${1}"
if [ "${WINEARCH}" == "win64" ]; then
debug "arch: win64"
if [ "${WINEDEBUG}" ]; then
wine64 "${1}" "${to_tray}" > /dev/null 2>&1
else
wine64 "${1}" "${to_tray}"
fi
wine64 "${1}" "${to_tray}"
elif [ "${WINEARCH}" == "win32" ]; then
debug "arch: win32"
if [ "${WINEDEBUG}" ]; then
wine "${1}" "${to_tray}" > /dev/null 2>&1
else
wine "${1}" "${to_tray}"
fi
else # Default to AMD64
debug "arch: default (AMD64)"
export WINEARCH=win64
if [ "${WINEDEBUG}" ]; then
wine64 "${1}" "${to_tray}" > /dev/null 2>&1
else
wine64 "${1}" "${to_tray}"
fi
fi
}
## Pick up any arguments provided
while getopts ":a:A:g:G:p:P:bBcCdDhHmMnNsStTvVwWxXzZ" option; do
case "${option}" in
"a"|"A")
case "${OPTARG}" in
32) export WINEARCH=win32;;
64) export WINEARCH=win64;;
*) inform "Weird architecture: ${OPTARG}, ignoring";;
esac
;;
"b"|"B")
echo "Running wineboot..."
nobs_mode="y"
if [ "${WINEDEBUG}" ]; then
wineboot > /dev/null 2>&1
else
wineboot
fi
;;
"c"|"C")
echo "Running console..."
nobs_mode="y"
${console}
;;
"d"|"D")
if [ "${WINEDEBUG}" ]; then
unset WINEDEBUG
debug "Run debug enabled"
debug "`realpath "${0}"` version ${script_ver} running as ${runas_user}"
app_verbose="y"
fi
;;
"g"|"G") game_launch="${OPTARG}";;
"h"|"H")
echo "${usage}"
warp 0
;;
"m"|"M")
echo "Running Twitch Client..."
nobs_mode="y"
if [ -d ${WINEPREFIX}/drive_c/users/${runas_user}/Application\ Data/Twitch ]; then
wine C:\\users\\${runas_user}\\Application\ Data\\Twitch\\Bin\\Twitch.exe
else
inform "...but it helps to install it first..."
if [ ! -f "${WINEPREFIX}/drive_c/TwitchSetup.exe" ]; then
inform "${WINEPREFIX}/drive_c/TwitchSetup.exe was not found. Retreiving."
wget -O "${WINEPREFIX}/drive_c/TwitchSetup.exe" "${tc_addr}" ||
(echo "Failed to download installer from ${tc_addr}"; warp 1)
fi
wine "${WINEPREFIX}/drive_c/TwitchSetup.exe"
fi
;;
"n"|"N")
inform "...with No BS..."
nobs_mode="y"
;;
"p"|"P") export WINEPREFIX="${OPTARG}";;
"s"|"S")
nobs_mode="y"
if [ -f "${WINEPREFIX}${install_dir}${app_loc}" ]; then
echo "${app_name} looks like it's already installed. Aborting setup."
warp 1
else
echo "Running setup..."
if [ ! -f "${WINEPREFIX}/drive_c/${app_name}-Setup.exe" ]; then
inform "${WINEPREFIX}/drive_c/${app_name}-Setup.exe was not found. Retreiving."
wget -O "${WINEPREFIX}/drive_c/${app_name}-Setup.exe" "${dl_addr}" ||
(echo "Failed to download installer from ${dl_addr}" && warp 1)
else
inform "Looks like the installer is in place. Executing."
fi
run_wine "${WINEPREFIX}/drive_c/${app_name}-Setup.exe"
fi
;;
"t"|"T")
to_tray="--autostarted"
inform "Attempting hide to system tray"
;;
"v"|"V")
if [ "${WINEDEBUG}" ]; then
if [ ! "${app_verbose}" ]; then
app_verbose="y"
#inform "Run verbose enabled"
inform "`realpath "${0}"` version ${script_ver} running as ${runas_user}"
fi
fi
;;
"w"|"W")
echo "Running winetricks..."
nobs_mode="y"
if [ ! "${app_verbose}" ]; then
winetricks > /dev/null 2>&1
else
winetricks
fi
;;
"x"|"X")
echo "Upgrading dxvk..."
nobs_mode="y"
if [ ! "${app_verbose}" ]; then
winetricks --force dxvk > /dev/null 2>&1
else
winetricks --force dxvk
fi
;;
"z"|"Z")
inform "DISPLAY set to ${OPTARG}"
DISPLAY=${OPTARG}
;;
*) echo "Unknown option: -${OPTARG}"
echo "${usage}"
warp 1
;;
esac
done
## If a game was set for launch, give it a shot. Otherwise launcher.
if [ "${nobs_mode}" ]; then
debug "Skipping app launches"
else
debug "launch_select"
if [[ -d "${WINEPREFIX}" || "${game_launch}" == "test" ]]; then
if [ "${game_launch}" ]; then
inform "game_launch argument: ${game_launch}"
game_on
else
echo "Running ${app_name}"
run_wine "${WINEPREFIX}${install_dir}${app_loc}"
fi
else
echo "Prefix ${WINEPREFIX} does not exist! Prep with -bs first"
warp 1
fi
fi
## If we still exist, clean up.
debug "final notice"
warp 0