#!/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" <