Screenshots von WM/DM/Konsole

Aus Linupedia
Wechseln zu: Navigation, Suche

Shellscripte


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:
  • 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;

echo 
echo Screenshot saved as "${DIR}/${DATE}/${PREF}_${SCREEN}" 
echo 

# End of file




Zurück zu den Shellscripten
Zurück zur Grafik