我写了一个简单的Python程序来播放和暂停Banshee音乐播放器。 虽然在我的电脑上运行正常,但是我在连接到同一路由器(局域网)的远程计算机上操作时遇到了问题。 我编辑了远程计算机的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 吗?
更新:
好的,这就是问题所在。当我添加
标记时,它破坏了我的HTML。请帮我解决一下。<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守护程序在不遇到问题的情况下监听tcp连接?
netstat -na
,lsof -ni
,tcpdump -n -i eth0
和iptables -nvL
。我认为结合使用这些命令将告诉您进程是否在监听,并且如果是,则是否被阻止。祝你好运! - hochlsocat
将TCP数据包转发到本地Unix套接字,这样您就不需要重新启动DBus守护程序。另外,尝试使用tcp:host=0.0.0.0,port=12434
- 这将绑定监听套接字到所有接口。(在重启后检查是否实际在侦听 -telnet 192.168.1.7 12434
) - Andrey Sidorov