mirror of https://github.com/9001/r0c.git
109 lines
3.3 KiB
Bash
Executable File
109 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# fixed set of arguments to always give ttyd;
|
|
# * write-enable (needed by v1.7.4+)
|
|
# * don't reconnect if the user quits
|
|
# * disable some more stuff
|
|
# * the bifrost color scheme :^)
|
|
ttyd_fargs=(
|
|
-W
|
|
-t disableReconnect=true
|
|
-t enableSixel=false
|
|
-t enableTrzsz=false
|
|
-t enableZmodem=false
|
|
-t 'theme={"background":"#222","black":"#404040","red":"#f03669","green":"#b8e346","yellow":"#ffa402","blue":"#02a2ff","magenta":"#f65be3","cyan":"#3da698","white":"#d2d2d2","brightBlack":"#606060","brightRed":"#c75b79","brightGreen":"#c8e37e","brightYellow":"#ffbe4a","brightBlue":"#71cbff","brightMagenta":"#b67fe3","brightCyan":"#9cf0ed","brightWhite":"#fff"}'
|
|
)
|
|
|
|
# then the additional arguments to give ttyd by default;
|
|
# * listen on port 8023, http://127.0.0.1:8023/
|
|
# * listen on all interfaces (needed by v1.7.4+)
|
|
# * window title = r0c
|
|
# * dom works on phones (canvas/webgl is jank)
|
|
ttyd_args=(
|
|
-p 8023
|
|
-i 0.0.0.0
|
|
-t titleFixed=r0c
|
|
-t rendererType=dom
|
|
-t disableResizeOverlay=true
|
|
)
|
|
|
|
# then the arguments to give r0c if nothing is given to the script;
|
|
# --ara is recommended because otherwise everyone will be admin
|
|
r0c_args=(
|
|
--ara
|
|
)
|
|
|
|
# now, if this script is executed with any arguments at all, then the
|
|
# default r0c_args will be cleared and replaced with those, however
|
|
# you can also specify ttyd_args by separating them with "--";
|
|
# that way ttyd gets everything before that and r0c gets the rest:
|
|
# ./webr0c.sh -p 8023 -- --ara -tpt 2424 -tpn 1515
|
|
|
|
if [ "$1" ]; then
|
|
r0c_args=()
|
|
while [ "$1" ]; do
|
|
[ "$1" = -- ] && {
|
|
ttyd_args=("${r0c_args[@]}")
|
|
r0c_args=()
|
|
shift
|
|
continue
|
|
}
|
|
r0c_args+=("$1")
|
|
shift
|
|
done
|
|
fi
|
|
|
|
ttyd_args+=("${ttyd_fargs[@]}") # append the fixed set of args
|
|
|
|
echo
|
|
echo " >>> will run ttyd with: ${ttyd_args[*]}"
|
|
echo
|
|
echo " >>> will run r0c with: ${r0c_args[*]}"
|
|
echo
|
|
|
|
########################################################################
|
|
|
|
# ensure we cleanup on exit
|
|
pids=()
|
|
trap 'kill ${pids[@]} 2>/dev/null;sleep 0.1' INT TERM EXIT
|
|
|
|
# first check if ttyd is installed system-wide,
|
|
# otherwise try ./ttyd.x86_64, and if that also fails
|
|
# just assume exactly one other binary is present
|
|
ttyd=$(command -v ttyd || echo ./ttyd.x86_64)
|
|
[ -e $ttyd ] || ttyd=./ttyd.*
|
|
|
|
if echo q | telnet -E -c; then
|
|
# telnet seems to be working;
|
|
# connect to port 23 if root, 2323 otherwise
|
|
[ $(id -u) -eq 0 ] && p=23 || p=2323
|
|
$ttyd "${ttyd_args[@]}" telnet -E -c 127.0.0.1 $p &
|
|
else
|
|
echo "telnet not found; okay, using bash instead"
|
|
# connect to port 531 if root, 1531 otherwise
|
|
[ $(id -u) -eq 0 ] && p=531 || p=1531
|
|
$ttyd "${ttyd_args[@]}" ./bashclient.sh 127.0.0.1 $p &
|
|
fi
|
|
|
|
pids+=($!)
|
|
|
|
# now it's time to start r0c,
|
|
# first check if installed system-wide,
|
|
# then try ./r0c.py, and panic if that also fails
|
|
if python3 -c 'import r0c' 2>/dev/null; then
|
|
python3 -m r0c "${r0c_args[@]}" &
|
|
else
|
|
python3 r0c.py "${r0c_args[@]}" &
|
|
fi
|
|
|
|
pids+=($!)
|
|
|
|
# figure out what port ttyd is listening on and print a helpful message
|
|
PORT=$(printf ' %s\n' "${ttyd_args[*]}" | sed -r 's/.* -p *([0-9]+).*/\1/; s/.*[^0-9].*//; s/^$/7681/')
|
|
printf '\n\033[32m >>> r0c available at http://127.0.0.1:%s/\n\033[0m (and telnet and netcat too)\n' $PORT
|
|
|
|
# if either r0c or ttyd exits, kill the other
|
|
wait -n
|
|
kill ${pids[@]}
|