Wpis z mikrobloga

Mógłby ktoś poradzić jak za pomocą przycisku na stronie w html uruchomić skrypt w bashu?
Dokładnie chodzi o zdalne załączanie światła (gniazdka bezprzewodowe na 433Mhz) z potwierdzeniem audio np "lights on!".
Temat TTS (text to speak) i sterowania gniazdkami mam już ogarnięty nie wiem tylko jak to scalić do kupy.
Obecnie wygląda to jak na załączonym screenie ale nie działa :(
#programowanie #php #html #linux #nettemp #raspbian
l.....p - Mógłby ktoś poradzić jak za pomocą przycisku na stronie w html uruchomić sk...

źródło: comment_HD9lqCqnSLVVjZfrsl7gYmDjvW4e9xPX.jpg

Pobierz
  • 21
  • Odpowiedz
@lukas125p: php pewnie jest wykonywane na serwerze jako użytkownik "www-data", który nie ma dostępu do sudo. Jeśli to domyślna instalacja raspbiana to tak na 100% jest.

1) Ten bashowy skrypt musi być wykonywany jako root?

2) Podrzuć wynik z takiego skryptu php: <?php
  • Odpowiedz
@lukas125p: skoro nie musi być wykonywany jako root to dlaczego robisz exec("sudo ...")?

Przetestuj w takim razie coś takiego zamiast exec() w Twoim kodzie:

system("bash -x /home/pi/say.sh 2>&1")

Powinno wykonać skrypt i wypisać wszystkie kroki (opcja "-x" w bashu) i ewentualne błędy (za to jest "2>&1" odpowiedzialne) w to samo miejsce gdzie wynik z "id" znalazłeś.
  • Odpowiedz
@lukas125p: to w takim razie powinieneś mieć informacje w error logu z php. Wiesz jak go znaleźć?

Mogę strzelać: będzie chodzić o prawa do /home/pi. Wykonaj coś takiego:

sudo -u www-data bash -x
  • Odpowiedz
faktycznie chyba chodzi o uprawnienia bo po wykonaniu sudo -u www-data bash -x /home/pi/say.sh dostaję taki błąd "/var/www/.esd_auth: Permission denied
Can't find a suitable libao driver. (Is device in use?)"

Dodam, że z użytkowniekiem pi skrypt wykonuje się poprawnie a chmod o+x /home/pi nic nie zmienia.
  • Odpowiedz
@lukas125p: brzmi poprawnie. ls -la /dev/snd/* pewnie zwróci Ci informacje, że dostęp tutaj ma grupa "audio" lub coś w tym stylu. www-data pewnie nie jest w audio (możesz sprawdzić przez "groups" albo w /etc/groups).
  • Odpowiedz
@elirath: co ciekawe po restarcie uprawnienia się zmieniają i ponownie muszę zastosować chmod o+rw. Kolejną rzeczą która po restarcie powraca do poprzedniej wersji jest resolve.conf w którym zapisany jest adres serwera dns.
  • Odpowiedz
@lukas125p: uprawnieniami w /dev/ zarządza pewnie udev / systemd-udev, tworzy wpisy w /dev przy każdym starcie na nowo. Dodaj www-data do odpowiedniej grupy.

/etc/resolv.conf będzie nadpisywane przez klienta dhcp - nie wiem jak to w Twojej dystrybucji wygląda, sprawdź może /etc/resolv.conf.head albo zrób chattr +i /etc/resolv.conf po edycji. Jeśli to coś debianowatego to w /etc/network/interfaces możesz skonfigurować adres serwera dns, wtedy skrypty z debiana upewnią się, że w /etc/resolv.conf jest
  • Odpowiedz