Page 3 sur 4

Re: Lua: lancer une application du pi ???

Publié : 28 févr. 2017, 19:52
par Phebus06
erreur de frappe, évidement il y a la parenthèse à la fin lol...

Code : Tout sélectionner

os.execute("su - pi -c 'xdg-open http://www.wiiz.tv/regarder_nrj12.php'")

Re: Lua: lancer une application du pi ???

Publié : 01 mars 2017, 09:58
par aleph0
Bon bon bon... j'ai fais quelques essais de mon côté, et je crois avoir compris ce qu'il se passe ;)

J'ai pu identifier au moins 2 causes pour que ton xdg-open n'aboutisse pas :
1/ C'est une application graphique. Pour qu'une application graphique se lance depuis une ligne de commande, il faut qu'une variable d'environnement appelée DISPLAY lui indique sur quel écran s'afficher. En effet, XWindows est un protocole graphique réseau, et une fenêtre peut d'afficher sur un autre ordi que celui où s'exécute le programme. J'ai fais des tests ici et je me suis rendu compte que la variable DISPLAY n'est pas définie dans l'environnement lancé par os.execute, même après le "su - " que je t'avais fais essayer plus tôt :

Script utilisé pour les tests. le os.capture permet de récupérer dans lua ce que réponds une commande linux :

Code : Tout sélectionner

function os.capture(cmd, raw)
    local f = assert(io.popen(cmd, 'r'))
    local s = assert(f:read('*a'))
    f:close()
    if raw then return s end
    s = string.gsub(s, '^%s+', '')
    s = string.gsub(s, '%s+$', '')
    s = string.gsub(s, '[\n\r]+', ' ')
    return s
end

commandArray = {}

if (devicechanged["test script"]) then
    print("test script exécuté")
    result=os.capture("su - domoticz -c 'echo $DISPLAY'")
    print(result)
end
return commandArray
retourne :

Code : Tout sélectionner

2017-03-01 09:17:18.734 User: maison initiated a switch command (202/test script/On)
2017-03-01 09:17:18.789 LUA: test script exécuté
2017-03-01 09:17:23.848 LUA:
2017-03-01 09:17:18.735 (Internes) Light/Switch (test script)
et du coup, je rien ne se passe si je demande une application graphique au lieu du 'echo $DISPLAY' dans le os.capture
alors que si je définie la variable DISPLAY avant, ça marche :

Code : Tout sélectionner

os.execute("export DISPLAY=192.168.1.10:0; lxterminal &")
ça m'ouvre bien un lxterminal sur mon ordi linux dont l'IP est 192.168.1.10

Essaye donc comme ça :

Code : Tout sélectionner

os.execute("export DISPLAY=:0; xdg-open blabla &")
ou la totale

Code : Tout sélectionner

os.execute("su - pi -c 'export DISPLAY=:0; xdg-open blabla &'")
la syntaxe :0 désignant l'écran local de l'ordi sur lequel s'exécute la commande (= le pi). Tu noteras aussi le & final, pour dire au os.execute de ne pas attendre la fin de la commande linux, sinon domoticz va râler que ton script met plus de 10s à se terminer

2/ xdg-open permet d'ouvrir un url avec le logiciel par défaut ; il se peut donc que le logiciel par défaut ne soit pas défini dans l'environnement lancé par os.execute. Dans ce cas, remplace le directement par le nom de ton browser plutôt que de demander au système quel est le browser par defaut

Note: il se peut qu'il y ait d'autres écueils liés aux autorisations :
- pour l'utilisateur root d'exécuter des programmes graphiques : certaines distributions l'interdisent. Dans mes tests, domoticz ne tourne pas en root
- pour un utilisateur (root) d'exécuter des programmes graphiques sur la session de quelqu'un d'autre (pi)

Enfin, juste une remarque sur ce que tu essayes de faire : J'ai cru comprendre que tu voulais regarder la TV en lançant un browser sur le pi dont tu déportes ensuite l'affichage par vnc. Je suis pas sûr que tu obtiennes de bonnes performances de cette façon. L'expérience que j'ai de vnc, c'est qu'il est ok pour de la bureautique, j'ai jamais essayé des vidéos de cette façon. Ce serait sûrement plus efficace (mais plus compliqué) que du demande au pi de demander à ton ordi local d'ouvrir l'url de la video

Re: Lua: lancer une application du pi ???

Publié : 01 mars 2017, 12:29
par Phebus06
Merci à toi aleph0 du temps que tu passes à essayer de résoudre mon problème.
Perso j'ai passé des heures de recherche sur le net mais je ne comprend pas grand chose et je lance des essais bien souvent au hasard.
Donc des ce soir j'essaie tout ça.

Par contre non je ne cherche pas à avoir une web TV et encore moins à la déporter sur mon pc par VLC car oui tu as raison ça rame grave, mais plutôt à pouvoir prendre complètement la main sur mon pi en passant par domoticz et des scripts Lua qui vont lancer des Launcher via un terminal. Pour par exemple pouvoir faire parler mon pi en lançant une phrase sur google translate, ou lancer un MP3 ou une web radio, ou rebooter mon pi, ou encore lancer un logiciel à distance ; enfin pouvoir faire ce que je veux en passant par des Launcher que j'ai moi même programmés. Cela m'ouvrira un champ des possible en passant par le terminal donc proprement.

Voila tu sais tout, et je suis sur que cela servira à d'autre qui comme moi on ce magnifique jouet qu'est le Raspberry Pi 3 (que je n'ai que depuis noël...merci père noël ;-) ).

Re: Lua: lancer une application du pi ???

Publié : 01 mars 2017, 18:38
par Phebus06
Ouha alors la bravo...
Tout ce que tu as dit fonctionne, j'ai donc mis la ligne :

Code : Tout sélectionner

os.execute("su - pi -c 'export DISPLAY=:0; xdg-open http://www.wiiz.tv/regarder_nrj12.php &'")
et magique la page internet s'ouvre en 1 seconde.

Bon maintenant que tu sais lancer une page web en directe, la finalité est d'ouvrir mon launcher avec ce que je veux dedans à exécuter donc on va continuer avec la même page web.

Donc cette fois j'ai tapé :

Code : Tout sélectionner

os.execute("su - pi -c 'export DISPLAY=:0; xdg-open /home/pi/domoticz/www/monitor/Diriger_pi/WebTV_NRJ12 &'")
et au lieu d'exécuter le launcher qui doit lancer la page web, voici ce qu'il se passe, il m'inscrit une partie de la ligne dans le programme du launcher Lol...
Terminal_5.png
Terminal_5.png (63.46 Kio) Consulté 7854 fois
Je pense qu'on y est presque...je suis super excité car si on y arrive, je pourrai faire de domoticz et avec la custom page des trucs super sympa ;-)
je compte encore sur toi aleph0 pour me dénouer ça et je te dis encore mille merci de ton aide et de partager ton temps et ton savoir :-)

Re: Lua: lancer une application du pi ???

Publié : 03 mars 2017, 11:44
par Phebus06
Bon bin j'essaie plein de truc mais rien ne fonctionne...
Help

Re: Lua: lancer une application du pi ???

Publié : 03 mars 2017, 13:08
par aleph0
Je ne comprends pas ce que tu cherches à faire.

C'est quoi que tu appelles le launcher ? Il y a quoi dans ce fichier /home/pi/domoticz/www/monitor/Diriger_pi/WebTV_NRJ12 ? Je n'ai pas de pi et je ne sais pas quelle distribution tu fais tourner dessus : A ton tour de détailler un peu plus ;)

Re: Lua: lancer une application du pi ???

Publié : 03 mars 2017, 14:05
par Ghislain
aleph0 a écrit :Je ne comprends pas ce que tu cherches à faire.

C'est quoi que tu appelles le launcher ? Il y a quoi dans ce fichier /home/pi/domoticz/www/monitor/Diriger_pi/WebTV_NRJ12 ? Je n'ai pas de pi et je ne sais pas quelle distribution tu fais tourner dessus : A ton tour de détailler un peu plus ;)
Le fichier est au dessus :D

Pour le reboot un simple PushButton avec la commande "sudo reboot" devrait suffire et je pense que pour la WebRadio ceci devrait t'aider ou te donner des idées ;) mais pas besoin pour ces choses d'allez chercher compliqué

Re: Lua: lancer une application du pi ???

Publié : 03 mars 2017, 14:49
par aleph0
Ah ! Donc tu cherche à exécuter un .desktop, c'est ça ? C'est quoi ton gestionnaire de bureau ?

Re: Lua: lancer une application du pi ???

Publié : 03 mars 2017, 17:55
par Phebus06
c'est Raspbian Jessie Pixel...

Re: Lua: lancer une application du pi ???

Publié : 03 mars 2017, 18:09
par Phebus06
Merci pour le lien pour les web radios, mais c'était un exemple car j'y suis arrivé en passant par Kodi, encore bien plus simple avec juste une ligne en json à mettre dans l'action on d'un interrupteur virtuel lol...
Mon but est de pouvoir lancer un .desktop car si j'y arrive, toutes les actions que l'on peut demander au Pi en passant par un Terminal pourront se lancer directement par Domoticz très simplement. Un autre exemple, pouvoir éteindre et relancer Kodi (que je ne veux pas mettre en ouverture automatique à chaque démarrage du Pi) à distance grâce à un seul interrupteur virtuel dans Domoticz pour pouvoir l'intégrer dans un ensemble d'action à réaliser en même temps comme etc...