Strona 1 z 1

Skrypty Bash w PHP.

: 11 wrz 2013, 02:33
autor: ZajOnDz
Cześć :) Znów wam trochę po zawracam głowę :pt36:
Sprawa prezentuje się następująco:
Uruchamiam polecenia Basha w php poprzez polecenia Exec, Shell_exec, System.Polecenia whoami i ls działają bezproblemowo, ale nie działa mi polecenie np. "rhythmbox-client --next" zmieniające piosenkę w programie Rhythmbox.
Nawet jeśli utworzę osobny skrypt Bash z poleceniem zmiany piosenki to, gdy go uruchamiam nic się nie dzieje. Oczywiście to polecenie w konsoli działa jak należy.
Stworzyłem alias w pliku Bash_aliases. Uruchamianie aliasu w konsoli działa, lecz przez php nie działa.

Może nie jest to jakąś ważną sprawą, ale fajnym bajerem :p
Zwykle na noc włączam sobie muzykę, a czasami włączają mi się zbyt ostre piosenki :p dla tego do ich zmiany wykorzystałbym telefon i serwer Apache, lecz nie mogę nigdzie znaleźć nic sensownego na ten temat co by rozwiązało mój problem...

Polecenie - rhythmbox-client --print-playing-format %ta - Wywołane w php również nic mi nie wyświetla.
Samo polecenie "rhythmbox" uruchamia program, lecz "rhythmbox-client" nie wywołuje żadnej reakcji.
Może powinienem użyć jakiegoś innego polecenie w php po za System i Exec?

Z góry dzięki za chęci pomocy :)
Pozdrawiam :)

Re: Skrypty Bash w PHP.

: 11 wrz 2013, 20:03
autor: ka_o_3991
Apache zapewne działa z poziomu innego usera, może rhythmbox-client wymaga tego samego usera i dlatego nie działa? sprawdż czy zwraca jakieś błędy ;)
(tak tylko zgaduję, u klienta w delegacji jestem i nie mam jak sprawdzić ;)

Re: Skrypty Bash w PHP.

: 12 wrz 2013, 19:36
autor: ZajOnDz
Masz rację, nie sprawdziłem tego... Nawet mi to do głowy nie przyszło :p
Co prawda jeszcze nie wiem jak zmienić usera z którego ma korzystać php, ale pewnie coś znajdę :p
Na razie sprawdziłem to robiąc osobny skrypt basha. Gdy go odpalam jako ja to zmienia mi piosenkę, lecz gdy odpalę przez sudo to otwiera mi nowego Rhythmboxa :p Więc zapewne w tym problem...

Tak więc, dzięki za pomoc :)
Jeśli tylko jakoś mogę to chętnie się odwdzięczę :p
Miłego wieczoru :)

@edit

Hm... Chyba sobie jednak sam nie poradzę :|
Znalazłem parę informacji w necie, ale w dalszym ciągu nie potrafię tego zrobić...
Mogę zmienić w pliku /etc/apache2/envvars użytkownika na siebie, ale wtedy apache nie chce się uruchomić. Domyślam się, że potrzebuje hasła, ale nie mogę za cholerkę znaleźć, gdzie można wpisać jakie jest hasło użytkownika :p
Znalazłem też możliwość - sudo su "zajondz"... Co prawda gdy w skrypcie na stronie zmienie użytkownika na siebie i wykonam "whoami" to wyświetla, że jest zalogowany jako zajondz, lecz rhythmbox ciągle nie chce zmieniać piosenek :p
A teraz, gdy z konsoli spróbowałem uruchomić rhythmboxa jako użytkownik www-data to otrzymałem coś takiego :p a próbowałem, żeby sprawdzić, czy gdy rhythmbox będzie uruchomiony przez tego użytkownika to czy przez php wtedy będę mógł zmieniać piosenki :p Bo jeśliby tak było w taki sposób działało to mogłoby tak zostać. Uruchamiałbym po prostu zawsze rhythmboxa jako www-data :p

Kod: Zaznacz cały

$ whoami
www-data
$ rhythmbox
No protocol specified
No protocol specified

(gst-plugin-scanner:12768): Clutter-CRITICAL **: Unable to initialize Clutter: Unable to open display ':0'

** (rhythmbox:12767): CRITICAL **: unable to create '/var/www/.cache/dconf'; dconf will not work properly.
No protocol specified
No protocol specified
Nie można otworzyć ekranu: 
Wykonanie polecenia "rhythmbox --help" wyświetli pełną listę dostępnych opcji wiersza poleceń.
$ 
Hm... Nie wierzę, że nie ma na to jakiegoś sposobu :p Pomożecie? :p

Re: Skrypty Bash w PHP.

: 13 wrz 2013, 03:03
autor: ethanak
Próbowałeś suphp?

Re: Skrypty Bash w PHP.

: 13 wrz 2013, 10:33
autor: jacekalex
ethanak pisze:Próbowałeś suphp?
suphp - to IMHO ciężkie nieporozumienie.

Lepiej virtualhost + suexec na odpowiedniego pacjenta.

Sznurek:
https://wiki.archlinux.org/index.php/Ap ... tual_Hosts

Re: Skrypty Bash w PHP.

: 13 wrz 2013, 10:40
autor: ethanak
Tyż prawda.
W sumie jeszcze prościej - pięć linijek w Pythonie i serwerek na jakimś wysokim porcie odpalany z usera (np. ze startem sesji). PHP tu niepotrzebny bo serwer może bezpośrednio odpalić polecenie. Jeśli ktoś zna Pythona to szybciej się coś takiego zrobi niż skonfiguruje Apacza...

Re: Skrypty Bash w PHP.

: 13 wrz 2013, 21:44
autor: ZajOnDz
Hm... No to trochę mnie skołowaliście :p
Pythona nie znam, ale myślę, że to raczej nic skomplikowanego do nauki, jak każdy inny język programowania tylko, że ostatnio nie mam na nic czasu :| ale rozejrzę się po necie...

Zaraz zobaczę to suphp i suexec :)

Ethanak. Jeśli nie byłby to dla Ciebie kłopot to byłbym wdzięczny za tę pięć linijek :)

Re: Skrypty Bash w PHP.

: 14 wrz 2013, 05:32
autor: ethanak
ZajOnDz pisze:Ethanak. Jeśli nie byłby to dla Ciebie kłopot to byłbym wdzięczny za tę pięć linijek :)

Kod: Zaznacz cały

sudo apt-get install python-paste
(tak, wiem że to overkill ale nie chce mi się babrać z HTTPServer bo wyjdzie 15 linijek a nie 5)

Kod: Zaznacz cały

#!/usr/bin/env python
#coding: utf-8

import subprocess
from paste import httpserver

def app(env,response):
    response("200 OK", [("Content-Type", "text/plain")])
    if env['PATH_INFO'] == '/fwd':
        subprocess.call(['rhythmbox-client','--next'])
    yield 'OK'
    
httpserver.serve(app,port=5678,host='1.2.3.4')
Zamieniasz port i host na prawidłowe. Odpalasz np:

Kod: Zaznacz cały

wget http://1.2.3.4:5678/fwd
Sprawdzone, ładnie działa.

Re: Skrypty Bash w PHP.

: 18 wrz 2013, 23:23
autor: ekitowski
Ewentualnie biblioteka ssh2 do php i również po sprawie...
http://php.net/manual/en/book.ssh2.php