【发布时间】:2012-04-26 20:54:56
【问题描述】:
我编写了一个简单的 python 程序来播放和暂停女妖音乐播放器。 虽然它在我自己的机器上工作,但我无法在连接到同一路由器 (LAN) 的远程计算机上执行此操作。 我编辑了远程机器的 session.conf,添加了这一行:
<listen>tcp:host=localhost,port=12434</listen>
这是我的程序:
import dbus
bus_obj=dbus.bus.BusConnection("tcp:host=localhost,port=12434")
proxy_object=bus_obj.get_object('org.bansheeproject.Banshee',
'/org/bansheeproject/Banshee/PlayerEngine')
playerengine_iface=dbus.Interface(proxy_object,
dbus_interface='org.bansheeproject.Banshee.PlayerEngine')
var=0
while (var!="3"):
var=raw_input("\nPress\n1 to play\n2 to pause\n3 to exit\n")
if var=="1":
print "playing..."
playerengine_iface.Play()
elif var=="2":
print "pausing"
playerengine_iface.Pause()
这是我尝试执行时得到的结果
Traceback (most recent call last):
File "dbus3.py", line 4, in <module>
bus_obj=dbus.bus.BusConnection("tcp:host=localhost,port=12434")
File "/usr/lib/python2.7/dist-packages/dbus/bus.py", line 125, in __new__
bus = cls._new_for_bus(address_or_type, mainloop=mainloop)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NoServer: Failed to connect to socket "localhost:12434" Connection refused
我在这里做错了什么? 我应该编辑/usr/lib/python2.7/dist-packages/dbus/bus.py
更新:
好的,这是交易 当我添加
<listen>tcp:host=192.168.1.7,port=12434</listen>
到 /etc/dbus-1/session.conf,然后重新启动,希望它会在重新启动时开始监听, 它永远不会启动。它卡在加载屏幕上,偶尔会出现带有以下文本的黑屏:
Pulseaudio Configured For Per-user Sessions Saned Disabled;edit/etc/default/saned
所以,当我去 ctrl+alt+f1 时,将 session.conf 更改为原始状态并重新启动,它可以正常启动。
这是怎么回事? 如何让 dbus daemon 监听 tcp 连接,而不会遇到问题?
【问题讨论】:
-
默认(ubuntu)。抱歉,我对网络的了解几乎为零,我应该配置 iptable 以允许连接吗?我认为iptable默认允许一切
-
有用的网络命令:
netstat -na、lsof -ni、tcpdump -n -i eth0和iptables -nvL。我认为使用这些组合会告诉你你的进程是否正在监听,如果是的话,如果它以某种方式被阻塞。祝你好运! -
您可以使用
socat将 tcp 数据包转发到本地 unix 套接字 - 这样您就不需要重新启动 dbus 守护进程。另外,尝试tcp:host=0.0.0.0,port=12434- 这会将侦听套接字绑定到所有接口。 (检查重启后是否真的在监听 -telnet 192.168.1.7 12434