dbus не может найти сервис compiz через python - PullRequest
0 голосов
/ 05 января 2012

Хорошо, просто чтобы вы знали, я не слишком много работал с 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 files

Странно то, что я погуглил и сумел получить Perl-скрипт, в котором перечислены сервисы (используя org.freedesktop.DBus), и он показал compiz в качестве одного из них.

Кроме того, perl, похоже, мог использовать сервис compiz.Но я не думаю, что смогу написать это на Perl, потому что я не очень хорош в Perl, и я даже не знаю, как работает dbus, поэтому я бы себя там убил.

Япытаясь сделать что-то с compiz, как изменение рабочих пространств.Я думаю, я могу сделать это с помощью фальшивых нажатий клавиш, но это большая часть хака, и я мог бы захотеть добавить более продвинутые варианты поведения.

Это новая установка arch-linux, так что мне интересно, могу ли яможет отсутствовать посылка.

1 Ответ

1 голос
/ 06 января 2012

D-Bus имеет несколько отдельных шин - одну "системную" шину, всегда доступную и используемую системными демонами и службами, и любое количество "сессионных" шин 1 ,по одному на каждый запущенный сеанс X11, к которому подключаются ваши собственные программы.

Compiz подключается к сеансной шине , поскольку это пользовательская программа (не системный демон и не обладающая привилегиями)может работать в нескольких сеансах (если все экземпляры подключены к одной и той же системной шине, только первый может требовать имя шины).

bus = dbus.<b>Session</b>Bus()
bus.get_object('org.freedesktop.compiz','/org/freedesktop/compiz')

Вы можете использовать D-Feet для просмотра всех программ, подключенных к системной и сеансовой шинам.


1 Примечание на будущее: было предложено несколько предложений по введению «пользовательской» шиныбыть разделенным между всеми сеансами одного и того же пользователя и избавиться от «сессионных» шин, но этого еще не произошло.

...