diff options
author | Jonathan Bauer | 2019-01-04 11:12:55 +0100 |
---|---|---|
committer | Jonathan Bauer | 2019-01-04 11:12:55 +0100 |
commit | f31f6e5fca75974adb1ae8300854916512b484bb (patch) | |
tree | c11c197a7fce4dcd41d30572cdd996d47509f746 /core/modules/kiosk-common/data/opt/openslx/scripts/systemd-setup_kiosk | |
parent | [beamergui] Close stdout/err when respawning beamergui (diff) | |
download | mltk-f31f6e5fca75974adb1ae8300854916512b484bb.tar.gz mltk-f31f6e5fca75974adb1ae8300854916512b484bb.tar.xz mltk-f31f6e5fca75974adb1ae8300854916512b484bb.zip |
[kiosk*] rework and introduce kiosk mode modules
changed from slxbrowser only support to modular hook structure to
support additional browser, i.e. chromium
NOTE: kiosk-chromium and kiosk-netpoint only make sense with the new gen
Diffstat (limited to 'core/modules/kiosk-common/data/opt/openslx/scripts/systemd-setup_kiosk')
-rwxr-xr-x | core/modules/kiosk-common/data/opt/openslx/scripts/systemd-setup_kiosk | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/core/modules/kiosk-common/data/opt/openslx/scripts/systemd-setup_kiosk b/core/modules/kiosk-common/data/opt/openslx/scripts/systemd-setup_kiosk new file mode 100755 index 00000000..a19e2bc3 --- /dev/null +++ b/core/modules/kiosk-common/data/opt/openslx/scripts/systemd-setup_kiosk @@ -0,0 +1,57 @@ +#!/bin/bash + +. /opt/openslx/config + +configure_fullscreen() { + # TODO having two variants of the rc.xml is quite bad, better to prune it with xmlstarlet? + local openbox_rc_file="/etc/xdg/openbox/rc.xml.kiosk" + local openbox_namespace="http://openbox.org/3.4/rc" + # for fullscreen functionality, use openbox + if [ ! -e "$openbox_rc_file" ]; then + echo "Could not find global openbox configuration" + return 1 + fi + local browser_node="//x:applications/x:application[@role='browser']" + local -i browser_node_count="$(xmlstarlet sel -N x="$openbox_namespace" -t -c "count($browser_node)" "$openbox_rc_file")" + if [ "$browser_node_count" -gt 1 ]; then + echo "More than one node for '$browser_node' found. Removing them all..." + xmlstarlet ed -L -N x="$openbox_namespace" -d "$browser_node" "$openbox_rc_file" + fi + # either we removed everything, or we had none to start with + if [ "$browser_node_count" -eq 0 ] ; then + local tmpname="application$RANDOM" + xmlstarlet ed -L -N x="$openbox_namespace" -s "//x:applications" -t elem -n "$tmpname" -i "//$tmpname" -t attr -n "role" -v "browser" "$openbox_rc_file" + browser_node="//x:applications/x:$tmpname" + fi + # Fullscreen or maximized depends on whether we should start an interactive session or not + # For now use SLX_BROWSER_INTERACTIVE + local state + if [ -n "$SLX_BROWSER_INTERACTIVE" ]; then + state="maximized" + xmlstarlet ed -L -N x="$openbox_namespace" -d "$browser_node/x:fullscreen" "$openbox_rc_file" + else + state="fullscreen" + xmlstarlet ed -L -N x="$openbox_namespace" -d "$browser_node/x:maximized" "$openbox_rc_file" + fi + + if ! xmlstarlet sel -Q -N x="$openbox_namespace" -t -c "$browser_node/x:$state" "$openbox_rc_file"; then + xmlstarlet ed -L -N x="$openbox_namespace" -s "$browser_node" -t elem -n "$state" -v "yes" "$openbox_rc_file" + elif [ "$(xmlstarlet sel -N x="$openbox_namespace" -t -v "$browser_node/x:$state" "$openbox_rc_file")" != "yes" ]; then + xmlstarlet ed -L -N x="$openbox_namespace" -u "$browser_node/x:$state" -v "yes" "$openbox_rc_file" + fi + xmlstarlet ed -L -N x="$openbox_namespace" -r "$browser_node" -v "application" "$openbox_rc_file" +} + +## MAIN +configure_fullscreen + +# Disable logout delay for demo user on shutdown/reboot/... +mkdir -p "/run/openslx" +touch "/run/openslx/demo-no-logout-delay" + +for file in "$0".d/*; do + # hooks for browser-related stuff + . "$file" || slxlog "kiosk-setup" "Failed to source '$file'." +done + +exit 0 |