-
Notifications
You must be signed in to change notification settings - Fork 0
/
pshot
executable file
·144 lines (132 loc) · 4.08 KB
/
pshot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/bash
# pshot by anvornial
# take screenshot of x desktop periodically using scrot
# dependency : scrot, md5sum, find, shuf, convert (imagemagick, optional)
function _display_help {
echo ""
echo "pshot"
echo " take screenshot of X desktop periodically using scrot"
echo ""
echo "usage : "
echo " $0 [option] [save location]"
echo
echo "option :"
echo " -q [quality] "
echo " jpeg output quality, value is 1 to 100. Default is 20"
echo
echo " -d [range_low-range_high]"
echo " Delay between each screenshot. Using range like 5-45, it means, delay will vary between 5 to 45 seconds."
echo " Fixed delay can be achived with same number in range like 50-50."
echo " Default is 5-45"
echo
echo " -n "
echo " Disable annotation bar. By default, each image will contain annotation using"
echo " 'convert' from imagemagick, if installed."
echo
echo " -h --help"
echo " Display this help"
echo
echo " --"
echo " Stop args parsing"
}
if [[ $1 == "" || " $@ " == *\ -h\ * || " $@ " == *\ --help\ * ]]; then
_display_help
exit
fi
# renice ourself
renice -n 19 $$ &> /dev/null
# main variable
RANGE="5-45"
QUALITY=20
CONVERT=$(command -v convert)
TMPDIR=$(mktemp -d /tmp/outputpshot.XXXXXXXXXX)
if [[ ! -d "$TMPDIR" ]]; then
echo "ERROR cannot create temporary directory"
exit 1
fi
# trap function
function _revert {
# clean temp directory
if [[ -d "$TMPDIR" ]]; then
rm -rf "$TMPDIR"
fi
exit
}
trap _revert HUP INT TERM EXIT
# begin parsing command
while [[ $1 == -* ]]; do
if [[ $1 == "-q" ]]; then
shift
if (( $1 >= 5 && $1 <= 100 )); then
QUALITY="$1"
else
echo "ERROR invalid quality value : $1, must be between 5 to 100"
exit
fi
elif [[ $1 == "-d" ]]; then
shift
RANGE="$1"
# test if delay is valid
shuf -i $RANGE -n 1 > /dev/null 2>&1
if [[ $? != "0" ]]; then
echo "ERROR invalid delay range : $1"
exit
fi
elif [[ $1 == "-n" ]]; then
CONVERT=""
elif [[ $1 == "--" ]]; then
shift
break
fi
shift
done
# check location path
if [[ -d "$1" ]]; then
LOCATION=$(realpath "$1")
else
echo "ERROR invalid save location on '$1'"
exit
fi
# main script loop
while :; do
# get screenshot
cd "$TMPDIR"
if [[ $CONVERT != "" ]]; then
CUR_FILE=($(scrot -m -z 'pshot__%Y-%m-%d__%H_%M_%S.png' -e 'md5sum $f'))
else
CUR_FILE=($(scrot -m -z -q $QUALITY 'pshot__%Y-%m-%d__%H_%M_%S.jpg' -e 'md5sum $f'))
fi
# save screenshot
if [[ -f "${CUR_FILE[1]}" ]]; then
if [[ "${CUR_FILE[0]}" == "$PREV_HASH" ]]; then
echo "same image detected, not saving"
rm "${CUR_FILE[1]}"
else
if [[ -d "$LOCATION" ]]; then
LOCATION_WITH_DATE="$LOCATION/$(date '+%Y')/$(date '+%Y-%m-%d')"
[[ ! -d "$LOCATION_WITH_DATE" ]] && mkdir -p "$LOCATION_WITH_DATE"
if [[ -d "$LOCATION_WITH_DATE" ]]; then
if [[ $CONVERT != "" ]]; then
SAVEPATH="$LOCATION_WITH_DATE/${CUR_FILE[1]%.*}.jpg"
$CONVERT "${CUR_FILE[1]}" \
-quality $QUALITY \
-gravity South -background Gold -splice 0x30 \
-pointsize 20 -gravity SouthWest -annotate 0 "pshot $(whoami)@$(hostname) $(date '+%A %B %d %Y %z') $(uptime)" \
"$SAVEPATH"
rm "${CUR_FILE[1]}"
else
SAVEPATH="$LOCATION_WITH_DATE/${CUR_FILE[1]}"
cp "${CUR_FILE[1]}" "$SAVEPATH"
rm "${CUR_FILE[1]}"
fi
echo "screenshot saved to $SAVEPATH"
fi
fi
fi
fi
PREV_HASH=${CUR_FILE[0]}
# random delay with range
DELAY=$(shuf -i $RANGE -n 1)
echo "next screenshot in $DELAY seconds"
sleep $DELAY
done