diff options
author | Christian Rößler | 2018-07-25 16:08:45 +0200 |
---|---|---|
committer | Christian Rößler | 2018-07-25 16:08:45 +0200 |
commit | b21d2bb616a2b0ecd641707a783b84903d97ce36 (patch) | |
tree | 334bf771b738b60b0678fe35f42bf61e7922d05c /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) | |
download | mltk-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.inc | 77 |
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 +} |