diff options
Diffstat (limited to 'core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes')
5 files changed, 81 insertions, 22 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 3cee7944..cf6592f1 100755 --- 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 @@ -6,7 +6,7 @@ SLXCONFIGFILE="$DISKMOUNTDIR"/openslx.ini CONFIGFILE="$DISKMOUNTDIR"/shares.dat LOGINUSER=$(grep '^username=' "$SLXCONFIGFILE" | cut -d '=' -f 2) -##### User related################# +##### User related ################# LOCALUSER=student USERHOME=/home/"$LOCALUSER" USERHOMEDIR=/home/"$LOCALUSER"/PERSISTENT @@ -34,11 +34,14 @@ MOUNTCIFSPRAE="-v -t cifs -o " MOUNTCIFSOPTS="uid=$(id --user "$LOCALUSER"),gid=$(id --group "$LOCALUSER"),forceuid,forcegid,file_mode=0700,dir_mode=0700,nobrl,noacl" MOUNTNFSPRAE="-v -t nfs4 -o " MOUNTNFSOPTS="rw,nosuid,nodev,nolock,intr,hard,sloppy" +MOUNTDAVPRAE="-t davfs -o " +MOUNTDAVOPTS="uid=$(id --user "$LOCALUSER"),gid=$(id --group "$LOCALUSER")" NATADDR=$(head -n 1 "$CONFIGFILE" | cut -f 1 -d$'\t') PORT=$(head -n 1 "$CONFIGFILE" | cut -f 2 -d$'\t') SCHLUESSEL=$(head -n 1 "$CONFIGFILE" | cut -f 4 -d$'\t') GLOBALDOMAINUSER=$(head -n 1 "$CONFIGFILE" | cut -f 5 -d$'\t') +GLOBALDOMAIN=$(echo "$GLOBALDOMAINUSER" | cut -d '\' -f 1) GLOBALUSER=$(echo "$GLOBALDOMAINUSER" | cut -d '\' -f 2) ##### Remap ####################### @@ -54,5 +57,7 @@ SCRIPTEXT=$(grep scriptExt "$DISKMOUNTDIR/openslx.ini" | cut -f 2 -d "=") MUTESOUND=$(grep muteSound "$DISKMOUNTDIR/openslx.ini" | cut -f 2 -d "=") SOUNDVOL="100%" +##### Programs interfering with resolution setting ##### +KILLRESPROGS="kscreen_backend_launcher" ### Variablen Ende ################################ 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 33ccf686..c7db1971 100755 --- 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 @@ -23,45 +23,64 @@ function already_mounted() function mounter() { + MOUNTPARAM="$1" + MOUNTOPTS="$2" + SHAREPATH="$3" + MOUNTDIR="$4" + # Ausgabe: konnte mounten: 0, konnte nicht mounten: 1, schon gemountet 2 - already_mounted "$4" + already_mounted "$MOUNTDIR" ERR=$? if [ "$ERR" -eq 0 ]; then - logger "openslx sharemapper: $3 already mounted." + logger "openslx sharemapper: $SHAREPATH already mounted." AUSGANG=2 else case "$MOUNTER" in nfs) AUSGANG=0 x=2 - while ! mount $1 $2 $3 $4 2>/dev/null 1>&2; do - logger "openslx sharemapper: could not mount ${3} to ${4}, waited another $x seconds, retrying." + while ! mount $MOUNTPARAM "${MOUNTOPTS}" "$SHAREPATH" "$MOUNTDIR" 2>/dev/null 1>&2; do + logger "openslx sharemapper: could not mount ${SHAREPATH} to ${MOUNTDIR}, waited another $x seconds, retrying." sleep $x if [ "$x" -gt 6 ]; then AUSGANG=1 - logger "openslx sharemapper: timeout, could not mount ${3} to ${4}. mount.nfs installed?" + logger "openslx sharemapper: timeout, could not mount ${SHAREPATH} to ${MOUNTDIR}. mount.nfs installed?" break fi let x=x+2 done - [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${3} mounted to ${4} (nfs)." # Todo: Schöner schreiben:) + [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${SHAREPATH} mounted to ${MOUNTDIR} (nfs)." # Todo: Schöner schreiben:) ;; cifs) AUSGANG=0 x=2 + [ -n "$GLOBALDOMAIN" ] && MOUNTOPTS="${MOUNTOPTS},domain=$GLOBALDOMAIN" for VERSION in $CIFSVERSIONS; do AUSGANG=0 - while ! mount $1 "$VERSION",${2} $3 $4 2>/dev/null 1>&2; do - logger "openslx sharemapper: could not mount ${3} to ${4}, waited another $x seconds, retrying." + while ! mount $MOUNTPARAM "${VERSION}","${MOUNTOPTS}" "$SHAREPATH" "$MOUNTDIR" 2>/dev/null 1>&2; do + logger "openslx sharemapper: could not mount ${SHAREPATH} to ${MOUNTDIR}, waited another $x seconds, retrying." sleep $x if [ "$x" -gt 4 ]; then AUSGANG=1 - logger "openslx sharemapper: timeout, could not mount ${3} to ${4} cifs v${VERSION}." + logger "openslx sharemapper: timeout, could not mount ${SHAREPATH} to ${MOUNTDIR} cifs v${VERSION}." break fi let x=x+2 done [ "$AUSGANG" -eq 0 ] && break done - [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${3} mounted to ${4} (cifs $VERSION)." + [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${SHAREPATH} mounted to ${MOUNTDIR} (cifs $VERSION)." + ;; + dav) AUSGANG=0 + x=2 + while ! echo -e "${USER}\n${PASSWD}" | mount $MOUNTPARAM "$MOUNTOPTS" "$SHAREPATH" "$MOUNTDIR" 2>/dev/null 1>&2; do + logger "openslx sharemapper: could not mount ${SHAREPATH} to ${MOUNTDIR}, waited another $x seconds, retrying." + sleep x + if [ "$x" -gt 4 ]; then + AUSGANG=1 + logger "openslx sharemapper: timeout, could not mount ${SHAREPATH} to ${MOUNTDIR}. mount.davfs installed?" + break + fi + let x=x+2 + done ;; *) logger "openslx sharemapper: unknown mounter ${MOUNTER}!" ;; @@ -97,7 +116,7 @@ function mount_share() ERR=$? # ERR merken wg. Links aus USERSHAREDIR if [ "$ERR" -eq 1 ]; then logger "openslx sharemapper: Could not mount ${USERSHAREDIR} even using user credentials; giving up." - echo "Konnte Laufwerk ${SHAREPATH} nicht einhängen." >> "$USERLOGFILE" + echo "Konnte Laufwerk ${SHAREPATH} nicht einhängen. mount.cifs / mount.davfs installiert?" >> "$USERLOGFILE" fi unset USER unset PASSWD 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 c5d37105..c6bdc8c9 100755 --- 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 @@ -9,7 +9,12 @@ function mount_shares() SHAREPASS=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 5 -d$'\t') # User-PW, bei Userhome nicht vorhanden # Sharetyp bestimmen: - if [ "${SHAREPATH:0:2}" == '\\' ] || [ "${SHAREPATH:0:2}" == '//' ]; then + if [ "${SHAREPATH:0:4}" == 'http' ]; then + SHAREPATH="${SHAREPATH//\\//}" # shouldn't be needed, but who knows what windows users do... + MOUNTER=dav + MOUNTPARAM="$MOUNTDAVPRAE" + MOUNTOPTS="$MOUNTDAVOPTS" + elif [ "${SHAREPATH:0:2}" == '\\' ] || [ "${SHAREPATH:0:2}" == '//' ]; then USER=$(echo "$SHAREUSER"|cut -d '\' -f 2) SHAREPATH="${SHAREPATH//\\//}" # '\' --> `/` :-) MOUNTER=cifs diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc index e161b961..dc92061a 100755 --- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc +++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc @@ -1,12 +1,29 @@ -umount_home() { - umount /home/"${LOCALUSER}"/PERSISTENT && logger "openslx unmounter: umounted home (PERSISTENT)." \ - || logger "openslx unmounter: could not home (PERSISTENT)!" -} +umount_all() { + local HOME + local WEBDAV="(webdav) " + local UMOUNT + get_shares # fills array ROHSHARES; row 1+ share infos from (shares-)CONFIGFILE + + for (( CONFIGROW = 1; CONFIGROW < ${#ROHSHARES[@]}; CONFIGROW++ )); do # row 1 is homedir, 2+ shares + SHAREPATH=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 1 -d$'\t') # Could be a webdav share... + SHARENAME=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 3 -d$'\t' | sed 's/ /_/g') + if [ "${SHARENAME:0:5}" == "Home-" ]; then + HOME="home " + UMOUNT="${USERHOMEDIR}" + else + HOME="" + # if there's no sharename let's at least try with SHARELETTER: + [ -z "${SHARENAME}" ] && SHARENAME=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 2 -d$'\t' | sed 's/://g') + UMOUNT="${USERHOME}/${SHARENAME}" + fi -umount_shares() { - index=0 - for SHARE in $( mount | grep SHARE | tr -s ' ' | cut -f 3 -d " " ); do - umount "${SHARE}" && logger "openslx unmounter: umounted ${SHARE}." \ - || logger "openslx unmounter: could not umount ${SHARE}!" + if [ "${SHAREPATH:0:4}" == 'http' ]; then + fusermount -u "$UMOUNT" && logger "openslx umounter: umounted ${HOME}${WEBDAV} ${UMOUNT}." \ + || logger "openslx umounter: could not umount ${HOME}${WEBDAV} ${UMOUNT}!" + else + umount "${UMOUNT}" && logger "openslx umounter: umounted $HOME ${UMOUNT}." \ + || logger "openslx umounter: could not umount ${HOME}${UMOUNT}!" + fi done } + 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 index a3e6c746..62c2f313 100755 --- 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 @@ -11,11 +11,24 @@ get_xauthfile() logger "openslx resolution utility: XAUTHFILE found." } +kill_resprogs() { + for i in $KILLRESPROGS; do + if [ -n "$(ps aux|grep $i|grep -v grep)" ]; then + logger "openslx resolution utility: Interfering program $i detecting, trying to kill." + killall $i + ERR=$? + if [ $ERR -ne 0 ]; then + logger "openslx resolution utility: couldn't kill interfering program $i." + fi + fi + done +} 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." + kill_resprogs DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --output ${AUSGABE} --mode ${RESOLUTION} else logger "openslx resolution utility: resolution unchanged." |