Commit | Line | Data |
---|---|---|
a10bf242 MW |
1 | #! /bin/sh -e |
2 | ||
3 | case $#,$2 in | |
4 | 0,* | 1,*) ok=nil ;; | |
5 | *,*:*) ok=t ;; | |
6 | *) ok=nil ;; | |
7 | esac | |
8 | case $ok in | |
9 | nil) echo >&2 "usage: $0 DIR,... HOST:DISP [CMD ARGS ...]"; exit 2; ;; | |
10 | esac | |
11 | dirs=$1 host=${2%:*} dpy=${2##*:}; shift 2 | |
12 | case $#,$1 in | |
73b72c0a | 13 | 0, | 1,:slideshow) |
5dca0cf7 | 14 | set -- /usr/lib/xscreensaver/glslideshow -duration 10 -pan 10 \ |
a10bf242 MW |
15 | -xrm "'*desktopGrabber: ./getimg %s'" |
16 | ;; | |
17 | 1,:photopile) | |
18 | set -- /usr/lib/xscreensaver/photopile -no-titles -no-polaroid -shadows \ | |
19 | -xrm "'*desktopGrabber: ./getimg %s'" | |
20 | ;; | |
21 | esac | |
22 | ||
23 | t=$(mktemp -d "${TMPDIR-/tmp}/remote-slidesshow.XXXXXXXX") | |
24 | mkfifo "$t/pipe" | |
25 | exec 3<>"$t/pipe" | |
26 | rm -rf "$t" | |
27 | ||
28 | ssh -ax "$host" " | |
29 | set -e | |
30 | tmp=\$(mktemp -d \"\${TMPDIR-/tmp}/remote-slideshow.XXXXXXXX\") | |
31 | trap 'cd / && rm -rf \$tmp' EXIT INT TERM HUP | |
32 | cd \$tmp | |
33 | IMAGEFILE=\$tmp/img; export IMAGEFILE | |
34 | DISPLAY=:$dpy; export DISPLAY | |
35 | exec 3<&0 4>&1 | |
36 | cat >getimg <<'EOF' | |
37 | #! /bin/sh -e | |
38 | rm -f img | |
39 | echo \"\$IMAGEFILE\" >&4 | |
40 | xscreensaver-command -deactivate >/dev/null 2>&1 || : | |
41 | IFS= read -r f <&3 | |
42 | exec xscreensaver-getimage -directory \"\${IMAGEFILE%/*}\" -file img \"\$@\" | |
43 | EOF | |
44 | chmod +x getimg | |
45 | $*" <&3 | | |
46 | while IFS= read -r rdir; do | |
47 | set -- \( -false | |
48 | for e in jpg jpeg pjpeg pjpg png gif tif tiff xbm xpm; do | |
49 | set -- "$@" -o -name "*.$e" | |
50 | done | |
51 | set -- "$@" \) -type f -print -o -type d \( -false | |
52 | dd=$dirs | |
53 | while :; do | |
54 | case $dd in | |
55 | "") break ;; | |
56 | *,*) d=${dd##*,} dd=${dd%,*} ;; | |
57 | *) d=$dd dd= ;; | |
58 | esac | |
59 | for i in $(find "$d" -name .slideshow-ignore -type f -print); do | |
60 | while IFS= read -r line; do | |
61 | case $line in \#*) continue ;; esac | |
62 | set -- "$@" -o -path "${i%/*}/$line" | |
63 | done <"$i" | |
64 | done | |
65 | set -- "$d" "$@" | |
66 | done | |
67 | set -- "$@" \) -prune | |
68 | f=$(find "$@" | shuf -n1) | |
69 | echo "$f" | |
70 | scp "$f" "$host:$rdir" >/dev/null 2>&1 | |
71 | echo done >&3 | |
72 | done |