PHP Executing Bash Script renvoyant uniquement des captures d’écran noires

Vous êtes probablement familier avec les services de vignettes de sites Web comme websnapr.com, par exemple

Je suis en train de travailler sur quelque chose comme ça avec des objectives différents, donc, de façon évidente, j’avais besoin d’un serveur qui lancerait un navigateur Web avec une URL et prendrait une capture d’écran pour passer à la suivante.

C’est le script bash que j’exécute par bash script.sh ‘http://google.nl’ /var/www/images/google.png

#! /bin/bash export DISPLAY=":4" killall firefox-bin /usr/bin/firefox --display :4 "$1" & /bin/sleep 20 xte "key F11" /bin/sleep 3 /usr/bin/import -window root -display :4 "$2" /bin/sleep 3 killall firefox-bin 

et j’ai un Xvfb en cours d’exécution par ‘Xvfb: 4-screen 0 1024x768x24 &’

Le script fonctionne correctement lors de l’exécution via ssh ou simplement sur le terminal de l’utilisateur standard, mais lorsque j’essaie de l’exécuter via php comme:

 exec('bash /var/scripts/test.sh "http://google.nl" /var/www/char.png'); 

tout ce que j’obtiens est une capture d’écran noire de 1024×768, en regardant dans les journaux d’erreur d’Apache, je vois qu’il ne peut pas tuer Firefox quand il est exécuté sous l’utilisateur principal (permission non autorisée) mais même quand il est fermé un (ne pas donner d’erreur).

Une idée de ce qui ne va pas? Idéalement, comme cela fonctionne sur mon utilisateur principal, il faudrait simplement pouvoir l’exécuter en tant qu’utilisateur à la place de l’utilisateur de www-data, la sécurité n’est pas un problème car il n’y aura pas de connexion directe avec ce serveur (uniquement via un autre serveur). le même réseau).

Il n’est pas surprenant qu’une application exécutée à partir d’Apache ne puisse plus accéder au X11. J’utiliserais xvfb + xvfb-run .

D’un autre côté, bien que jouer avec xte dans des cas extrêmes soit xte , c’est un peu piraté lorsque vous avez des solutions propres; Essayez des projets comme Cutycapt ou similaire.