0

わかりました。ご存知のとおり、私はdbusやperlをあまり使用していません。そのため、いくつかの問題があると言うかもしれません。

プログラムでcompizを操作するためにdbusを使用しようとしています。そして、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を使用)。その1つとしてcompizが表示されました。

また、perlはcompizサービスを利用できるようでした。しかし、私はperlが得意ではなく、dbusがどのように機能するかさえよくわからないため、perlでスクリプトを作成することはできないと思います。

ワークスペースの変更など、compizで何かできるようにしようとしています。偽のキーストロークでそれを行うことができると思いますが、それは多くのハックであり、より高度な動作を追加したいと思うかもしれません。

これはarch-linuxの新規インストールなので、パッケージが不足しているのではないかと思います。

4

1 に答える 1

1

D-Busには、いくつかの個別のバスがあります。システムデーモンとサービスによって常に使用および使用される単一の「システム」バスと、実行中のX11セッションごとに1つずつ、任意の数の「セッション」バス1があり、独自のプログラムが接続します。

Compizはセッションバスに接続します。これはユーザープログラムであり(システムデーモンではなく、権限がないため)、複数のセッションで実行できるためです(すべてのインスタンスが同じシステムバスに接続されている場合、最初のインスタンスのみがバス名を要求できます) )。

バス=dbus。セッションバス()
bus.get_object('org.freedesktop.compiz'、'/ org / freedesktop / compiz')

D-Feetを使用して、システムバスとセッションバスに接続されているすべてのプログラムを参照できます。


1将来への注意:同じユーザーのすべてのセッション間で共有される「ユーザー」バスを導入し、「セッション」バスを取り除くための複数の提案がありましたが、これはまだ実現されていません。

于 2012-01-05T20:27:13.507 に答える