Как позволить приложению Linux Python правильно обрабатывать завершение при выходе пользователя из системы?

532
tuxpoldo

Я написал приложение с графическим интерфейсом для Linux на Python, которое должно выполнить некоторые задачи по очистке, прежде чем завершить работу, когда пользователь выходит из системы. К сожалению, кажется, что при выходе все приложения убиты. Я пытался обрабатывать сигналы POSIX и уведомления DBUS, но ничего не получалось. Есть идеи, что я мог сделать неправильно?

При запуске приложения я регистрирую некоторые обработчики завершения:

# create graceful shutdown mechanisms signal.signal(signal.SIGTERM, self.on_signal_term) self.bus = dbus.SessionBus() self.bus.call_on_disconnection(self.on_session_disconnect) 

Когда пользователь выходит из системы, ни self.on_signal_term, ни self.on_session_disconnect не вызываются.

Проблема возникает в нескольких сценариях: Ubuntu 14.04 с Unity, Debian Wheezy с Gnome.

Полный код: https://github.com/tuxpoldo/btsync-deb/tree/master/btsync-gui

0

1 ответ на вопрос

0
grawity

Traditionally, this is done using XSMP and libSM. If you ask a session manager to log out, it sends "SaveYourself" messages to all clients that have registered with it over XSMP.

The program doesn't get killed, though; it exits by itself when Xlib loses the connection to the X11 server. (I'm not sure if gtk has an option to disable that.)

Любая идея о том, как реализовать это в Python? Я не нашел ничего полезного до сих пор .... tuxpoldo 9 лет назад 0

Похожие вопросы