Wie kann die Linux-Python-Anwendung die Beendigung beim Abmelden des Benutzers korrekt handhaben?

0

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 versucht, sowohl POSIX-Signale als auch DBUS-Benachrichtigungen zu verarbeiten, aber nichts hat 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 mit Gnome.

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

tuxpoldo
quelle

Antworten:

0

Dies geschieht traditionell mit XSMP und libSM. Wenn Sie einen Sitzungsmanager auffordern, 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.)

Grawity
quelle
Haben Sie eine Idee, wie Sie dies in Python implementieren können? Ich fand bis jetzt nichts brauchbares ....
Tuxpoldo