2010-09-24 8 views
1

У меня есть Rhythmbox, работающий на моем рабочем столе, и я хочу иметь возможность управлять им удаленно через веб-интерфейс. Однако у меня возникают проблемы с его доступом, потому что rhythmbox-client жалуется, что пользователь (www-data), который пытается получить к нему доступ, не имеет а) в качестве сеанса X, а b) не имеет доступа к моему ритм-боксу dbus.получить информацию о rhythmbox от другого пользователя

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

Я бегу Apache, PHP на Ubuntu 10.04. Следующие методы также пытались с помощью вызова сценария PHP с помощью PHP CLI из другого пользователя (sshing в мой собственный ящик с другим пользователем)

Я пробовал эти подходы:

  • вызова системы () и exec() из скрипта php с «rhythmbox-client -print-playing -no-start -no-resent»
  • с использованием DBus непосредственно в php, а также скрипт python (вызов его из php сценарий с системой()/exec())
  • с использованием setuid(), setruid(), seteuid() в программе на языке C и называя его через php.

Сейчас я в затруднении. Возможно ли это?

[EDIT] Я использовал предложение @ 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 

ответ

0

Аналогичная проблема и решение Python для дается here. Корневая проблема, похоже, заключается в том, что system() и exec() не имеют заданных переменных окружения. Вы можете использовать PHP http://us.php.net/manual/en/function.proc-open.php, чтобы установить среду vars для вашего PHP-процесса.

Смежные вопросы