Неверный вывод веб-страницы для PHP exec, выполняющий скрипт bash для audtool (часть Audacious) - PullRequest
0 голосов
/ 30 декабря 2018

На локальном сервере Linux (Rapsberry Pi debian stretch с рабочим столом) я работаю над отправкой команд "audtool" на работающий медиаплеер Audacious с использованием сценариев php, exec и bash.Audacious запускается автоматически, когда сервер запускается с пользователем «pi».У меня есть apache2 и php, настроенные и работающие на сервере, и я могу подключиться к серверу по ssh и выполнить все команды из cli.Я считаю, что я решил проблемы с запуском audtool (dbus и установкой правильных переменных окружения), и запуск php в командной строке работает успешно.Однако при запуске php на веб-странице я получаю длинную строку информации о apache2

. Я потратил несколько часов (в течение целого дня), исследуя это в Интернете, чтобы добраться до этой стадии,так близко, что я почти могу коснуться его, но застрял на этом последнем элементе.Примером является отображение текущей песни из запущенного экземпляра Audacious.Audtool требует работающий dbus (ищет дисплей).Используя exec или shell_exec у меня нет проблем с запуском команд bash, таких как whoami или ls.

Страница php (cursong.php):

<?php
echo exec('/var/www/html/cursong.sh');
?>

Скрипт bash (cursong.sh):

#!/bin/bash
##call current song

pid=`pidof audacious`
user=`ps -p $pid -o user=`
export `strings /proc/$pid/environ | grep DBUS_SESSION_BUS_ADDRESS`
sudo -E -su $user /usr/bin/audtool --current-song

(отсюда: https://redmine.audacious -media-player.org /boards / 1 / themes / 1058? R = 1059 )

Вывод командыстрока: php -f cursong.php

Artist - Song Title (for example - so this works)

Вывод на веб-страницу:

declare -x APACHE_LOCK_DIR="/var/lock/apache2" declare -x 
APACHE_LOG_DIR="/var/log/apache2" declare -x 
APACHE_PID_FILE="/var/run/apache2/apache2.pid" declare -x 
APACHE_RUN_DIR="/var/run/apache2" declare -x APACHE_RUN_GROUP="www- 
data" declare -x APACHE_RUN_USER="www-data" declare -x 
INVOCATION_ID="4ce76136ca8842bd9108d6b1b9a5b9ed" declare -x 
JOURNAL_STREAM="8:23896" declare -x LANG="C" declare -x OLDPWD 
declare -x 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 
declare -x PWD="/var/www/html" declare -x SHLVL="1"

Я установил www-data, пользователя apache2 со следующим в / etc / sudoers:

www-data ALL=NOPASSWD: ALL

и / var / www / html - это rwx для всех

Очевидно, я ожидаю увидеть «Artist - Название песни» на веб-странице, но вместо этого я получаю обратно все apache2Информация.Что я пропустил, или где я ошибся?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Просто для полноты, сценарии php и bash для запроса и действия с использованием параметра, переданного в URL-адрес php, а затем в сценарий bash:

Файл PHP с параметром

<?php
$request = $_GET["request"];
echo shell_exec("sudo /var/www/html/cursong.sh \"${request}\" 2>&1");
?>

пример URL:

http://192.168.1.92/cursong.php?request="--playlist-shuffle-status" 

Bash Script с параметром

#!/bin/bash
##call request

pid=`pidof audacious`
user=`ps -p $pid -o user=`
export `strings /proc/$pid/environ | grep DBUS_SESSION_BUS_ADDRESS`
sudo -E -su $user /usr/bin/audtool $1

PHP-файл для действия

<?php
$action = $_GET["action"];
shell_exec('sudo /var/www/html/playsong.sh \"${request}\" ');
?>

пример URL:

http://192.168.1.92/cursong.php?action="--playback-play" 

Скрипт Bash для действия

#!/bin/bash
##call action

pid=`pidof audacious`
user=`ps -p $pid -o user=`
export `strings /proc/$pid/environ | grep DBUS_SESSION_BUS_ADDRESS`
sudo -E -su $user /usr/bin/audtool $1
0 голосов
/ 30 декабря 2018

Ненавижу отвечать на свой вопрос, похоже, я не слишком старалась!После пяти часов или около того поисков и попыток исправлений я наткнулся на этот пост на SO:

Запуск приложения командной строки из PHP от имени конкретного пользователя

который предложил поместить "пользователя sudo -u" в исполняемый файл php.Я попробовал это с пользователем "pi", и он все еще не работал, затем я просто попробовал это с "sudo" и эй presto !!

Файл php теперь выглядит так:

<?php
echo shell_exec('sudo /var/www/html/cursong.sh 2>&1');
?>

Теперь проведем некоторое тестирование того, как это работает с другими командами audtool, которые не запрашивают ответ, но требуют действий от Audacious, и чтобы посмотреть, как я могу уменьшить количество скриптов php-файлов, передав параметр в скрипт bash.!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...