Я использую x86_64 Debian 9 Stretch.Я запускаю systemd-inhibit cat
, а затем в другой консоли systemctl poweroff
.Отключение корректно блокируется.Согласно этот документ сигнал PrepareForShutdown(false)
должен излучаться, но я его не вижу.Я смотрю dbus с dbus-monitor --system
и использую программу на python:
#!/usr/bin/env python
import dbus
import gobject
from dbus.mainloop.glib import DBusGMainLoop
def handle(*args):
print "PrepareForShutdown %s" % (args)
DBusGMainLoop(set_as_default=True) # integrate into gobject main loop
bus = dbus.SystemBus() # connect to system wide dbus
bus.add_signal_receiver( # define the signal to listen to
handle, # callback function
'PrepareForShutdown', # signal name
'org.freedesktop.login1.Manager', # interface
'org.freedesktop.login1' # bus name
)
loop = gobject.MainLoop()
loop.run()
Программа ничего не печатает.dbus-monitor
выводит несколько непонятных сообщений (похоже, что-то вызывает ListInhibitors).
Сигнал не излучается или я просто не могу его уловить?Моя цель - обнаружить запрещенное отключение, прослушивая D-Bus, как мне это сделать?
РЕДАКТИРОВАТЬ: оказалось, когда используется задержка без задержки, запрос на отключение просто сбрасывается, сигнал не срабатывает.Но если я использую блокировку задержки через systemd-inhibit --mode=delay --what=shutdown cat
, то сигнал PrepareForShutdown срабатывает.