X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/profile/blobdiff_plain/f668482fe8b6724f56525bda48fc8d40e2041d83..a10bf242a684d2dd8cdd2fe949330a21cdb7789e:/bin/remote-slideshow diff --git a/bin/remote-slideshow b/bin/remote-slideshow new file mode 100755 index 0000000..4a49a60 --- /dev/null +++ b/bin/remote-slideshow @@ -0,0 +1,72 @@ +#! /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 60 -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