0

好的,你知道,我没有经常使用 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:名称 org.freedesktop.compiz 不是由任何 .service 文件提供的

奇怪的是,我用谷歌搜索并设法获得了一个列出服务的 perl 脚本(使用 org.freedesktop.DBus),它显示 compiz 是其中之一。

此外,perl 似乎能够使用 compiz 服务。但是,我认为我不能用 perl 编写脚本,因为我不擅长 perl,而且我什至不知道 dbus 是如何工作的,所以我会在那里自杀。

我试图能够用 compiz 做一些事情,比如改变工作空间。我想我可以用伪造的按键来做到这一点,但这太难了,我可能想添加更高级的行为。

这是arch-linux的新安装,所以我想知道我是否可能缺少一个包。

4

1 回答 1

1

D-Bus 有几个独立的总线——一个单一的“系统”总线,始终可用并由系统守护程序和服务使用,以及任意数量的“会话”总线1,每个运行的 X11 会话一个,您自己的程序连接到这些总线。

Compiz 连接到会话总线,因为它是一个用户程序(不是系统守护程序并且缺乏特权)并且可以在多个会话中运行(如果所有实例都连接到同一系统总线,则只有第一个可以声明总线名称)。

总线 = dbus。会话总线()
bus.get_object('org.freedesktop.compiz','/org/freedesktop/compiz')

您可以使用D-Feet浏览连接到系统和会话总线的所有程序。


1未来注意事项:有多个建议引入“用户”总线以在同一用户的所有会话之间共享并摆脱“会话”总线,但这还没有发生。

于 2012-01-05T20:27:13.507 回答