Как мониторить блокировку/разблокировку экрана в Ubuntu 14.04

Вопрос или проблема

Мне нужно реализовать функцию, которая будет отслеживать блокировку/разблокировку экрана. Я обратился к следующей статье:
Запустить скрипт при блокировке/разблокировке экрана

Мой код скрипта на Python работает отлично в Ubuntu 12.04, но не работает в Ubuntu 14.04:

#!/usr/bin/env python  
import gobject  
import dbus  
from dbus.mainloop.glib import DBusGMainLoop  

def filter_cb(bus, message):
    if message.get_member() != "ActiveChanged":
        return
    args = message.get_args_list()
    if args[0] == True:
        print("Блокировка экрана")
    else:
        print("Разблокировка экрана")

DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_match_string("type="signal",interface="org.gnome.ScreenSaver"")
bus.add_message_filter(filter_cb)
mainloop = gobject.MainLoop()
mainloop.run()

Я также пробовал команду:

dbus-monitor --session "interface="org.gnome.ScreenSaver""  

Она не выводит ничего, когда я вручную блокирую/разблокирую экран.

Как я могу отслеживать блокировку/разблокировку экрана в Ubuntu 14.04?

Вы правы.
Так что, чтобы получить правильный ответ здесь, я изменил ваш код на работающий (по крайней мере, в Ubuntu 15.10, Unify):

#!/usr/bin/env python
import gobject
import dbus
from dbus.mainloop.glib import DBusGMainLoop

def filter_cb(bus, message):
    if message.get_member() != "EventEmitted":
        return
    args = message.get_args_list()
    if args[0] == "desktop-lock":
        print("Блокировка экрана")
    elif args[0] == "desktop-unlock":
        print("Разблокировка экрана")

DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_match_string("type="signal",interface="com.ubuntu.Upstart0_6"")
bus.add_message_filter(filter_cb)
mainloop = gobject.MainLoop()
mainloop.run()

Я думаю, что нашел ответ:
В Ubuntu 14.04 я должен отслеживать интерфейс “com.ubuntu.Upstart0_6” вместо “org.gnome.ScreenSaver”.

Ответ или решение

Для мониторинга блокировки и разблокировки экрана в Ubuntu 14.04 необходимо внести корректировки в ваш исходный код, поскольку в этой версии операционной системы изменились используемые интерфейсы DBus. В данной статье мы рассмотрим, как правильно организовать этот процесс, опираясь на последние изменения в системе.

Шаг 1: Установка необходимых библиотек

Убедитесь, что на вашей системе установлены необходимые библиотеки для работы с DBus и GObject. Используйте следующие команды для установки:

sudo apt-get update
sudo apt-get install python-dbus python-gobject

Шаг 2: Модифицированный скрипт

Ваш исходный скрипт нуждается в изменениях. Мы заменим интерфейс org.gnome.ScreenSaver на com.ubuntu.Upstart0_6, что является корректным подходом для мониторинга событий блокировки и разблокировки экрана в Ubuntu 14.04. Вот исправленный код:

#!/usr/bin/env python
import gobject
import dbus
from dbus.mainloop.glib import DBusGMainLoop

def filter_cb(bus, message):
    if message.get_member() != "EventEmitted":
        return
    args = message.get_args_list()
    if args[0] == "desktop-lock":
        print("Lock Screen")
    elif args[0] == "desktop-unlock":
        print("Unlock Screen")

DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_match_string("type='signal',interface='com.ubuntu.Upstart0_6'")
bus.add_message_filter(filter_cb)
mainloop = gobject.MainLoop()
mainloop.run()

Шаг 3: Запуск скрипта

Сохраните скрипт в файле с расширением .py, например screen_monitor.py, и предоставьте ему права на исполнение:

chmod +x screen_monitor.py

Запустите скрипт в терминале:

./screen_monitor.py

Теперь, когда вы будете блокировать или разблокировать экран, в терминале должно появляться соответствующее сообщение.

Примечания

  1. Проверка зависит от настроек системы: Убедитесь, что вы работаете в графическом окружении и DBus правильно настроен на отправку сигналов.

  2. Управление сигнальными событиями: Если ваш скрипт не выдает никаких сообщений, возможно, другие процессы блокируют обработку событий. Попробуйте запустить ваш скрипт с правами суперпользователя для диагностики.

  3. Обновление системы: Если возможно, рассмотрите обновление до более поздних версий Ubuntu (например, 16.04 и выше), так как там могут использоваться другие интерфейсы для управления событиями блокировки.

Вывод

Используя приведенный скрипт, вы сможете эффективно отслеживать события блокировки и разблокировки экрана на Ubuntu 14.04. Это решение является оптимальным и актуальным на сегодняшний день, что позволит вам организовать мониторинг с использованием Python и DBus.

Оцените материал
Добавить комментарий

Капча загружается...