• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] - Script für Bildschirmfotos

Yehudi

Guru
Nicht dass ich nicht weiß, wie man Bildschirmfotos macht, oder ich mich im Forum geirrt habe. Nein, die Art und Weise Bildschirmfotos am Linuxrechner zu machen finde ich doch sehr aufwendig. Beim Mac drücke ich ein Tastaturkomando, und kann damit ein Screenshot machen, der auf dem Desktop abgelegt wird. Nun denke ich mir, was Unix kann, kann auch Linux. Meine Idee wäre:
1. Auf einer Funktionstaste oder einer Tastaturkombination liegt ein Script.
2. dort die Funktion von strg und Druck auslösen
3. das ganze wird im Hintergrund in einem Grafikprogramm in eine Grafik eingefügt
4. Es wird in einem Ordner meiner Wahl angelegt und erhält den Namen "Bild01" bzw. die nächst höhere Zahl immer.

Ich stelle mir das ganze jetzt nur mal theoretisch vor. Gibt es vielleicht so ein Script? Hatte gerade schon mal gegooglet, aber so das wahre war da nicht bei.
 

abgdf

Guru
Vielleicht mit ksnapshot über dcop:

http://docs.kde.org/development/de/kdegraphics/ksnapshot/dcop-snapshot.html

?

Gruß
 
Ich hab vor längerer Zeit mal so etwas geschrieben, ist kein Meisterwerk, aber erfüllt seinen Zweck: :wink:
Code:
#!/bin/bash
DATE=`date "+%Y-%m-%d"`;
TIME=`date "+%H-%M"`;
DIR="/speicher/pfad";
EXT="jpg";

if /usr/bin/test ! -d "$DIR/$DATE"; then mkdir "$DIR/$DATE"; fi
if `/usr/bin/test -e "$DIR/$DATE/$TIME.$EXT"`;
 then
  x=0;
  while `/usr/bin/test -e "$DIR/$DATE/$TIME-$x.$EXT"`;
   do x=`expr $x + 1`;
    done;
  import -window root "$DIR/$DATE/$TIME-$x.$EXT";
 else import -window root "$DIR/$DATE/$TIME.$EXT";
fi;
 
OP
Y

Yehudi

Guru
*Freu*
Ich habe mir beide Sachen zu Gemüte geführt. Danke Euch beiden.
@b3ll3roph0n: Was heißt kein Meisterwerk, das hat gleich meine verspielte Kinderseele erfreut.
:D :D :D
 

abgdf

Guru
Äh, unter KDE in kcontrol sind unter Regionaleinstellungen/Tastenkürzel/Allgemeine Tastenkürzel offenbar bereits Alt+Druck und Strg+Druck für ein Bildschirmfoto definiert. Das wird offenbar in die Zwischenablage gelegt.

Aber das Skript oben ist natürlich besser.

Wollte ansonsten die Tasten schon von Hand abfragen (Code im Netz gefunden):

Code:
#!/bin/bash
read -s -n1 -p "Hit a key " keypress
echo; echo "Keypress was "\"$keypress\""."

Gibt bei Tasten wie "Druck" aber Probleme.

Man müßte die Events direkt abfangen wie bei "xev" ...

Viele Grüße
 

müchi

Member
Unter Windows habe ich immer FScapture genommen. Dort konnte man Kürzel vergeben, z.B. "druck" für den gesamten Bildschirm, "alt+druck" für das aktuelle Fenster und "shift+druck" öffnet ein Menü, mit dem man einen selbst wählbaren rechteckigen Bereich scannen konnte.

Gibts solche Software unter Linux?
 

müchi

Member
Danke, ich kenne ksnapshot.

Aber damit kann man entweder ein Fenster oder den ganzen Schirm machen.

Ich möchte aber z.B. nur 5 cm mal 1 cm knipsen. Außerdem fände ich benutzerdefinierte Dateinamen gut, bei ksnapshot muss man dann umbennen, bei FScapture ist wahlweise im Dateinamen direkt Datum und Uhrzeit drin.
 

whois

Ultimate Guru
Hi

Du hast aber kein Windows sondern Linux.
Schneide den Ausschnitt mit Gimp aus und gut ist.

cu
 

müchi

Member
b3ll3roph0n schrieb:
=> [Script] Screenshots WM / DM / Konsole

<Werbung>Kann alle drei Modi (Screen, Fenster, Ausschnitt) und noch etwas mehr ...</Werbung>

Hey, das Skript kann ja genau das gleiche wie FSCapture. :-D

Aber wie passe ich denn den Pfad an, dass er nach ~/Incoming die Datei ablegt, welche dann ~/Incoming/Screenshot_Datum_uhrzeit.jpg heißt?!

Mit
Code:
DIR=~/Incoming;
oder
Code:
DIR="~/Incoming";
gings nicht...

Diese hier beschriebenen Druckersymbole im Fenster brauch ich nicht, denn ich wollte das Skript per Shortcut meiner Multimediatastatur starten. :)

EDIT:

Habs gefunden, es darf kein "~" drin sein, sondern der ausgeschriebene Name. Hab nun auch "${DATE}/${PREF}_" entfernt. :)

Nur: Er legt immer noch einen nun leeren Ordner mit dem akt. Tag an, das brauche ich ja nicht mehr, geht das hier:

Code:
#[ ! -d "${DIR}/${DATE}" ] && (mkdir -p "${DIR}/${DATE}" || (echo -e "Cannot create directory ${DIR}/${DATE}!\nExiting ..."; exit 1;));
?

Zudem habe ich Sekunden in den Dateinamen hinzugefügt, falls man mehrere Aufnahmen in einer Minute macht, da er sonst immer ersetzt.[/code]
 
müchi schrieb:
Diese hier beschriebenen Druckersymbole im Fenster brauch ich nicht, denn ich wollte das Skript per Shortcut meiner Multimediatastatur starten. :)
Dafür ist das Script auch gedacht ... - die Symbole in der Titelleiste waren eine Schnapsidee von latinoxxx .... :roll:

müchi schrieb:
Nur: Er legt immer noch einen nun leeren Ordner mit dem akt. Tag an, das brauche ich ja nicht mehr, geht das hier:

Code:
#[ ! -d "${DIR}/${DATE}" ] && (mkdir -p "${DIR}/${DATE}" || (echo -e "Cannot create directory ${DIR}/${DATE}!\nExiting ..."; exit 1;));
?
In dieser Zeile wir der gesamte Screenshot-Ordner angelegt, falls er nicht existiert.
Wenn du keine Unterordner mit dem Datum haben willst, dann entferne einfach
Code:
/${DATE}
aus allen Pfaden.
O.g. Zeile sollte also erhalten bleiben um zu prüfen ob der Zielordner existiert.

müchi schrieb:
Zudem habe ich Sekunden in den Dateinamen hinzugefügt, falls man mehrere Aufnahmen in einer Minute macht, da er sonst immer ersetzt.
Unnötig.
Das Script prüft, ob schon eine Datei mit dem Namen (z.B. wm_20070620_2032.png) existiert und legt in diesem Fall die Datei Dateiname-n.Endung (z.B. wm_20070620_2032-0.png) an.

müchi schrieb:
Aber wie passe ich denn den Pfad an, dass er nach ~/Incoming die Datei ablegt, welche dann ~/Incoming/Screenshot_Datum_uhrzeit.jpg heißt?!
Statt der Tilde ('~') kannst du auch ${HOME} benutzen.

müchi schrieb:
Habs gefunden, es darf kein "~" drin sein, sondern der ausgeschriebene Name. Hab nun auch "${DATE}/${PREF}_" entfernt. :)
Nur der vollständigkeit halber:
${PREF}_ dient zur Unterscheidung zwischen Screenshots Konsole, Displaymanager und Windowmanager.
 

müchi

Member
also sollte man

Code:
[ ! -d "${DIR}/${DATE}" ] && (mkdir -p "${DIR}/${DATE}" || (echo -e "Cannot create directory ${DIR}/${DATE}!\nExiting ..."; exit 1;));

drin lassen, auch wenn man keine Ordner braucht?!

Bei meinen Versuchen eben erstellte er dann einen Ordner mit Datum, welcher dann leer war.

Das
hab ich schon entfernt.
 
müchi schrieb:
also sollte man

Code:
[ ! -d "${DIR}/${DATE}" ] && (mkdir -p "${DIR}/${DATE}" || (echo -e "Cannot create directory ${DIR}/${DATE}!\nExiting ..."; exit 1;));

drin lassen, auch wenn man keine Ordner braucht?!
Ja (abgesehen natürlich von /${DATE}).
Einen Ordner brauchst du doch in jedem Fall - den Basisordner (in deinem Fall ~/Incoming).
Damit ist sichergestellt, dass der Ordner existiert (falls nicht wird er angelegt) oder andernfalls das Script beendet wird, bevor irgendetwas gespeichert wird (bzw. versucht wird zu speichern).

Existiert der Ordner nicht, wenn der Screenshot gespeichert wird, bricht import mit einem Fehler ab (fehlende Berechtigungen) oder die Datei landet in einem falschen (übergeordneten) Ordner.
 

müchi

Member
Hast Recht, das ist eine gute Idee...

Z.B. für den Fall, das man neu installiert hat und der Ordner ist noch nicht vorhanden (obwohl man ja /home extra hat als Partition).

Oder wenn man es für einen anderen Benutzer verwendet, so dass dieser dann autom. ein "Incoming" bekommt. :)
 
Oben