Исходя из qaru.site/questions/6490134/...:
import dbus
bus = dbus.SessionBus()
screensaver = bus.get_object('org.gnome.ScreenSaver', '/')
print(bool(screensaver.GetActive()))
Я пытаюсь получить доступ к заставке, так как это изменилось в Ubuntu 18.04, но этот код дает мне следующую ошибку:
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownMethod: No such interface '(null)' on object at path /
Взятый с https://askubuntu.com/questions/623195/how-to-get-gnome-session-idle-time, я смог ответить на свой вопрос:
import dbus
session_bus = dbus.SessionBus()
gnome_screensaver = 'org.gnome.ScreenSaver'
object_path = '/{0}'.format(gnome_screensaver.replace('.', '/'))
get_object = session_bus.get_object(gnome_screensaver, object_path)
get_interface = dbus.Interface(get_object, gnome_screensaver)
status = bool(get_interface.GetActive())
object_path создается путем замены. с /, и получает объект с get_object,
То, что мне не хватало раньше, было dbus.Interface, на которое на самом деле ссылаются https://dbus.freedesktop.org/doc/dbus-python/tutorial.html#interfaces-and-methods
РЕДАКТИРОВАТЬ:
Это захватывает все доступные заставки:
import dbus
session_bus = dbus.SessionBus()
screensaver_list = ['org.gnome.ScreenSaver',
'org.cinnamon.ScreenSaver',
'org.kde.screensaver',
'org.freedesktop.ScreenSaver']
for each in screensaver_list:
try:
object_path = '/{0}'.format(each.replace('.', '/'))
get_object = session_bus.get_object(each, object_path)
get_interface = dbus.Interface(get_object, each)
except dbus.exceptions.DBusException:
pass
status = bool(get_interface.GetActive())
print(status)