#!/bin/bash
#
# Beschreibung: startet einen VNC-Server um den Bildschirm
# auf ein zusätzliches Gerät (PC/Tablet/Mobilphone) zu
# erweitern
#
# benötigt: x11vnc, xrandr 
#
# Aufruf: create_vnc_display.sh BreitexHöhe
#
# Hinweise und Fehler an tuxator@tuxator.de 
#
# Status: ok
###################################################################
#
# Voraussetzungen
#
# Aktivieren eines Virtuellen Displays durch Anfügen zur X-Server Konfiguration
# z.B. /usr/share/X11/xorg.conf.d/20-virtual.conf mit dem Inhalt:
#######
# Section "Device"
#    Identifier "intelgpu0"
#    Driver "intel"
#    Option "VirtualHeads" "1"
# EndSection
#######
#
# Bei Benutzung einer AMD- oder Nvidia-Grafikkarte den Identifier und Driver entsprechend anpassen
#
retval=0
# Prüfe auf Voraussetzungen
for cmd in /usr/bin/x11vnc /usr/bin/xrandr /usr/bin/xargs /usr/bin/gtf
do
	if [[ ! -e ${cmd} ]]; then
		retval=1
	fi
done
if [[ $(xrandr --current | grep VIRTUAL1) ]]; then
		# Name des Virtuellen Displays setzen
		VD=VIRTUAL1
	else
		retval=2
fi
################################################
if [[ ${retval} = "0" ]]; then
	# Breite und Höhe des virtuellen Displays setzen
	# Prüfe auf Parameter
	if [[ ${1} ]]; then
		B=$(echo ${1} | awk -Fx '{ print $1 }')
		H=$(echo ${1} | awk -Fx '{ print $2 }')
	fi
	# Falls nicht vorhanden setze Default-Werte für Breite und Höhe
	if [[ ! ${B} ]]; then
		B=1366
	fi
	if [[ ! ${H} ]]; then
		H=768
	fi
	# Name des aktuellen physikalischen Displays
	PD=$(xrandr --current | grep primary | awk '{ print $1 }')
	# Breite des physikalischen Displays
	PDB=$(xrandr --current | grep \* | awk '{print $1;}' | cut -d x -f 1)
	# Erzeuge virtuelles Display
	#Anlegen einer neuen Modeline für den X-Server 
	gtf ${B} ${H} 60 | sed '3q;d' | sed 's/Modeline//g' | xargs xrandr --newmode
	#Zuordnung der Modeline zum Virtuellen Display
	gtf ${B} ${H} 60 | sed '3q;d' | sed 's/Modeline//g' | awk '{print $1;}' | sed 's/^.\(.*\).$/\1/' | xargs xrandr --addmode ${VD}
	# setze virtuelles Display rechts vom physikalischen Display
	gtf ${B} ${H} 60 | sed '3q;d' | sed 's/Modeline//g' | awk '{print $1;}' | sed 's/^.\(.*\).$/\1/' | xargs xrandr --output ${VD} --right-of ${PD} --mode
    
# Forward the VNC port to your device and start a VNC session
#adb reverse tcp:5900 tcp:5900

	# Starte VNC-Server und setze Bildschirmausschnitt auf virtuelles Display 
	x11vnc -clip ${B}x${H}+${PDB}+0
	# Schalte beim Beenden der VNC-Sitzung das virtuelle Display ab
	xrandr --output ${VD} --off
fi
###################################################################
# Fehlerbehandlung
case ${retval} in
	1)
	echo "${0}: Ausführung nicht möglich. ${cmd} nicht gefunden"
	echo "Pakete x11-xserver-utils und x11vnc müssen installiert sein"
	;;
	2)
	echo "${0}: kein virtuelles Display gefunden"
	echo "bearbeiten der X-Server-Konfiguration erforderlich"
esac
###################################################################
exit ${retval}
