ローカルホストでApacheを実行しています。 PHPスクリプトから、自分のマシンでのRhythmboxの再生を制御したいと考えています。これまでのところ、PHPスクリプトに簡単なコマンドがあります。
exec('rhythmbox-client --pause');
これをコマンドラインから実行するとうまくいきますが、www-userとして実行すると、rhythmbox-client
がRhythmboxのインスタンスを認識していない/アクセスできないと思います。
PHPスクリプトをwww-userではなく自分のユーザーとして実行する、またはrhythmbox-client
にどのインスタンスを制御するかを指示する簡単な方法はありますか?
全体的なアプリケーションは、私の電話がオフフックになると、私のPHPスクリプトが呼び出され、音楽を一時停止し、電話がオンフックになると再生を再開するというものです。VoIP電話が大好きです!
ソリューション: CarpetsmokerとTarekのおかげでSudo
を回答として使用しましたが、いくつかの問題がありました。それらを克服するために、私は次のことをしました:
rhythmbox-client
を呼び出すbashスクリプトを作成しました。このbashスクリプトは、以下の回答で説明されているようにPHPでSudo
を使用して実行されました。残念ながらrhythmbox-client
は制御する環境がわからなかったため、bashスクリプトはこのような:
#! /bin/bash
DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2> /dev/null| sed 's/DBUS/\nDBUS/g' | tail -n 1`
if [ "x$DBUS_ADDRESS" != "x" ]; then
export $DBUS_ADDRESS
/usr/bin/rhythmbox-client --pause
fi
これで、bashスクリプトをPHPおよびwwwuserで実行できます。また、私の電話で音楽を一時停止/再生できます。
1つの解決策はSudo(8)
を使用することです:
_exec('Sudo -u myuser ls /');
_
もちろん、Sudo(8)
をセットアップして、Webサーバーを実行しているユーザーがWebサーバーを呼び出せるようにする必要があります。 sudoersファイルをvisudo(8)
で編集すると、次のようになります。
_wwwuser ALL=/usr/bin/rhythmbox-client
_
Apacheが他のコマンドおよびonly rythymboxコマンドを実行できないようにするため。
私の場合、解決策はこのようになりました:
1)sudoersファイルに次の行を追加しました:
myuser ALL=(ALL) NOPASSWD: /usr/bin/prlctl
_www ALL=(ALL) NOPASSWD: /usr/bin/prlctl # IMPORTANT!!!
2)PHP内のEXEC()コマンドが次のように変更されました:
exec("Sudo -u myuser prlctl list -a", $out, $r);
あなたの助けをありがとう!
ビクターエスピナ
プロセスを任意のユーザーが実行できる場合は、PHPで実行できます。例はfortune
コマンドです
-rwxr-xr-x 1 root root 18816 Oct 1 2009 /usr/games/fortune
すべてのユーザーのx
権限を確認します。しかし、これはまったく機能しない場合があり、ユーザー、www-data
またはApache
などにプログラムを実行させる必要がある場合があります。 Sudo www-data
を実行して、コマンドを実行してみてください。動作する場合は、Apache/PHPで実行できるはずです。