summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes
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
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')
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc5
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc31
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc2
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc50
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc77
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/90_runscript.inc69
6 files changed, 221 insertions, 13 deletions
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc
index e8e0ae91..939becf6 100644
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc
@@ -24,6 +24,11 @@ GLOBALUSER=$(echo "$GLOBALDOMAINUSER" | cut -d '\' -f 2)
REMAPMODE=$(grep '^remapMode=' "$SLXCONFIGFILE" | cut -d '=' -f 2)
CREATEMISSING=$(grep '^createMissingRemap=' "$SLXCONFIGFILE" | cut -d '=' -f 2)
+SCRIPTUSER=$(grep '^scriptUser=' "$SLXCONFIGFILE" | cut -d '=' -f 2)
+SCRIPTVISIBILITY=$(grep '^scriptVisibility=' "$SLXCONFIGFILE" | cut -d '=' -f 2)
+SCRIPTEXT=$(grep scriptExt "$DISKMOUNTDIR/openslx.ini" | cut -f 2 -d "=")
+
+
# CIFSVERSIONS="3.11 3.0 2.1 2.0 1.0"
CIFSVERSIONS="3.0 2.1 1.0 3.11 2.0"
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc
index d6fd7caa..38213e86 100644
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc
@@ -1,5 +1,7 @@
### Funktionen ####################################
+### Funktionen Mounter ############################
+
function xor()
{ local RES=($(echo "$1" | sed "s/../0x& /g"))
shift 1
@@ -112,5 +114,34 @@ function mount_share()
fi
}
+### Funktionen Mounter Ende #######################
+
+### Funktionen resolution #########################
+
+get_xauthfile()
+{
+ # Das ist mitunter ein Problem, da die richtige xauth zu finden - Distroabhängig!
+ for wartezeit in 1 2 3 5 10 10 0 ende; do
+ [ "$wartezeit" = "ende" ] && { logger "openslx resolution utility: XAUTHFILE not found. Exiting."; exit 1; }
+ XAUTHORITY=$(ps aux | grep -o "root.*X.* \-auth *[^ ]*" | awk '{print $NF}')
+ [ -n "${XAUTHORITY}" ] && break
+ sleep $wartezeit
+ done
+ logger "openslx resolution utility: XAUTHFILE found."
+}
+
+
+check_resolution() {
+ ACTRES=$(DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr|grep '*'|tr -s " "|cut -f 2 -d " ")
+ if [ "$ACTRES" != "$RESOLUTION" ]; then
+ logger "openslx resolution utility: resolution changed; re-changing."
+ DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --output ${AUSGABE} --mode ${RESOLUTION}
+ else
+ logger "openslx resolution utility: resolution unchanged."
+ fi
+}
+
+### Funktionen resolution Ende ####################
+
### Funktionen Ende ###############################
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc
index c6f6ffcb..f0081658 100644
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc
@@ -10,7 +10,7 @@ function get_creds()
# Serverantwort pwdaemon in temp. Datei schreiben:
timeout 2s dd bs=$BYTES count=1 of="$RAWKEYTEMP" <&13 2>/dev/null
-
+
# Kanal zu Socket schließen:
exec 13<&-
exec 13>&-
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc
index cc71f23c..7447dd41 100644
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc
@@ -39,3 +39,53 @@ function mount_shares()
fi
done
}
+
+mnt_shares() {
+ logger "openslx sharemapper: Started."
+
+ # Wait for network connection to base system
+ x=1
+ while ! ping -w 1 -c 1 "${NATADDR}" 2>/dev/null 1>&2; do
+ [ "$x" -gt 20 ] && { logger "openslx sharemapper: could not reach base system. Giving up."; exit 1; }
+ let x=x+1
+ sleep 2
+ done
+
+ logger "openslx sharemapper: base system reaching; commencing."
+
+ # REMAPMODE (remapMode): 0: None, 1 Native, 2 Native Fallback, 3 vmware
+ # CREATEMISSING (createMissingRemap): 0: Nichts tun, 1 xdg-Verzeichnisse
+
+ case "$REMAPMODE" in
+ 0) logger "openslx sharemapper: remapMode 0 (do nothing) detected."
+ ;;
+ 1) logger "openslx sharemapper: remapMode 1 (native mode) detected."
+ preliminaries_native
+ get_creds # fills global var PW with (currently) decrypted password
+ get_shares # fills array ROHSHARES; row 0 global infos from (shares-)CONFIGFILE,
+ # following rows: column 1 share path, col 2 drive letter, col 3 share name,
+ # column 4 username, col 5 password.
+ mount_shares # mounts shares given in array ROHSHARES.
+ ;;
+ 2) logger "openslx sharemapper: remapMode 2 (fallback mode) detected."
+ preliminaries_native
+ get_creds # fills global var PW with (currently) decrypted password
+ get_shares # fills array ROHSHARES; row 0 global infos from (shares-)CONFIGFILE,
+ # following rows: column 1 share path, col 2 drive letter, col 3 share name,
+ # column 4 username, col 5 password.
+ mount_shares # mounts shares given in array ROHSHARES.
+ check_fallback # checks for a mounted home and fallbacks to vmware share, if none found.
+ ;;
+ 3) logger "openslx sharemapper: remapMode 3 (vmware mode) detected."
+ preliminaries_vmware
+ mount_shares # mounts shares given in array ROHSHARES - runvirt checks whether there's
+ # a home share given or not..
+ ;;
+ *) logger "openslx sharemapper: unknown remapMode in $SLXCONFIGFILE; doing nothing."
+ ;;
+ esac
+
+ # By the way: We also have to start a bwLehrpool-Suite given script (runscript). For convenience we will start it here and
+ # after mounting shares, as perhaps a given script needs mounted shares.
+ exit 0
+}
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
+}
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/90_runscript.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/90_runscript.inc
index e5a7971b..f5ef0223 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/90_runscript.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/90_runscript.inc
@@ -1,20 +1,65 @@
function runscript()
{
- logger "openslx sharemapper: runscript: looking for a script to run..."
- if [ -f "$DISKMOUNTDIR/openslx.ini" ]; then
- EXTENSION=$(grep scriptExt "$DISKMOUNTDIR/openslx.ini" | cut -f 2 -d "=")
- [ -z "$EXTENSION" -o "$EXTENSION" = "bat" ] && \
- logger "openslx sharemapper: runscript: Script extension empty or \'bat\', trying anyway."
- if [ -f "$DISKMOUNTDIR/runscript${EXTENSION}" ]; then
- su -c "$DISKMOUNTDIR/runscript${EXTENSION}" "$LOCALUSER"
- ERR=$?
- if [ $ERR -eq 0 ]; then
- logger "openslx sharemapper: runscript: runscript${EXTENSION} ok, errorlevel ${ERR}."
+ logger "openslx: runscript: looking for a script to run..."
+ ERR=0
+ if [ -f "$SLXCONFIGFILE" ]; then
+ [ -z "$SCRIPTEXT" -o "$SCRIPTEXT" = "bat" ] && \
+ logger "openslx utility: runscript: Script extension empty or \'bat\', trying anyway."
+ if [ -f "$DISKMOUNTDIR/runscript${SCRIPTEXT}" ]; then
+ logger "openslx utility: runscript: found script $DISKMOUNTDIR/runscript${SCRIPTEXT}."
+
+ case "$SCRIPTUSER" in
+ 0) USERPART=""
+ ;;
+ 1) USERPART=" su -c - $LOCALUSER "
+ ;;
+ *) logger "openslx utility: runscript: Unknown script user or script user not set. Running as root."
+ USERPART=""
+ ;;
+ esac
+
+ case "$SCRIPTVISIBILITY" in
+ 0) # 0=hidden
+ logger "openslx utility: runscript: Starting script hidden."
+ echo "$USERPART $DISKMOUNTDIR/runscript${SCRIPTEXT}"
+ $USERPART "$DISKMOUNTDIR/runscript${SCRIPTEXT}" &
+ ;;
+ 1) # 1=normal
+ logger "openslx utility: runscript: Starting script maximised."
+ get_xauthfile
+ DISPLAY=:0.0 XAUTHORITY="${XAUTHORITY}" $USERPART xterm "$DISKMOUNTDIR/runscript${SCRIPTEXT}" &
+ ;;
+ 2) # 2=minimized (xterm -iconic)
+ logger "openslx utility: runscript: starting script minimised."
+ get_xauthfile
+
+ # warte auf Window manager...
+ while [[ "$(DISPLAY=:0.0 XAUTHORITY=${XAUTHORITY} xprop -root _NET_SUPPORTING_WM_CHECK)" =~ "no such atom" ]]; do
+ sleep 2
+ done
+
+ # Truly not the best way to wait until the desktop environment is ready, but there's no common way to
+ # check for DE readyness. Until then, we'll sleep.
+ sleep 20
+
+ DISPLAY=:0.0 XAUTHORITY="${XAUTHORITY}" $USERPART xterm -iconic "$DISKMOUNTDIR/runscript${SCRIPTEXT}" &
+ ;;
+ *) # *=?
+ logger "openslx utility: runscript: unkown scriptVisibility $SCRIPTVISIBILITY."
+ ;;
+ esac
+
+ if [ "$ERR" -eq 0 ]; then
+ logger "openslx utility: runscript: runscript${SCRIPTEXT} ok, errorlevel ${ERR}."
else
- logger "openslx sharemapper: runscript: Script error ${ERR}."
+ logger "openslx utility: runscript: Script error ${ERR}."
fi
+ else
+ logger "openslx utility: runscript: script $DISKMOUNTDIR/runscript${SCRIPTEXT} not found."
fi
else
- logger "openslx sharemapper: runscript: Could not find $DISKMOUNTDIR/openslx.ini for script extension."
+ logger "openslx utility: runscript: Could not find $SLXCONFIGFILE."
+ exit 1
fi
}
+