Screenshots von WM/DM/Konsole
Ein Script um Screenshots vom Windowmanager, Displaymanager oder der Konsole zu erstellen. Eine Kurzversion des Scriptes mit Verwendung von Tastaturkomandos steht bei den Screenshots
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)
Folgende Pakete (inkl. eventueller Abhängigkeiten) müssen installiert sein: |
|
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