Se você estiver usando o D-Bus em seu aplicativo, poderá ouvir o sinal SessionOver na interface org.gnome.SessionManager. Com o C ++ Qt5, seu código seria algo como isto:
QDBusConnection dbus = QDBusConnection::sessionBus();
dbus.connect("org.gnome.SessionManager", "",
"org.gnome.SessionManager", "SessionOver",
this, SLOT(handle_sessionOver());
Referências:
- Documentação do gerenciador de sessões do GNOME
- Classe QDBusConnection (não se esqueça de adicionar "QT + = dbus" ao seu qmake)