#!/bin/sh

. install2-sh-functions

export FD_GEOM=1024x768
export FD_PROG="$install2_bindir"/alterator-install2
CAGE=/usr/bin/cage
ALTERATOR_VNC_SERVER_W=/usr/bin/wayvnc
WAYVNC_CONF_FILE=/tmp/vnc_conf

vncip="$(cmdline_get_arg vncip)"
if ! [ -n "$vncip" ]; then
	vncip="0.0.0.0"
fi
host_connect="$(cmdline_get_arg vncconnect)"
password="$(cmdline_get_arg vncpassword)"

wayvnc_passwd(){
	cat > "$WAYVNC_CONF_FILE" << EOF
use_relative_paths=true
address=$vncip
enable_auth=$([ -n "$password" ] && echo "true" || echo "false")
username=altlinux
password=$password
rsa_private_key_file=rsa_key.pem
EOF
chmod 600 "$WAYVNC_CONF_FILE"
}

vnc(){
	if cmdline_has_arg wayland; then
		wvnc
	else
		xvnc
	fi
}

wvnc(){
	mkdir -p /run/user/0
	chmod 700 /run/user/0
	export XDG_RUNTIME_DIR=/run/user/0
	export WLR_HEADLESS_OUTPUTS=1
	export WLR_BACKENDS=headless
	export WLR_LIBINPUT_NO_DEVICES=1
	export WLR_RENDERER=pixman
	export WLR_NO_HARDWARE_CURSORS=1
	wayvnc_passwd
	ssh-keygen -m pem -f /tmp/rsa_key.pem -t rsa -N ""
	$install2_bindir/vnc_info wayland
	$CAGE -d $FD_PROG &
	$ALTERATOR_VNC_SERVER_W --config $WAYVNC_CONF_FILE > /tmp/wayvnc.log 2>&1
}

xvnc(){
	if [ -n "$DISPLAY" ]; then
		VNC="x11vnc"
	else
		VNC="x11vnc -create"
	fi
	if [ -n "$host_connect" ]; then
		$VNC -connect "$host_connect"
	else
		$VNC -storepasswd "$password" /tmp/vncpasswd
		chmod 600 /tmp/vncpasswd
		xvncpam=$([ -n "$password" ] && echo "-usepw -rfbauth /tmp/vncpasswd" || echo "-nopw")
		$install2_bindir/vnc_info
		$VNC -quiet -listen "$vncip" $xvncpam -o /tmp/x11vnc.log
	fi
}

vnc

exit 0
