aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qvm-screenshot.sh
blob: 6866aa39857c4f066ab89494c25ee1cbe7a3dd76 (plain) (blame)
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
#!/bin/sh

# Take screenshot(s) in Qubes Dom0 and copy to AppVM
# Dependencies: scrot (sudo qubes-dom0-update scrot)
# My KDE shortcuts:
# Meta-C       : qvm-screenshot.sh -s -n
# Meta-Shift-C : qvm-screenshot.sh -s -n -m
# Meta-Alt-C   : qvm-screenshot.sh -s -q
# 2013, Laurent Ghigonis <laurent@p1sec.com>

DOM0_SHOTS_DIR=$HOME/shots
APPVM_SHOTS_DIR=/home/user/shots
QUBES_DOM0_APPVMS=/var/lib/qubes/appvms/

usage() {
	echo "$program [-hlmqs]"
	echo -e "\t-m : take multiple shots"
	echo -e "\t-n : after screenshot, run nautilus in AppVM"
	echo -e "\t-q : only take screenshot, no blabla"
	echo -e "\t-s : select window"
}

program="`basename $0`"
mode_multi=0
mode_nautilus=0
mode_select=0
opts="$(getopt -o hmnqs -n "$program" -- "$@")"
err=$?
eval set -- "$opts"
while true; do case $1 in
	-h) usage; exit 1 ;;
	-q) mode_quick=1; shift ;;
	-m) mode_multi=1; shift ;;
	-n) mode_nautilus=1; shift ;;
	-s) mode_select=1; shift ;;
	--) shift; break ;;
esac done
[[ $err -ne 0 ]] && usage && exit 1

shotslist=""
mkdir -p $DOM0_SHOTS_DIR ||exit 1
while true; do
	d=`date +"%Y%m%d-%H%M"`
	tmpname=$d.png
	if [ $mode_select -eq 1 ]; then
		echo "[-] making shot, click on a window"
		scrot $@ -s $DOM0_SHOTS_DIR/$tmpname ||break
	else
		echo "[-] making shot of root window"
		scrot $@ $DOM0_SHOTS_DIR/$tmpname ||break
	fi
	[[ $mode_quick -eq 1 ]] && exit 1

	title=`kdialog --inputbox "Enter screenshot title" --title "$program"`
	[[ X"$title" = X"" ]] && break
	shotname=${d}_${title}.png

	echo "[-] saving $DOM0_SHOTS_DIR/$shotname"
	mv $DOM0_SHOTS_DIR/$tmpname $DOM0_SHOTS_DIR/$shotname

	shotslist="${shotslist}${shotname}:"

	[[ $mode_multi -eq 1 ]] && kdialog --yesno "Other shot ?" || break
done

choice=`ls $QUBES_DOM0_APPVMS |sed 's/\([^ ]*\)/\1 \1/g'`
appvm=`kdialog --menu "Select destination AppVM" $choice --title "$program"`

if [ X"$appvm" != X"" ]; then
	if [ $mode_nautilus -eq 1 ]; then
		echo "[-] running nautilus in AppVM"
		qvm-run $appvm "nautilus $APPVM_SHOTS_DIR"
	fi

	echo "[-] copy to AppVM $appvm"
	qvm-run $appvm "mkdir -p $APPVM_SHOTS_DIR"
	IFS=":"; for shot in $shotslist; do
		echo "[-] copying $APPVM_SHOTS_DIR/$shot"
		cat $DOM0_SHOTS_DIR/$shot \
			|qvm-run --pass-io $appvm "cat > $APPVM_SHOTS_DIR/$shot"
	done
else
	echo "no AppVM name provided"
fi

echo "[*] done"