【发布时间】:2011-10-18 07:26:03
【问题描述】:
我在本地主机上运行 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 脚本是在 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 执行,我的手机可以暂停/播放我的音乐!
【问题讨论】:
-
尝试以非 root 身份运行韵律箱客户端怎么样?
-
您打算只在本地运行您的服务器吗? (也就是从不把它放到网上)
-
@afuzzyllama 是的,它只是在本地