好的,只是你知道,我没有使用过dbus或perl,所以我可能会说一些关闭的东西。
我正在尝试使用dbus以编程方式使用compiz。看一下compiz wiki http://wiki.compiz.org/Plugins/Dbus,我发现python看起来最容易做到这一点。所以我到了这个
import sys, dbus, subprocess
bus = dbus.SystemBus()
bus.get_object('org.freedesktop.compiz','/org/freedesktop/compiz')
然而,这给了我一些问题,因为显然dbus无法找到compiz dbus服务。语法是正确的,它适用于org.freedesktop.EverythingElse
dbus.exceptions.DBusException:org.freedesktop.DBus.Error.ServiceUnknown:任何.service文件都没有提供名称org.freedesktop.compiz
奇怪的是,我用Google搜索并设法获得一个列出服务的perl脚本(使用org.freedesktop.DBus),并将compiz显示为其中之一。
此外,perl似乎能够使用compiz服务。但是,我不认为我可以在perl中编写脚本,因为我在perl上并不擅长,我甚至不知道dbus是如何工作的所以我会在那里自杀。
我正在尝试使用改变工作区等compiz做一些事情。我想我可以用伪造的键盘来做到这一点,但这很大程度上是一种破解,我可能想要添加更多高级行为。
这是一个新的arch-linux安装,所以我想知道我是否可能错过了一个包。
答案 0 :(得分:1)
D-Bus有几个独立的总线 - 一个“系统”总线,总是可供系统守护进程和服务使用,以及任意数量的“会话”总线 1 ,每个运行的X11会话一个,您自己的程序连接到该会话。
Compiz连接到会话总线,因为它是用户程序(不是系统守护程序并且缺少权限),并且可以在多个会话中运行(如果所有实例都连接到同一系统总线) ,只有第一个可以申请公交车名称。
bus = dbus.SessionBus() bus.get_object('org.freedesktop.compiz','/org/freedesktop/compiz')
您可以使用D-Feet浏览连接到系统和会话总线的所有程序。
1 未来的注意事项:有多个建议引入“用户”总线在同一用户的所有会话之间共享并摆脱“会话”总线,但这还没有还没发生。