Wie kann die Python-Anwendung von Linux die Beendigung der Benutzerabmeldung korrekt verarbeiten?

603
tuxpoldo

Ich habe eine Linux-GUI-Anwendung in Python geschrieben, die einige Bereinigungsaufgaben ausführen muss, bevor sie beendet wird, wenn sich der Benutzer abmeldet. Leider scheint es, dass beim Abmelden alle Anwendungen beendet werden. Ich habe sowohl versucht, mit POSIX-Signalen als auch mit DBUS-Benachrichtigungen umzugehen, aber es hat nichts funktioniert. Irgendeine Idee, was ich falsch gemacht haben könnte?

Beim Start der Anwendung registriere ich einige Beendigungshandler:

# 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) 

Wenn sich der Benutzer abmeldet, werden weder self.on_signal_term noch self.on_session_disconnect aufgerufen.

Das Problem tritt in mehreren Szenarien auf: Ubuntu 14.04 mit Unity, Debian Wheezy with Gnome.

Vollständiger Code: https://github.com/tuxpoldo/btsync-deb/tree/master/btsync-gui

0

1 Antwort auf die Frage

0
grawity

Traditionell erfolgt dies mit XSMP und libSM. Wenn Sie einen Sitzungsmanager bitten, sich abzumelden, sendet er "SaveYourself" -Nachrichten an alle Clients, die sich über XSMP bei ihm registriert haben.

Das Programm wird jedoch nicht getötet; Es wird von selbst beendet, wenn Xlib die Verbindung zum X11-Server verliert. (Ich bin nicht sicher, ob gtk eine Option hat, um das zu deaktivieren.)

Irgendeine Idee, wie man dies in Python umsetzt? Ich habe bis jetzt nichts Nützliches gefunden .... tuxpoldo vor 10 Jahren 0