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

Я написал приложение с графическим интерфейсом 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 nor self.on_session_disconnect называются.

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

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

12
задан tuxpoldo
06.04.2023 22:45 Количество просмотров материала 2724
Распечатать страницу

1 ответ

традиционно, это делается с помощью XSMP и libSM. Если вы попросите менеджера сеансов выйти из системы, он отправит сообщения "SaveYourself" всем клиентам, которые зарегистрировались в нем через XSMP.

программа не погибает; она завершает работу сама по себе, когда Xlib теряет соединение с сервером X11. (Я не уверен, есть ли у gtk возможность отключить это.)

0
отвечен grawity 2023-04-08 06:33

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх