CentOS 6.4 にてQt(4.8)によるアプリケーション開発をしています。

アプリケーションを起動させたまま「ログアウト」を行うと、そのままアプリケーションが終了してログアウトになりますが、これを抑止し、Gnomeセッションマネージャより終了確認を行わせる、もしくは、アプリケーションで側で決めた処理を終了させるまでログアウト(とアプリケーション終了)を行わせない、といったことをするには、どのようにすればよいでしょうか。

実現が望ましい優先順位としては、

  • セッションマネージャーより、セッション終了の問い合わせが行われる
  • アプリケーション側でexitするまで、ログアウト処理(セッション終了処理)は行われない
    と考えております。

当方で下記を試してみましたが、いずれも意図した挙動(ログアウトの抑止)とはならず、ログアウト実行に伴い確認や抑止等なしでアプリケーションがそのまま終了する挙動になりました。

  • SIGHUPとSIGTERMをトラップして、シグナルハンドラでwhile(1)ループを回す。
    1から64まで、トラップ可能なシグナルを全部トラップしても同様。
  • SIGHUPとSIGTERMをSIG_IGNする。
    1から64まで、無視可能なシグナルを全部無視しても同様。
  • アプリケーションのメインウィンドウ(QWidget)のcloseEvent をオーバーライドし、「本当に終了しますか?」という主旨のQMessageBoxを生成し、exec()して終了処理の進行を止める。

QtにはQSessionManagerという仕組みがあるという情報があり、それも試作してみようとしましたが、configure/buildされたライブラリではQSessionManager及びそれに関する処理が全て無効化されておりました。