Programm via PHP Befehl starten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Profis,
    Ich versuche nun schon ettliche Stunden Matchbox-Keyboard mit einem PHP Befehl zu starten.
    Es passiert aber absolut nichts!!!

    Was ich schon gemacht/versucht habe:
    1. (Nur zum testen)
    $output = shell_exec('ps -a');
    echo $output;

    Es funktioniert!!! Meine Aktuellen Prozesse werden im Browser Angezeigt.

    2. shell_exec('matchbox-keyboard');
    3. exec('matchbox-keyboard');
    4. system('matchbox-keyboard');
    5. Ich habe mir die matchbox-keyboard datei aus dem /usr Verzeichnis kopiert und in mein /var/www Verzeichnis eingefügt.
    6. Wieder Punkt 2,3,4 Wiederholt mit: ......('/var/www/matchbox-keyboard');
    7. Die Rechte so angepasst dass das /var Verzeichnis dem www-data Benutzer gehört und voller Zugriff besteht.

    Es funktioniert aber einfach nicht.
    Bitte um Hilfe.
    Vielen Dank schon im Vorraus.

  • Mein Webbrowser (Iceweasel) läuft lokal auf dem Pi.
    Die Tastatur soll einfach auf dem Pi starten und dann zusätzlich zu meinem Webbrowser laufen.
    Ich hoffe das ist das was du wissen wolltest.

    PS: Wenn ich in der Konsole "Matchbox-keyboard" eingebe poppt die Tastatur auf und auch mit Doppelklick auf die Datei kann man die Tastatur starten. Schließe also mal aus das es an der Tastatur selber liegt.

  • versuch mal :

    Code
    exec('su pi display=":0" Matchbox-keyboard')


    Die Syntax ist dahingeschmiert, muß evtl angepasst werden.

    Damit wird das Keyboard als User PI auf dem Display 0 gestartet.
    Nur exec('Matchbox-keyboard') funktioniert nicht da der User www-data keine aktives Display hat.
    Schau mal in die Log's, da müsste auch eine Fehlermeldung stehen.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Sorry, bin noch recht frisch mit Linux usw.
    Wüsste jetzt nicht was ich an dem Code von dir noch anpassen sollte...
    Habs mal so versucht wie du es gesagt hast. Ohne Erfolg.
    Wie kann ich denn die Log´s anschauen?

  • Zitat

    Sorry, bin noch recht frisch mit Linux usw.


    Gut... ist so .... wird sich ändern...

    Der Desktop gehört dem User Pi
    Der Browser gehört dem User Pi
    Der Webserver dem User www-data
    Die Tastatur wird von www-data gestartet, soll ihre Daten aber bei Pi abliefern.
    No. So nicht. Da gibts keinen sauberen Weg.
    (zumindest mir nicht bekannt)

    Warum?
    Webserver und Browser liegen bei dir zufällig auf dem gleichen Rechner.
    Das ist in der Inernetwelt so selten, daß man es einen Sonderfall nennen kann.


    Eine mögliche Variante, um einen solchen Sonderfall abzuhandeln, wäre:
    Beim Start des Dektops wird ein Prozess mit gestartet, welcher an irgendwelchen Netzwerkports horcht. Dieser Prozess darf ruhig ein übliches Protokoll verwenden.
    Dieser Prozess darf in PHP (oder in einer beliebigen anderen Sprache) geschrieben sein.
    Die neueren PHP Versionen bringen einen rudimentären Webserver mit.

    Z.B. könnte der Prozess Zugriffe dieser Art (REST) verstehen:
    http://localhost:8080\keyboard\start
    http://localhost:8080\keyboard\stop
    http://localhost:8080\keyboard\status

    Aufrufe aus PHP können dann so aussehen:
    [code=php]$rueckmeldung = file_get_contents("http://localhost:8080\keyboard\start");[/php]


    Damit gehört die Tastatur dem pi und alles ist gut.
    Keine Klimmzügen mit Display und Rechten.

    spruch.png

    Einmal editiert, zuletzt von combie (21. August 2014 um 10:20)

  • Ich versuch das mal mit meinen Worten zu wiederholen:
    Einen Prozess beim Start des Pi´s mit starten. Dieser schaut die ganze Zeit was z.B. in dem Port 8080 drin steht.
    Sollte z.B. "\keyboard\start" drin stehen wird das Keyboard gestartet.
    Was ich in den Port 8080 rein schreibe bestimme ich dann mit meiner PHP Seite.
    Falls ich das mal so etwa richtig verstanden habe OK.....
    Das ganze aber umzusetzen ist noch mal was anderes (Zumindest für mich).

    Wäre es nicht einfacher wenn ich den Desktop und den Browser auch dem User www-Data zuordnen würde?
    Oder geht das gar nicht?

  • OK, war dahingeschmiert.
    versuch mal folgendes :

    Code
    exec('su -s /bin/bash -c "hier derpfad zu deinem keyboard" pi')

    Ich habe grade keinen Linux Rechner mit Desktop zur Hand um das zu testen.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Folgendes hab ich versucht:
    1. Der Befehl mit meiner kopierten Datei.

    Code
    exec('su -s /bin/bash -c "/var/www/matchbox-keyboard" pi');

    2. Der Befehl mit der Originaldatei.

    Code
    exec('su -s /bin/bash -c "/usr/bin/matchbox-keyboard" pi');

    Hat leider beides nicht funktioniert.

    Kotz mich grad schon n bisschen an... Hab jetzt mehrere Wochen in ein Projekt investiert, immer wieder Probleme gehabt aber alles irgendwie gelöst bekommen. Der finale Schritt ist jetzt noch die Tastatur. Dann wär ich komplett fertig. :wallbash:

    Folgendes hab ich versucht:
    1. Der Befehl mit meiner kopierten Datei.

    Code
    exec('su -s /bin/bash -c "/var/www/matchbox-keyboard" pi');

    2. Der Befehl mit der Originaldatei.

    Code
    exec('su -s /bin/bash -c "/usr/bin/matchbox-keyboard" pi');

    Hat leider beides nicht funktioniert.

    Kotz mich grad schon n bisschen an... Hab jetzt mehrere Wochen in ein Projekt investiert, immer wieder Probleme gehabt aber alles irgendwie gelöst bekommen. Der finale Schritt ist jetzt noch die Tastatur. Dann wär ich komplett fertig. :wallbash:

    Einmal editiert, zuletzt von Stefan0911 (21. August 2014 um 12:06)

  • Pff, ich sitze auf der Arbeit und kann nix testen.
    Also weiter Raten.
    Funktioniert es denn wenn du ein Script anlegst

    Bash
    #!/bin/bash
    /usr/bin/matchbox-keyboard

    Das ganze dann auf der Konsole per

    Code
    sudo scriptname.sh


    aufrufst ?

    Dann sollte ein

    Code
    exec("sudo scriptname.sh");


    reichen :)

    Von hinten mit der Faust durchs Auge :)

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    Einmal editiert, zuletzt von Der_Imperator (21. August 2014 um 13:10)

  • Dann mach dir keinen Stress und schau daheim nach :cool:
    Ich werde mich in der Zeit mal damit beschäftigen was ein Script ist usw.
    Kann nämlich mit deiner Anleitung so recht wenig anfangen. Sorry..... noob!!!

  • Funktioniert es denn wenn du ein Script anlegst
    Code: Alles markieren
    #!/bin/bash
    /usr/bin/matchbox-keyboard

    Das ganze dann auf der Konsole per
    Code: Alles markieren
    sudo scriptname.sh
    aufrufst ?

    Dann sollte ein
    Code: Alles markieren
    exec("sudo scriptname.sh");

    Also, habs einfach mal versucht...
    Ich hab ein Script namens "Neu.sh" einfach mit rechtsklick auf den Desktop, Neu, Datei.
    Erstellt. darin steht jetzt:

    Bash
    #!/bin/bash
    /usr/bin/matchbox-keyboard

    Mein "Neu.sh" habe ich mir in den Ordner /usr/bin kopiert.

    Wenn ich jetzt im Terminal

    Code
    sudo Neu.sh

    eingebe kommt die Meldung:
    "command not found"

    Gebe ich

    Code
    type Neu.sh

    wird die Datei gefunden!!!

  • So.... Danke schonmal.
    Bin jetzt n Stück weiter.
    Hab jetzt ein Script angelegt: /usr/bin/Neu2.sh
    Mit dem Inhalt:

    Bash
    #!/bin/bash
    /usr/bin/matchbox-keyboard


    Wenn ich jetzt im Terminal "Neu2.sh" eingebe startet mein Keyboard!!!
    Gebe ich: "sudo Neu2.sh" ein, kommt die Fehlermeldung: Invalid MIT-MAGIC-COOKIE-1 key

    In meiner PHP Datei hab ich jetzt schon

    Code
    exec('sudo Neu2.sh');


    und

    Code
    exec('Neu2.sh');


    und

    Code
    exec('/usr/bin/Neu2.sh');


    Versucht.
    Leider alles ohne Erfolg :helpnew:

  • Hi,
    dann sollte

    Code
    Invalid MIT-MAGIC-COOKIE-1 key


    auch kommen, wenn Du

    Code
    sudo /usr/bin/matchbox-keyboard


    eingibst.
    Dann liegt ein Problem in Richtung keyboard-Programm vor.
    Probier das doch einfach mal aus ...

    Dann:
    ändere bitte das script doch mal folgendermassen:

    Bash
    #!/bin/bash
    #/usr/bin/matchbox-keyboard
    echo "<html>"
    echo "<body>"
    echo "Hello World!"
    echo "</body></html>


    und versuch das mit dem Aufruf aus php nochmal.
    Wenn es dann mit dem Aufruf klappt, erscheint im Browser "Hello World!".

    cu,
    -ds-

  • Über sudo wird der Befehl als root ausgeführt.

    Jenachdem ob du als Benutzer pi angemeldet bist oder nicht, fehlen evtl. Rechte o.ä. oder eben andere Benutzergruppen.

    Führst du etwas über den Webserver aus ist der Benutzer www-data.

    Desweiteren musst du, wenn www-data etwas über sudo ausführen können soll, den Benutzer über visudo die Rechte dazu geben und zwar ohne Passwd Abfrage.

  • Öhmmm....
    Falls der PHP Prozess mal stirbt, und das tut er, dann reißt er alle seine Kinder mit in den Tod.
    Die Tastatur mag noch einen Augenblick als Zombie überleben, aber Sinn macht das nicht.

    Die Tastatur muss mit den Rechten des Desktopbenutzers gestartet werden.
    Alles andere tuts nicht.

    Es darf kein Kind des Webservers sein.
    Auch kein Kind des PHP welches ein Kind des Servers ist.

    spruch.png

  • Hallo, Ja die Fehlermeldung kommt dann auch!!!

    Script habe ich geändert. "Hello World!" kommt nicht!!!

    Habe mein Scribt aber auch mal so geändert:

    Bash
    #!/bin/bash
    #/usr/bin/tightvncserver
    echo "<html>"
    echo "<body>"
    echo "Hello World!"
    echo "</body></html>


    Auch hier erscheint kein "Hello World!"!!! Und mein tightvncserver Funktioniert gerade jetzt in diesem Moment ja auch. (Nur mal so zum Test)

    Nur mal so zur Info (falls das was bringt):

    Code
    pi@raspberrypi ~ $ ls -al /usr/bin/Neu2.sh
    -rwxr-xr-x 1 root www-data 106 Aug 22 22:50 /usr/bin/Neu2.sh
    Code
    pi@raspberrypi ~ $ ls -al /usr/bin/matchbox-keyboard
    -rwxr-xr-x 1 root www-data 34976 Mai 23  2012 /usr/bin/matchbox-keyboard

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!