Bonjour,
Je suis toujours sur ma problématique d’exécution distante (Cf : au-menu-php-shell-fbi-omxplayer-rpi-t43105.html). J’ai maintenant la possibilité d’exécuter fim (frame buffer image improved) à distance.
Je peux donc lire mes images à distance.
Petit problème, l’exécution de la même commande en distant et en local ne donne pas le même résultat :
La commande :
/usr/local/bin/fim -a -q -c 'sleep 4; q;' /media/Images/Ski.jpg
Objectif de la commande : Afficher l’image, attendre 4 secondes puis fermer proprement fim.
Utilisateur local de la commande : pi (utilisateur n’ayant pas les droits root sur le système)
Interpréteur de pi : /bin/bash
Utilisateur distant : www-data (je pense)
Interpréteur de www-data : /bin/bash
(je l’ai changé)
Droits sur le fichier php : 777
Droits sur le fichier script.sh : 777
Méthode d’exécution à distance :
Dans un navigateur je lance : 192.168.1.20/test.php
Test.php lance la commande : shell_exec("/var/www/script.sh");
script.sh lance la commande susnommé.
Problématique :
En local, je lance la commande et tout fonctionne.
En distant, je lance la commande, et au moment de quitter, l’image reste figé sur les 3/4 de l’écran, et je peux alors écrire dans mon shell sans soucis. Comme si fim n’avait pas été bien fermé.
Solutions tentés :
- Changement de l’interpréteur par défaut de www-data.
- Changement de la méthode de fermeture de fim (fim -a -q image.jpg + killall fim)
- Changement de la méthode de fermeture de fim(fim -a -q image.jpg + kill $(pgrep fim))
A chaque fois, la méthode de fermeture fonctionne en local mais plante en distant. - Exécution du php en local (php5-cgi test.php) depuis www-data et pi
Donc : Qu’est ce qui fait que la commande s’exécute parfaitement en local mais pas bien en distant ?
Début de réponse : La fermeture doit s’effectuer d’une certaine manière, l’utilisateur étant différent en local et en distant le framebuffer ne gère peut être pas bien cette fermeture…
Avez-vous des suggestions ?
Merci de m’avoir lu,
JayGr
Edit : 11:20 : 17-05-2013
En enlevant le q; tout se passe bien à distance.
C’est donc la fermeture de fim qui foire. A quoi fais alors appel la fermeture d’un logiciel ?
Edit : 11:27 : 17-05-2013
En essayant de l’exécuter en local et en fond de tâche, j’obtiens le même résultat qu’en distant.
Que dois-je en conclure ?
J’ai en fait l’impression que le framebuffer ne se vide pas…
Edit : 18:00 : 17-05-2013
Je me suis pencher sur autre chose aujourd’hui, mais je suis de très près le topic. Si vous avez la moindre idée dites le !
Il faut essayer !