Screenshots von WM/DM/Konsole

Aus Linupedia.org
Version vom 24. Juni 2007, 17:27 Uhr von Yehudi (Diskussion | Beiträge) (doppelte Überschrift entfernt)
Wechseln zu: Navigation, Suche

Shellscripte


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



Zurück zu den Shellscripten