summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc
diff options
context:
space:
mode:
authorChristian Rößler2018-07-25 16:08:45 +0200
committerChristian Rößler2018-07-25 16:08:45 +0200
commitb21d2bb616a2b0ecd641707a783b84903d97ce36 (patch)
tree334bf771b738b60b0678fe35f42bf61e7922d05c /core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc
parent[dhcpc-busybox] Also add special primary handling to systemd-udhcpc (diff)
downloadmltk-b21d2bb616a2b0ecd641707a783b84903d97ce36.tar.gz
mltk-b21d2bb616a2b0ecd641707a783b84903d97ce36.tar.xz
mltk-b21d2bb616a2b0ecd641707a783b84903d97ce36.zip
[run-virt] linux scripts extended (minimised, user etc). TO BE TESTED!
Diffstat (limited to 'core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc')
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc77
1 files changed, 77 insertions, 0 deletions
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc
new file mode 100644
index 00000000..55f24407
--- /dev/null
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc
@@ -0,0 +1,77 @@
+set_resolution()
+{
+ DISPLAY="${1}.0"
+ logger "openslx resolution utility started."
+
+ # Da nun fremdgemountet wird, hier sicherheitshalber zur Kontrolle wg. Gross-/Kleinschreibung:
+ SLXCONFIGFILE=$(find "${DISKMOUNTDIR}" -iwholename "${SLXCONFIGFILE}")
+
+ if [ -f "$SLXCONFIGFILE" ]; then
+ RESOLUTION=$(grep 'resolution=' "$SLXCONFIGFILE" | cut -d '=' -f 2)
+ if [ -z $RESOLUTION ]; then
+ logger "openslx resolution utility: resolution file $SLXCONFIGFILE seems to be empty!"
+ exit 1
+ fi
+ logger "openslx resolution utility: resolution file $SLXCONFIGFILE yields ${RESOLUTION}."
+ else
+ logger "openslx resolution utility: resolution file $SLXCONFIGFILE not found!"
+ exit 1
+ fi
+
+ # Das ist mitunter ein Problem, da die richtige zu finden - Distroabhängig!
+ # Hier ein Beispiel für openSuse 13.2, sollte auch für Debian, Ubuntu, Redhat usw. laufen:.
+ # XAUTHDATEI=$(ps aux | grep -o "root.*X.* \-auth *[^ ]*" | awk '{print $NF}')
+ get_xauthfile
+
+ # Zu verbessern: Der Name des Verbundenen ist nicht immer bekannt. Daher nehmen wir das
+ # erste 'connected' in der Ausgabe xrandrs Und warten evtl. ein Weilchen)::
+ for wartezeit in 1 1 1 2 0 ende; do
+ [ "$wartezeit" = "ende" ] && { logger "openslx resolution utility: Could not detect output device. Exiting." ; exit 1; }
+ AUSGABE=$(DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr -q|grep -m 1 " connected "|awk '{print $1}')
+ [ -n "$AUSGABE" ] && break
+ sleep $wartezeit
+ done
+
+ # Pruefen, ob xrand eine passende modeline ausgibt:
+ if [ "$(DISPLAY=${DISPLAY} XAUTHORITY=${XAUTHORITY} xrandr | grep -c ${RESOLUTION}[[:space:]])" -eq 0 ]; then
+ logger "openslx resolution utility: xrandr yields no fitting modeline; adding one."
+ MODELINE=$(cvt ${RESOLUTION//x/ } | grep -v "^#" | sed "s/Modeline //g" | sed 's/"//g')
+ DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --newmode $(echo ${MODELINE})
+ DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --addmode ${AUSGABE} $(echo ${MODELINE} | cut -d " " -f 1)
+ # Dann einzusteuernde Auflösung natürlich auf die neue ändern:
+ RESOLUTION=$(echo ${MODELINE} | cut -d " " -f 1)
+ logger "openslx resolution utility: (xrandr) modeline ${MODELINE} added (${RESOLUTION})."
+ fi
+
+ # Auflösung per xrandr setzen:
+ DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --output ${AUSGABE} --mode ${RESOLUTION}
+ ERR=$?
+ if [ $ERR -ne 0 ]; then
+ logger "openslx resolution utility: xrandr error code ${ERR}."
+ else
+ logger "openslx resolution utility: xrandr ok. Mode $RESOLUTION set."
+ fi
+
+ # Das hier ist ein wenig problematisch, da nach X-Start die gewünschte Desktopumgebung
+ # diese gern zuvor gespeicherte Auflösungen wieder einspielt. Daher warten wir einfach,
+ # und prüfen in gewissen Zeitabständen, ob sich die Auflösung geändert hat, und spielen
+ # im Änderungsfalle die Grundsystemauflösung wieder ein. Schön ist das nicht.
+
+ # Now, let's wait some seconds to see if another process re-changes res.:
+ sleep 5
+ check_resolution
+
+ # Now, let's wait some more seconds to see if another process re-changes res.:
+ sleep 15
+ check_resolution
+
+ # Now, let's wait even more seconds to see if another process re-changes res.:
+ sleep 20
+ check_resolution
+
+ # Now, let's wait even more seconds to see if another process re-changes res.:
+ sleep 40
+ check_resolution
+
+ exit 0
+}