Состояние заставки в Linux через python-dbus с использованием Python3

1

Исходя из 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 /
Теги:
screensaver
dbus

1 ответ

1
Лучший ответ

Взятый с 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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню