Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Termit от Декабрь 02, 2011, 18:53



Название: Выход из screensaver-a
Отправлено: Termit от Декабрь 02, 2011, 18:53
Есть необходимость из приложения которое слушает com порт по определённому событию прерывать запущенный screensaver.

В сесии KDE (версия 4.7.2), X Server 1.10.4, Ubuntu 11.10. Замечательно работает решение

Код
C++ (Qt)
QDBusMessage m = QDBusMessage::createMethodCall("org.freedesktop.ScreenSaver",
                                                 "/ScreenSaver",
                                                 "org.freedesktop.ScreenSaver",
                                                 "SimulateUserActivity");
QDBusConnection::sessionBus().send(m);
 

И вот сегодня обнаружил, что для Gnome\OpenBox и т.д., X Server 1.7.7, Debian squeezy решение не работает т.к. сервиса org.freedesktop.ScreenSaver совсем нет. Не искал но подозреваю, что дело в версии Х.

Собственно сам вопрос. Каким образом можно прервать работающий screensaver?

Интересует решение только для Linux.
На всякий случай: "kill -9" не решение :)


Название: Re: Выход из screensaver-a
Отправлено: GreatSnake от Декабрь 02, 2011, 21:23
См. здесь (http://www.prog.org.ru/topic_19960_0.html).


Название: Re: Выход из screensaver-a
Отправлено: Termit от Декабрь 03, 2011, 02:32
См. здесь (http://www.prog.org.ru/topic_19960_0.html).
Я искал по форуму прежде чем написать. В том числе смотрел и там.
Мне не нужно блокировать запуск, мне нужно при наступлении события прервать работу уже запущенного screensaver-а.

Может я чего-то там не дочитал? Ну так ткните в то место которое я пропустил.


Название: Re: Выход из screensaver-a
Отправлено: Alex Custov от Декабрь 03, 2011, 15:26
Может я чего-то там не дочитал? Ну так ткните в то место которое я пропустил.

Самое простое - вызвать xscreensaver-command -deactivate. Сложнее - сделать то же самое, только через вызовы функций.


Название: Re: Выход из screensaver-a
Отправлено: GreatSnake от Декабрь 04, 2011, 20:09
Код
C++ (Qt)
int XResetScreenSaver(Display *display);


Название: Re: Выход из screensaver-a
Отправлено: Termit от Декабрь 06, 2011, 11:36
Код
C++ (Qt)
int XResetScreenSaver(Display *display);
Сделал clone всего что живет в
Код:
git://git.videolan.org/vlc.git
и
Код:
grep -Ri XResetScreenSaver ./
ничего не находит
точно так называется функция?


Название: Re: Выход из screensaver-a
Отправлено: GreatSnake от Декабрь 06, 2011, 11:39
точно так называется функция?
Да, только vlc исходники тебе уже не нужны)


Название: Re: Выход из screensaver-a
Отправлено: Termit от Декабрь 06, 2011, 11:41
Да, только vlc исходники тебе уже не нужны)
Годится :-)

Это Х Server-а функция?


Название: Re: Выход из screensaver-a
Отправлено: Termit от Декабрь 06, 2011, 11:44
Это Х Server-а функция?
Xlib
Буду медитировать