Dual-screen interactive slideshow screensaver for MATE
#!/usr/bin/env bash | |
# Standard-repo requirements: | |
# w, awk, head, mktemp, split, grep, ck-list-sessions, sed, getent, cut | |
# TODO Check whether awk can't exit immediately after first match | |
ACTIVE_USER=`w --no-header -s | awk '/ :0 / {print $1}' | head -1` | |
[ -n "$ACTIVE_USER" ] && { | |
echo "$ACTIVE_USER" | |
exit 0 | |
} | |
sessions_dir=`mktemp --tmpdir --directory ConsoleKit-sessions.XXXXXX` | |
ck-list-sessions | split --lines 13 - "${sessions_dir}/" | |
matching_session=`grep --files-with-matches --line-regexp '^[[:space:]]\+active = TRUE$' ${sessions_dir}/a* 2> /dev/null | head -1` | |
if [ $? = 0 ]; then | |
user_id=`sed -n 's/^[[:space:]]\+unix-user = .\([[:digit:]]\+\).$/\1/p' $matching_session` | |
getent passwd "$user_id" | cut -f 1 -d ':' | |
unset user_id | |
else | |
echo 'root' | |
fi | |
rm -Rf "$sessions_dir" | |
unset matching_session sessions_dir |
#!/usr/bin/env bash | |
# Custom script requirements: active_user | |
ACTIVE_USER=`"${HOME}/bin/linux/active_user"` | |
[ "${ACTIVE_USER:-root}" == "${USER:=$LOGNAME}" ] |
#!/usr/bin/env bash | |
# Standard-repo requirements: xrandr, grep | |
xrandr | grep -c '\bconnected\b' |
#!/usr/bin/env bash | |
# $1 (optional): timeout in seconds. Defaults to $IDLER_TIMEOUT, which in turn | |
# defaults to 300. | |
# If env var DEBUG_IDLER is set to 'true' on entry then debugging information will be output | |
# Standard-repo requirements: xprintidle, bc, pgrep/pkill, xdotool | |
# Custom script requirements: active_user_is_me, slideshow | |
debug () { | |
`"${DEBUG_IDLER:-false}"` && eval "echo $1: \$$1 1>&2" | |
} | |
"${HOME}/bin/active_user_is_me" || exit 0 | |
# xprintidle needs this | |
export DISPLAY=:0.0 | |
# Seconds of inactivity until sleep. 0 to disable sleep | |
time_out=$(( ${1:-${IDLER_TIMEOUT:-300}} * 1000 )) | |
debug time_out | |
shift | |
idle_time="`xprintidle`" | |
debug idle_time | |
# Use bc to avoid integer overflow | |
[ $( echo "${idle_time:-0} > $time_out" | bc ) -eq 0 ] && { | |
timed_out=false | |
debug timed_out | |
# Don't know why this is still in the process table | |
pkill mate-screensave | |
exit 0 | |
} | |
# Re-activate slideshow in case something has taken priority | |
pgrep 'feh' &> /dev/null && { | |
xdotool search feh windowactivate %1 windowactivate %2 &> /dev/null | |
feh_found=true | |
debug feh_found | |
exit 0 | |
} | |
# Programs worth staying up for :) | |
pgrep 'shutdown|mpg123|mplayer|mate-screensave' &> /dev/null && { | |
blocking_app_found=true | |
debug blocking_app_found | |
exit 0 | |
} | |
pgrep vlc &> /dev/null && { | |
vlc_is_running=true | |
debug vlc_is_running | |
"${HOME}/bin/vlc_is_playing_music_or_stopped" || { | |
vlc_is_not_playing_music_or_stopped=true | |
debug vlc_is_not_playing_music_or_stopped | |
exit 0 | |
} | |
} | |
"${HOME}/bin/slideshow" $@ |
#!/usr/bin/env bash | |
# $1 (optional): Window geometry to pass to first (rhs) my_feh process | |
# $2 (optional): Window geometry to pass to second (lhs) my_feh process | |
# Custom script requirements: count_hardware_displays, my_feh | |
################## EDIT ################## | |
PHOTOS="/path/to/your/photos/" | |
########################################## | |
DISPLAYS_COUNT="`${HOME}/bin/X11-utils/count_hardware_displays`" | |
[[ $DISPLAYS_COUNT == 0 ]] && exit 1 | |
SLIDESHOW="${HOME}/bin/my_feh" | |
# Right screen | |
if [ -n "$1" ]; then | |
export MY_FEH_GEOMETRY="$1" | |
fi | |
"$SLIDESHOW" "$PHOTOS" &>> "${HOME}/slideshow1.log" & | |
[[ $DISPLAYS_COUNT == 1 ]] && exit 0 | |
sleep 1 | |
# Left screen | |
if [ -n "$2" ]; then | |
export MY_FEH_GEOMETRY="$2" | |
else | |
export MY_FEH_GEOMETRY='1200x1868+0+52' | |
fi | |
"$SLIDESHOW" "$PHOTOS" &>> "${HOME}/slideshow2.log" & |
#!/usr/bin/env bash | |
# VLC must be launched as vlc --extraintf oldrc:http --rc-unix ~/vlc.sock | |
# Standard-repo requirements: vlc, pgrep, netcat-openbsd, grep | |
[ -S "${HOME}/vlc.sock" ] || exit 2 | |
/usr/bin/pgrep vlc &> /dev/null || exit 3 | |
# Change this to a distinctive portion of the pathname of your music collection | |
##### EDIT ### | |
echo status | /bin/nc -U "${HOME}/vlc.sock" | /bin/grep --quiet 'Music.\+iTunes\|stop state: 5' | |
############## |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment