#! /bin/sh -e case $#,$2 in 0,* | 1,*) ok=nil ;; *,*:*) ok=t ;; *) ok=nil ;; esac case $ok in nil) echo >&2 "usage: $0 DIR,... HOST:DISP [CMD ARGS ...]"; exit 2; ;; esac dirs=$1 host=${2%:*} dpy=${2##*:}; shift 2 case $#,$1 in 0, | 1,:slideshow) set -- /usr/lib/xscreensaver/glslideshow -duration 10 -pan 10 \ -xrm "'*desktopGrabber: ./getimg %s'" ;; 1,:photopile) set -- /usr/lib/xscreensaver/photopile -no-titles -no-polaroid -shadows \ -xrm "'*desktopGrabber: ./getimg %s'" ;; esac t=$(mktemp -d "${TMPDIR-/tmp}/remote-slidesshow.XXXXXXXX") mkfifo "$t/pipe" exec 3<>"$t/pipe" rm -rf "$t" ssh -ax "$host" " set -e tmp=\$(mktemp -d \"\${TMPDIR-/tmp}/remote-slideshow.XXXXXXXX\") trap 'cd / && rm -rf \$tmp' EXIT INT TERM HUP cd \$tmp IMAGEFILE=\$tmp/img; export IMAGEFILE DISPLAY=:$dpy; export DISPLAY exec 3<&0 4>&1 cat >getimg <<'EOF' #! /bin/sh -e rm -f img echo \"\$IMAGEFILE\" >&4 xscreensaver-command -deactivate >/dev/null 2>&1 || : IFS= read -r f <&3 exec xscreensaver-getimage -directory \"\${IMAGEFILE%/*}\" -file img \"\$@\" EOF chmod +x getimg $*" <&3 | while IFS= read -r rdir; do set -- \( -false for e in jpg jpeg pjpeg pjpg png gif tif tiff xbm xpm; do set -- "$@" -o -name "*.$e" done set -- "$@" \) -type f -print -o -type d \( -false dd=$dirs while :; do case $dd in "") break ;; *,*) d=${dd##*,} dd=${dd%,*} ;; *) d=$dd dd= ;; esac for i in $(find "$d" -name .slideshow-ignore -type f -print); do while IFS= read -r line; do case $line in \#*) continue ;; esac set -- "$@" -o -path "${i%/*}/$line" done <"$i" done set -- "$d" "$@" done set -- "$@" \) -prune f=$(find "$@" | shuf -n1) echo "$f" scp "$f" "$host:$rdir" >/dev/null 2>&1 echo done >&3 done