blob: baef2a2a613e4145f44de1f99a5d9aede6a49544 (
plain) (
tree)
|
|
#!/bin/ash
if command -v xscreensaver; then
DPMS=False
AUTOLOCK=True
NEVER_LOCK=
secsToTime() {
local NUM SECS MINS HRS
NUM="$1"
SECS=$(( NUM % 60 ))
MINS=$(( ( NUM / 60 ) % 60 ))
HRS=$(( ( NUM / 3600 ) % 60 ))
printf "%02d:%02d:%02d" "$HRS" "$MINS" "$SECS"
}
[ -z "$UID" ] && UID=$(id -u)
[ -z "$HOME" ] && HOME="$(getent passwd "$UID" | head -n 1 | awk -F ':' '{print $6}')"
. /opt/openslx/config
SBY="${SLX_SCREEN_STANDBY_TIMEOUT}"
SVR="${SLX_SCREEN_SAVER_TIMEOUT}"
if [ -n "${SLX_REMOTE_VNC}" ]; then
AUTOLOCK=False
NEVER_LOCK=True
fi
if [ -n "${SLX_EXAM}" ]; then
SLX_SCREEN_SAVER_GRACE_TIME=
AUTOLOCK=False
NEVER_LOCK=True
SBY=0
SVR=0
elif [ -z "$SBY" ]; then
SBY=0
elif [ "$SBY" -gt 0 ] && [ "$SBY" -lt 60 ]; then
SBY=60
elif ! [ "$SBY" -ge 0 ]; then # isNumeric?
SBY=0
fi
# Guest session/auto login, don't lock
[ "$GUEST_SESSION" = "True" ] && NEVER_LOCK=True
# If web based login, we can't authenticate again as we don't have the password - never lock
if [ -z "$NEVER_LOCK" ]; then
usrname="$( < "/etc/passwd" awk -v "uid=$UID" -F ':' '$3 == uid {print $5; exit}' )"
# Yes, this really checks if $usrname ends in @browser, and sets NEVER_LOCK to true if so
[ "${usrname%"@browser"}" != "${usrname}" ] && NEVER_LOCK=True
fi
# Create config value for standby timeout
if [ "$SBY" -gt 0 ]; then
DPMS=True
STANDBY="$( secsToTime "$SBY" )"
else
STANDBY="99:00:00"
fi
# Explicit screen saver timeout set. Handle 0 as disabled.
# Fix values below one minute:
if [ "$SVR" -gt 0 ] && [ "$SVR" -lt 60 ]; then
SVR=60
fi
if [ "$SVR" -gt 0 ]; then
TIMEOUT="$( secsToTime "$SVR" )"
else
TIMEOUT="99:00:00"
fi
if [ -z "$SLX_SCREEN_SAVER_GRACE_TIME" ]; then
GRACE="99:00:00"
AUTOLOCK=False
else
GRACE="$( secsToTime "$SLX_SCREEN_SAVER_GRACE_TIME" )"
fi
# Always overwrite this file -- better for exam mode
cat > "$HOME/.xscreensaver" <<EOF
# Automatically generated on $(date) -- modifications might get lost
mode: one
cycle: 99:00:00
timeout: $TIMEOUT
lock: $AUTOLOCK
lockTimeout: $GRACE
fade: False
unfade: False
dpmsEnabled: $DPMS
dpmsStandby: $STANDBY
dpmsSuspend: $STANDBY
dpmsOff: $STANDBY
dpmsFullThrottle: True
newLoginCommand:
externalUngrabCommand: /opt/openslx/xscreensaver/ungrab
programs: /opt/openslx/bin/bwlp-screensaver
selected: 0
EOF
(
# HACK: This env vars prevent xscreensaver from ever locking
# Only one would be needed but set both in case one of them
# gets removed in the future.
if [ -n "$NEVER_LOCK" ]; then
export RUNNING_UNDER_GDM="not really but yea"
export WAYLAND_DISPLAY="none, haha"
fi
xscreensaver -no-splash &
)
fi
true
|