Probleme mit Shellscript (Websitescreenshotmaschine)

nepda

Erfahrenes Mitglied
Hallo,

ich habe mal angefangen nach der Anleitung von Debian Administration.org auf meinem kleinen Debian-Keller-Server eine Screenshot "Maschine" zu erstellen... funktioniert erstaunlich gut!

Bisher habe ich das Shellscript immer über SSH und einem "normalen" Benutzerkonto aufgerufen... jetzt will ich das ganze natürlich per PHP aufrufen... (Auf dem Debian-Server ist XAMPP installiert mit der default Gruppe und Benutzer "www-data").

das Script:
Code:
#!/bin/bash
export DISPLAY=":1"
echo "oeffne Firefox";
/usr/bin/firefox --display :2 -new-tab "$1" > /dev/null 2> /dev/null &
/bin/sleep 20
echo "mache Screenshot";
/usr/bin/import -window root -display :2 "$2"
echo "schneide Bild zu";
/usr/bin/convert "$2" -crop 1024x597+0+110 -resize "$3"x"$3" "$2"
echo "fertig";
killall firefox-bin

und das PHP-Script:

PHP:
<?php
error_reporting(E_ALL);

echo passthru("/user/www/nepda/screenshot.sh http://google.de/ /user/www/nepda/screens/google.de.png 300");

?>

Das funktioniert leider nicht... ich habe inzwischen mittels chown und chmod relativ viele Rechte eingeräumt aber es funktioniert trotzdem nicht....

Irgendwelche Tipps, was ich machen kann?... vielen Dank!
 
import -window root root.jpeg

This will take a screen capture of your X session.

Warscheinlich wird es daran liegen das der webuser eben nicht in einer X Umgebung läuft. Und daher er nichts zum Capture`n hat. Ich denke es ist eher ein Linuxproblem das es eben auf der Console läuft.
 
Naja klingt ja einigermaßen logisch....
aber ich kann ja eine X Umgebung für den User und die Gruppe www-data starten (habe ich auch gemacht) und diese dann (am Anfang) per VNC anschauen.

Ich kann mir kaum vorstellen, das mein Vorhaben unmöglich ist. Ich geh mal davon aus, dass es irgendeine Hintertür gibt, mit der es möglich ist, ein Programm wie Firefox zu starten... (z.B. ImageMagick lässt sich ja auch aufrufen) wahrscheinlich ist das "nur" ein Rechte Problem...

Hat jemand Tipps welche Rechte ich wo einräumen muss, bzw. was ich machen muss damit das funktionieren kann? Danke!
 
Hat jemand Tipps welche Rechte ich wo einräumen muss, bzw. was ich machen muss damit das funktionieren kann? Danke!

Hallo,
ich habe etwas ähnliches gebastelt und mich dabei mit einer eher ungewöhnlichen Lösung beholfen:
Ich schicke eine Email an ein Benutzerkonto mit entsprechenden Rechten. Via procmail lasse ich dann einfach das Skript aufrufen, welches sich um den Screenshot kümmert.
Meine PHP-Anzeigekomponente schaut zunächst, ob der Screenshot schon da ist und liefert diesen oder eine entsprechende Ersatz-Grafik aus.
 
Hi,
das hört sich sehr interessant an, könntest du das bitte etwas genauer beschreiben... Wie funktioniert das zum Beispiel mit diesem procmail?
Das ich mit PHP vorher checkt ob schon ein Screenshot vorhanden ist und wie alt der ist und so weiter ist klar... war auch fest eingeplant ;)

Vielen Dank schonmal!
 
(Dass procmail ggf. zunächst installiert und eingerichtet werden muss, versteht sich sicher von selbst)

Meine Lösung arbeitet wie folgt:

1. das Screenshot-Script überprüft, ob der Screenshot bereits vorhanden und ausreichend frisch ist. Ist dies der Fall, liefert es diesen aus, wenn nicht erstellt es eine Job-Datei (nur ein Shell-Skript mit dem Aufruf des Capture-Shell-Scripts, um zu verhindern, dass ggf. andere Befehle aufgerufen werden.). Und sendet eine Email an eine bestimmte Adresse, z.Bsp. capture@localhost.localdomain und einer festgelegten Betreff-Zeile (in meinem Fall "RUNJOBS")
2. ich habe ein Shell-Script erstellt, welches diese Job-Dateien sucht und ausführt.
3. im der lokalen .procmail-Datei des Benutzerkontos mit den entsprechenden Rechten, ein X-System zu starten, habe ich folgendes Rezept eingetragen:
Code:
:0
* To:.*capture@localhost.localdomain
* Subject:.*RUNJOBS*
| pfad_zum_job_ausführ_script_aus_2.

Um zu verhindern, dass mehrere Jobs gleichzeitig ausgeführt werden, verwenden die Skripte einen Locking-Mechanismus, der sicherstellt, dass immer nur eine Instanz des Capture-Skripts läuft. Um sicherzugehen, dass die Screenshots auch erstellt werden, läuft parallel hierzu ein Cronjob, welcher das Skript aus 2. ab und an anstößt.

Man könnte das Verfahren auch vereinfachen, indem man in der Procmail-Datei direkt das Capture-Script aufruft und die Parameter in der Email mitsendet.(Die Email wird an das aufgerufenen Script über stdin bereitgestellt). Mir ging es jedoch in erster Linie um die Sicherheit.
 
Zurück