#1 Le 14/12/2007, à 13:03
- neurtixon
[RESOLU]script php pour lancer une application en graphique
Je cherche depuis quelque temps comment réaliser ce que j'ai en tete mais je ne trouve toujours pas de solution et je commence a me dire que c'est impossible (mais impossible n'est pas informatique donc ...)
Voila mon envie : installer apache sur mon pc de bureau et a partir d'un liens sur une page .php, lancer vlc (ou une autre programme multimedia) en graphique ...!! Je m'explique, c'est un peut un truc de feniant mais pourait etre très utile : je veux pouvoir utiliser un telephone portable connecté en wifi au réseau de chez moi pour, a distance lancer des application sur mon pc de bureau, pour résumer : une interface web heberger en local qui transforme mon telephone en telecomande pour mon pc en passant par une page php.
Si vous avez donc une idée pour qu'un serveur apache lance une application en graphique sur la session lancée, je suis preneur.
Dernière modification par neurtixon (Le 17/12/2007, à 13:04)
google chrome ... ouai et sinon on attend la version 1.0
au lieu de nous faire tester la version 0.2
parce que la beta 0.2 est pas tres aboutis quand meme
Hors ligne
#2 Le 14/12/2007, à 13:22
- bwana147
Re : [RESOLU]script php pour lancer une application en graphique
Impossible, peut-être pas, mais tordu, ça c'est sûr.
Apache tourne en tant que serveur, en arrière plan, donc sans connaissance du serveur graphique. Il faudrait donc que Apache ait dans son environnement la variable DISPLAY correctement renseignée. Malheureusement, la session graphique courante appartient à l'utilisateur actuellement connecté, pas à www-data.
Si je comprends bien, le téléphone aurait un client web, et c'est un cliquant depuis le téléphone sur les liens d'une page web que tu veux lancer des commandes.
Je pense que le plus simple est alors d'avoir ta propre instance de serveur http, lancé depuis le compte de l'utilisateur (pour bénéficier de sa session graphique), et sur un port non standard (port < 1024 étant réservé à root). Ensuite, il doit bien y avoir en PHP une fonction du genre du system() qu'on trouve en Perl.
Hors ligne
#3 Le 14/12/2007, à 13:23
- krocket
Re : [RESOLU]script php pour lancer une application en graphique
<?php
exec ("/usr/bin/vlc &");
?>
devrait fonctionner non ?
Dernière modification par krocket (Le 14/12/2007, à 13:25)
De plusieurs programmes ou systèmes d'exploitation en occurrence, le plus performant n'est jamais retenu comme standard !
Bobby sort de là !
Hors ligne
#4 Le 14/12/2007, à 13:39
- bwana147
Re : [RESOLU]script php pour lancer une application en graphique
<?php exec ("/usr/bin/vlc &"); ?>
devrait fonctionner non ?
Ben non, parce qu'apache n'a pas le DISPLAY ni les droits nécessaires à l'accès à la session graphique de l'utilisateur.
Hors ligne
#5 Le 14/12/2007, à 13:41
- Alain.g
Re : [RESOLU]script php pour lancer une application en graphique
Salut
Je m'étais heurté à ce problème avec CRON et la solution est donnée dans la documentation.
Je la cite :
Pour exécuter des applications graphiques, il faut tout d'abord être sûr que l'usager root à accès au display si jamais le controle d'accès est actif (cf. xhost), par exemple en exécutant (soi-même, ou en rajoutant la ligne dans un script de démarrage comme rc.local) :
xhost + local:root
Puis il faut préciser quel display utiliser lors de l'exécution de la commande à cron en ajoutant DISPLAY=nom_du_display au début de la commande à exécuter ; par exemple :
0 8 * * * DISPLAY=:0.0 totem "mon_fichier_son.mp3"
Une fois que c'est OK avec xhost, il faudrait mettre dans le script php :
<?php exec('DISPLAY=:0.0 vlc'); ?>
Dernière modification par Alain.g (Le 14/12/2007, à 13:45)
Xubuntu Karmic !
Hors ligne
#6 Le 14/12/2007, à 13:45
- bwana147
Re : [RESOLU]script php pour lancer une application en graphique
0 8 * * * DISPLAY=:0.0 totem "mon_fichier_son.mp3"
Si c'était juste pour se faire réveiller à huit heures, pas besoin d'un lecteur mp3 avec interface graphique... mpg321 faisait l'affaire :-)
Hors ligne
#7 Le 14/12/2007, à 13:54
- Alain.g
Re : [RESOLU]script php pour lancer une application en graphique
Je suppose que quand on a la tête dans le c.., c'est plus facile d'appuyer sur un bouton stop que d'arrêter mpg321 tournant en arrière-plan
Mais bon, c'est juste pour l'exemple de toute façon
Dernière modification par Alain.g (Le 14/12/2007, à 13:56)
Xubuntu Karmic !
Hors ligne
#8 Le 14/12/2007, à 15:27
- neurtixon
Re : [RESOLU]script php pour lancer une application en graphique
c'est plus pour commender vlc a distence pour mater des films sur un retroprojecteur sans devoir me deplacer jusqu'au pc. (je vous avez dis que c'etais pour les flemard)
J'ai peut etre trouvé une solution mais qui ne peux marcher que avec linux (pas de multi-archi avec windows)
c'est une solution qui marche en ssh donc pas de reson que sa ne marche pas losque s'est executer par apache :
- 1 creer une variable session "setenv DISPLAY=1.0"
- 2 lancer vlc "~\vlc &"
- 3 changer le display du serveur x "x 1.0" (je croie que c'est comme sa)
le tous avec la fonction php exec().
avec cette solution pas de probleme de droit a savoir si apache a les droit sur le display 0.0 MAIS se qui me pose probleme c'est que se n'est pas portable sur d'autre OS.
Ce n'est pas dans mon abitude de vouloir faire du multi archi linux windows mais la j'ai envie de trouver ... je suis curieux
google chrome ... ouai et sinon on attend la version 1.0
au lieu de nous faire tester la version 0.2
parce que la beta 0.2 est pas tres aboutis quand meme
Hors ligne
#9 Le 17/12/2007, à 13:03
- neurtixon
Re : [RESOLU]script php pour lancer une application en graphique
bon je suppose que sa ne vous interes pas parceque c'est du windows mais tanpis je vous le dis quand meme parce que c'etait une de mes questions et que j'ai trouvé la solution sans votre aide.
pour lancer une application en graphique sous windows il faut connaitre la session lancée et faire executer a apache :
runas /noprofil /user:nom_user [commande a executer]
nom_user : le nom d'utilisateur de la session lancée (cette session doit avoir un mot de pass)
cette commande fonctionne en shell mais pas executer par apache a cause du password qui doit forcement etre tape au clavier. Il faut donc installer un petit .exe qui s'appelle sanur.exe et donc taper dans le script php
exec(runas /noprofil /nom_user vlc | sanur password);
Pour conclure ce script php doit faire la difference entre l'os sur lequel il s'execute et executer les commandes qui y coresponde.
google chrome ... ouai et sinon on attend la version 1.0
au lieu de nous faire tester la version 0.2
parce que la beta 0.2 est pas tres aboutis quand meme
Hors ligne
#10 Le 15/04/2008, à 12:59
- peejy
Re : [RESOLU]script php pour lancer une application en graphique
- 1 creer une variable session "setenv DISPLAY=1.0"
- 2 lancer vlc "~\vlc &"
- 3 changer le display du serveur x "x 1.0" (je croie que c'est comme sa)
Merci neurtixon, ça marche!
Plus concrètement avec le code php qui suit en incluant la syntaxe qui va bien pour la variable d'environnement et la commande X
<?php
$command = "set env DISPLAY=:1.0 && xeyes && X :1.0" ;
exec($command);
?>
#11 Le 16/07/2011, à 17:39
- yeb
Re : [RESOLU]script php pour lancer une application en graphique
Bonjour, je déterre ce sujet pour poser une question :
est-il possible de faire en sorte que les applications exécutées le soient en tant que "monuser" et pas en tant que "www-data" ?
Par exemple, j'arrive à exécuter gedit mais je n'ai pas accès à mes greffons, préférences, etc. (ce qui est logique).
D'autres appli refusent carrément de démarrer (libreoffice p.e.).
Edit : après moultes recherches, j'ai trouvé : pour lancer par exemple gedit avec "monuser"
xhost + local:root
sudo VISUAL=/usr/bin/gedit visudo pour ouvrir /etc/sudoers ;
dans ce fichier, la ligne après : root ALL=(ALL:ALL) ALL
mettre : www-data ALL=(monuser) NOPASSWD: gedit
redémarrer sudo :
/etc/init.d/sudo restart
faire un lien dans la page principale vers un fichier script_execution.php qui contient essentiellement la commande :
system('export DISPLAY=:0.0 ; sudo -u monuser gedit ;');
Dernière modification par yeb (Le 18/07/2011, à 20:40)
Hors ligne