从其他用户那里获取rhythmbox信息

时间:2010-09-24 05:08:11

标签: php python c dbus rhythmbox

我在桌面上运行Rhythmbox,我希望能够通过Web界面远程控制它。但是,我在访问它时遇到了问题,因为rhythmbox-client抱怨尝试访问它的用户(www-data)没有a)运行X会话,而b)没有访问我的rhythmbox dbus信息。

(rhythmbox-client:13954): Rhythmbox-WARNING **: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.

我在ubuntu 10.04上运行apache,php。通过php cli从不同的用户调用php脚本也尝试了以下方法(使用不同的用户ssh到我自己的盒子中)

我尝试过这些方法:

  • 使用“rhythmbox-client --print-playing --no-start --no-resent”从php脚本调用system()和exec()
  • 直接在php中使用DBus以及python脚本(使用system()/ exec()从php脚本调用它)
  • 在C程序中使用setuid()setruid()seteuid()并通过php调用它。

我现在不知所措。这甚至可能吗?

[编辑] 我使用了@ IvanGoneKrazy的建议并从this similar question获取了环境代码。现在我有这个错误消息的代码:

import subprocess, os

p = subprocess.Popen('dbus-launch', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for var in p.stdout:
  sp = var.split('=', 1)
  os.environ[sp[0]] = sp[1][:-1]

os.system('rhythmbox-client --print-playing')

错误消息:

(rhythmbox-client:15377): Rhythmbox-WARNING **: Launch helper exited with unknown return code 1

1 个答案:

答案 0 :(得分:0)

给出了类似的问题和Python解决方案here。根本问题似乎是system()和exec()没有设置正确的环境变量。您可以使用PHP http://us.php.net/manual/en/function.proc-open.php为PHP生成的进程设置环境变量。