Screenshots von WM/DM/Konsole
Version vom 24. Juni 2007, 17:27 Uhr von Yehudi (Diskussion | Beiträge) (doppelte Überschrift entfernt)
Ein Script um Screenshots vom Windowmanager, Displaymanager oder der Konsole zu erstellen
Das Script wird wie folgt aufgerufen:
/pfad/zu/x-shot [OPTIONEN]
Optionen:
-d | --dir /home/user/screenshots
Pfad unter dem die Screenshots gespeichert werden.
Ein Unterordner (Jahr-Monat-Tag - z.B. 2007-03-12) wird automatisch angelegt.
-e | --ext [jpg | png | ...]
Format des Bildschirmphotos.
Grundsätzlich sollten alle Formate, die von ImageMagick (import / convert) unterstützt werden, erlaubt sein - getestet wurden aber nur jpg und png.
Ausnahme: Modus console - da fbgrab nur PNGs ausgibt, wird das Format automatisch auf png gesetzt.
-w | --wait <num>
Verzögerung bis zur Aufname des Bildschirmphotos
-q | --quality <num>
Qualität des Bildschirmphotos.
Von 0 = schlechteste bis 100 = beste Qualität.
Je nach Qualität ändert sich natürlich auch die Größe der Bilddatei (hohe Qualität = große Datei | schlechte Qualität = kleine Datei).
-m | --modus [screen | area | window | dm | console]
Modus des Screenshots:
console = Screenshot mit fbgrab aus der Konsole.
dm = Screenshot des X-Servers mit xwd aus der Konsole.
Um z.B. einen Screenshot von Displaymanager zu machen.
area = Screenshot eines Bildschirm-Bereichs.
Auswahlrechteck mit der Maus aufziehen.
window = Screenshot eines Fensters.
Auswahl mit Mausklick.
screen = Screenshot des gesamten Bildschirms
Defaultwerte (wenn das Script ohne Parameter aufgerufen wird):
Verzeichnis: Homeverzeichnis (des jeweiligen Users)
Format: JPEG
Qualität: 75%
Verzögerung: Keine (0)
Modus: Kompletter Bildschirn (screen)
Benötigte Programme/Pakete:
- import und convert (ImageMagick)
- xwd
- fbgrab
Script:
#!/bin/sh
################################################################################
# Filename: /usr/local/bin/x-shot
# Purpose: screenshot script
# License: This file is licensed under the Creative Commons
################################################################################
ARGV="$@"
PRGNAME=$(basename $0)
DIR="${HOME}";
EXT="jpg"; # jpeg png
WAIT="0";
QUALITY="75"; # 0-100
MODUS="screen"; # area window dm console
MAGICK=`which import 2> /dev/null`;
XWD=`which xwd 2> /dev/null`;
FBGRAB=`which fbgrab 2> /dev/null`;
SLEEP=`which sleep 2> /dev/null`;
CHVT=`which chvt 2> /dev/null`;
DATE=`date "+%Y-%m-%d"`;
FILE=`date "+%Y%m%d_%H%M"`;
##########################################################################
if [ $# -gt 0 ]; then
set -- $ARGV;
OPT="ext:,dir:,quality:,wait:,modus:";
TEMP=$(getopt --options=e:d:q:w:m: --long $OPT -n $PRGNAME -- "$@");
if [ $? -ne 0 ]; then
echo "Exiting..." >&2;
exit 100;
fi;
eval set -- "$TEMP";
while true; do
case $1 in
--ext|-e) if [ $MODUS == "console" ]; then EXT="png"; else EXT="$2"; fi; shift; ;;
--dir|-d) DIR="$2"; shift; ;;
--quality|-q) QUALITY="$2"; shift; ;;
--wait|-w) WAIT="$2"; shift; ;;
--modus|-m)
MODUS="$2";
case $MODUS in
area|window|screen) PREF="wm"; ;;
dm) PREF="dm"; ;;
console) PREF="console"; ;;
esac;
shift; ;;
--) break;;
*) echo "Unknow argument \"$1\"!"; exit 100;;
esac;
shift;
done;
fi;
[ ! -d "${DIR}/${DATE}" ] && (mkdir -p "${DIR}/${DATE}" || (echo -e "Cannot create directory ${DIR}/${DATE}!\nExiting ..."; exit 1;));
if [ -e "${DIR}/${DATE}/${PREF}_${FILE}.${EXT}" ]; then x=0;
while [ -e "${DIR}/${DATE}/${PREF}_${FILE}-$x.${EXT}" ];
do x=`expr $x + 1`; done; SCREEN="${FILE}-$x.${EXT}";
else SCREEN="${FILE}.${EXT}";
fi;
case $MODUS in
screen)
if [ -z "$MAGICK" ]; then
echo -e "import (ImageMagick) not found!\nExiting ..."; exit 1;
else
[ "$WAIT" -gt 0 ] && "$SLEEP" "$WAIT";
"$MAGICK" -quiet -silent -quality "$QUALITY" -window root "${DIR}/${DATE}/${PREF}_${SCREEN}";
fi;
;;
area|window)
if [ -z "$MAGICK" ]; then
echo -e "import (ImageMagick) not found!\nExiting ..."; exit 1;
else
[ "$WAIT" -gt 0 ] && "$SLEEP" "$WAIT";
"$MAGICK" -quiet -silent -quality "$QUALITY" "${DIR}/${DATE}/${PREF}_${SCREEN}";
fi;
;;
dm)
if [ -z "$XWD" ]; then
echo -e "xwd not found!\nExiting ..."; exit 1;
else
"$CHVT" 7; "$([ "$WAIT" -gt 0 ] && echo -n "$SLEEP $WAIT")"; XAUTHORITY="$(ps ax | grep '[-]auth' | awk '{print $NF}')"; "$XWD" -display :0 -root | convert - "$EXT":"${DIR}/${DATE}/${PREF}_${SCREEN}";
fi;
;;
console)
if [ -z "$XWD" ]; then
echo -e "fbgrab not found!\nExiting ..."; exit 1;
else
"$FBGRAB" -s "$([ "$WAIT" -gt 0 ] && echo -n "$WAIT")" "${DIR}/${DATE}/${PREF}_${SCREEN}";
fi;
;;
*)
echo -e "No or unknown mode specified.\nExiting ..."; exit 1;
esac;
# End of file