From 8f7df289cdbd33a8ecd6a39c95fd09645ff21a24 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 6 Sep 2018 11:36:20 +0200 Subject: [pvs2] Refactor for new addon system --- .../data/opt/openslx/pvs2/addons/50-lock-desktop | 7 +++ .../data/opt/openslx/pvs2/addons/60-switch-manager | 7 +++ core/modules/pvs2/data/opt/openslx/pvs2/lock.svg | 27 +++++++++ .../pvs2/data/opt/openslx/pvs2/lockDesktop.sh | 2 +- .../pvs2/data/opt/openslx/pvs2/toggleManager.sh | 67 ++++++++++++++++++++++ core/modules/pvs2/module.build | 2 +- 6 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 core/modules/pvs2/data/opt/openslx/pvs2/addons/50-lock-desktop create mode 100644 core/modules/pvs2/data/opt/openslx/pvs2/addons/60-switch-manager create mode 100644 core/modules/pvs2/data/opt/openslx/pvs2/lock.svg create mode 100755 core/modules/pvs2/data/opt/openslx/pvs2/toggleManager.sh (limited to 'core/modules/pvs2') diff --git a/core/modules/pvs2/data/opt/openslx/pvs2/addons/50-lock-desktop b/core/modules/pvs2/data/opt/openslx/pvs2/addons/50-lock-desktop new file mode 100644 index 00000000..bde0f2e7 --- /dev/null +++ b/core/modules/pvs2/data/opt/openslx/pvs2/addons/50-lock-desktop @@ -0,0 +1,7 @@ +[General] +type=button +exec=/opt/openslx/pvs2/lockDesktop.sh +icon=/opt/openslx/pvs2/lock.svg +caption=Sperren +tooltip=Die Sitzung sperren. Entsperren nur mit Passwort des angemeldeten Benutzers möglich. +async=true diff --git a/core/modules/pvs2/data/opt/openslx/pvs2/addons/60-switch-manager b/core/modules/pvs2/data/opt/openslx/pvs2/addons/60-switch-manager new file mode 100644 index 00000000..3d755005 --- /dev/null +++ b/core/modules/pvs2/data/opt/openslx/pvs2/addons/60-switch-manager @@ -0,0 +1,7 @@ +[General] +type=button +exec=/opt/openslx/pvs2/toggleManager.sh +caption=Wechseln +tooltip=Ansicht zwischen PVS-Manager und Virtueller Maschine wechseln. +init=true +connection-events=true diff --git a/core/modules/pvs2/data/opt/openslx/pvs2/lock.svg b/core/modules/pvs2/data/opt/openslx/pvs2/lock.svg new file mode 100644 index 00000000..09c45511 --- /dev/null +++ b/core/modules/pvs2/data/opt/openslx/pvs2/lock.svg @@ -0,0 +1,27 @@ + + + + + + + diff --git a/core/modules/pvs2/data/opt/openslx/pvs2/lockDesktop.sh b/core/modules/pvs2/data/opt/openslx/pvs2/lockDesktop.sh index c9cfc421..ccfbbe80 100755 --- a/core/modules/pvs2/data/opt/openslx/pvs2/lockDesktop.sh +++ b/core/modules/pvs2/data/opt/openslx/pvs2/lockDesktop.sh @@ -8,7 +8,7 @@ # So we minimize vmware, lock the screen, and then restore vmware. # TODO: Add other virtualizers (vbox, kvm) later if needed. -WINDOWS=$(xdotool search --class vmplayer) +WINDOWS=$(xdotool search --onlyvisible --class vmplayer) for window in $WINDOWS; do xdotool windowminimize $window done diff --git a/core/modules/pvs2/data/opt/openslx/pvs2/toggleManager.sh b/core/modules/pvs2/data/opt/openslx/pvs2/toggleManager.sh new file mode 100755 index 00000000..f2749d8b --- /dev/null +++ b/core/modules/pvs2/data/opt/openslx/pvs2/toggleManager.sh @@ -0,0 +1,67 @@ +#!/bin/ash + +wt="PVS2 Manager" +readonly wt + +moveVm() { + # make sure vmplayer is really on workspace 0 + local window windows + windows=$(xdotool search --onlyvisible --class vmplayer) + for window in $windows; do + wmctrl -i -r "$window" -t 0 + done +} + +moveMgr() { + # make sure mgr is on workspace 1 + wmctrl -r "$wt" -t 1 +} + +getCurrent() { + wmctrl -d | awk '{if ($2 == "*") print $1}' +} + +# Do this whenever we're triggered +moveVm +moveMgr + wmctrl -s 0 + +case "$EVENT" in +init) + echo "CHECKED=false" + ;; +connected) + echo "VISIBLE=$ISLOCAL" + if [ "$ISLOCAL" = "true" ]; then + moveVm + moveMgr + current=$(getCurrent) + if [ "$current" = "1" ]; then + echo "CHECKED=true" + else + echo "CHECKED=false" + fi + fi + ;; +disconnected) + echo "VISIBLE=false" + moveMgr + moveVm + wmctrl -s 0 + ;; +clicked) + moveMgr + moveVm + # Ignore $CHECKED here as reported by PVS, since the user might have switched desktops manually + current=$(getCurrent) + if [ "$current" = "1" ]; then + wmctrl -s 0 + echo "CHECKED=false" + else + wmctrl -a "$wt" + wmctrl -s 1 + echo "CHECKED=true" + fi + ;; +esac + diff --git a/core/modules/pvs2/module.build b/core/modules/pvs2/module.build index 454bd522..a1039e7d 100644 --- a/core/modules/pvs2/module.build +++ b/core/modules/pvs2/module.build @@ -24,7 +24,7 @@ build() { mkdir -p "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" if [ -d "${SRCDIR}/sample_configuration" ]; then # Do not copy lockDesktop.sh - we ship a modified one - cp "${SRCDIR}/sample_configuration"/{kb-lock,kb-unlock,switchToManager,switchBack}.sh "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" \ + cp "${SRCDIR}/sample_configuration"/{kb-lock,kb-unlock}.sh "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" \ || perror "Could not copy external scripts to '${MODULE_BUILD_DIR}/opt/openslx/pvs2/'!" chmod +x "${MODULE_BUILD_DIR}/opt/openslx/pvs2"/*.sh \ || perror "Could not set executable bit for external scripts." -- cgit v1.2.3-55-g7522