Обработать завершение сессии в Linux

September 12th, 2011 Begemot

Пытаюсь тут портировать на линукс свой менеджер заметок написанный на с++ and wxWidgets. Столкнулся с тем что не могу отследить событие когда пользователь уходит – logout, reboot, shut down. А мне то надо как-то данные сохранять. Под виндой, есть EVT_QUERY_END_SESSION, библиотека ловит виндовое сообщение и сообщает мне о событии, пускай с большими проблемами но что-то сделать можно – сохранить данные, корректно закрыть приложение, заповним положение\размеры окна и мелкие настройки. Под макосом не пробовал, но говорят работает. Под Линуксом нет – в инете полно вопросов, жалоб – но решения нет.

Пытался использовать средства gtk (или posix, или чье это там), типа

#include <stdio.h> // for File I/O #include <signal.h> // for signals #include <unistd.h> // for sleep() void handler(int sig) { /* Just print to stderr and redirect 2>> test.txt in the shell */ fprintf(stderr, "got %d\n", signal); signal(sig, handler); // let signal be caught again } int main() { signal(SIGTERM,handler); signal(SIGINT,handler); signal(SIGQUIT, handler); // Maybe we're getting QUIT first? signal(SIGHUP, handler); // If the terminal closes, we might get this signal(SIGPIPE, handler); // Don't know why we'd get this, but check anyway while(1) // loop forever with most signals trapped, impolitely waiting for a kill -9 ;)

// run }

Не фига, когда руками прибиваю приложение Ctrl+c в терминале или kill … срабатывает, когда вырубаю систему нет, сообщения не получаю. В инете все пишут тоже самое не работает.  Code::Blocks тоже не сохраняет данные, если что-то изменить и сделать logout.  

Получается линукс, или убунта, или гном не дает возможность приложению узнать что сессия завершается и корретно завершить работу, сохранив данные. Вот вам и Linux with a human face 🙁

Есть правда какой-то EggSMClient в виде сорцов, LGPL, его например использует GEdit и молодец, корректно обрабатывает все. Но что-то про EggSMClient ни упоминаний толком, ни документации – особенно ничего не находится, а так разобратся без бутылки не получается. Печально все это 🙁


Между делом попробовал wxWidgets под Ubuntu

December 7th, 2009 Begemot

Выпало тут 4 часа в течении которых можно было работать только на ноуте. А там у меня недавно установленная убунта 9.10 х64. Сначала немного побаловался, поразбирался с системой (я вроде доволен) потом решил попробовать вх.

Поставил svn, выкачал trunk из репозитория, вспомнил о том, что как компилировать wxWidgets на линуксе я уже писал, по этой же инструкции собрал библиотеку, собрал пару примеров – clipboard, auidemo – и представляете себе, работает! 🙂

Правда, есть и плохой ньюанс, поработав несколько часов в линуксе, всерьоз задумался а стоит ли туда лезть и портировать свои утилиты, энтузиазма немного поубавилось…


Установка под Линукс

December 18th, 2007 Begemot

Ссылка на пост в моем основном блоге как я ставил wxWidgets под Ubuntu

Posted in Использование | Tags: ,
Comments Off on Установка под Линукс