我在我的localhost上运行Apache.从作为www-user运行的PHP脚本我想在我的机器上控制Rhythmbox播放.到目前为止,我的PHP脚本中有一个简单的命令:
exec('rhythmbox-client --pause');
当我从命令行运行它时,这很有效,但是如果它以www-user运行,我猜rhythmbox-client不知道/无法访问我的Rhythmbox实例.
有没有一种简单的方法让PHP脚本作为我的用户而不是www-user运行,或者告诉rhythmbox-client哪个实例要控制?
整个应用程序是,当我的手机摘机时,它调用我的PHP脚本暂停音乐,并在手机挂机时恢复播放.我喜欢VoIP电话!
解决方案:
感谢Carpetsmoker和Tarek,我使用sudo了答案,但有一些问题.为了克服它们,我做了以下事情:
创建了一个bash脚本来调用rhythmbox-client.这个bash脚本是sudo在PHP 中执行的,如下面的答案中所述.不幸的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
Run Code Online (Sandbox Code Playgroud)
现在bash脚本可以由PHP和wwwuser执行,我的手机可以暂停/播放我的音乐!
Mar*_*oij 21
一种解决方案是使用sudo(8):
exec('sudo -u myuser ls /');
Run Code Online (Sandbox Code Playgroud)
显然,您需要设置sudo(8)允许运行Web服务器的用户调用它.编辑sudoers文件visudo(8),你可以使用类似的东西:
wwwuser ALL=/usr/bin/rhythmbox-client
Run Code Online (Sandbox Code Playgroud)
防止Apache能够运行其他命令,只能运行rythymbox命令.