LINUX.ORG.RU

Как правильно ловить неактивность X-сервера?

 , ,


0

1

Привет. Проще говоря, нужно таймер неактивности реализовать. И когда пользователь неактивен определённое время, то заблочить своё приложение. Есть какие-нибудь истории успеха в данном деянии?

KDE делает это через XCB, мне бы напрямую через X11 API.

Покопался в исходниках xscreensaver, разработчику очень не нравится x11, о чём свидетельствует его комментарий:

   /* What an amazingly shitty design.  Not only does Xt execute timeout
     events from XtAppNextEvent() instead of from XtDispatchEvent(), but
     there is no way to tell Xt to block until there is an X event OR a
     timeout happens.  Once your timeout proc is called, XtAppNextEvent()
     still won't return until a "real" X event comes in.

     So this function pushes a stupid, gratuitous, unnecessary event back
     on the event queue to force XtAppNextEvent to return Right Fucking Now.
     When the code in sleep_until_idle() sees an event of type XAnyEvent,
     which the server never generates, it knows that a timeout has occurred.
   */

★★★★★

Посмотри исходники xprintidle. Там тоже забавные комментарии, впрочем как и решение. А если убрать обоаботку dpms, то все совсем просто.

bj
()
Ответ на: комментарий от bj

Я тоже использую только XScreenSaverQueryInfo, works for me.

bj
()
Ответ на: комментарий от anonymous

напрямую через X11 API

оно реализовано через xcb

Анон ты определись таки, курица или яйко!

http://en.wikipedia.org/wiki/XCB

XCB (X protocol C-language Binding) is a library implementing the client-side of the X11 display server protocol.

UVV ★★★★★
() автор топика
Ответ на: комментарий от EXL

Спасибо. Судя по исходникам, это то же самое. Внутри используется xScreenSaverQueryInfo.

UVV ★★★★★
() автор топика
Ответ на: комментарий от bj

Ну и libxss уже, как правило, установлен.

На моих рабочих машинах (CentOS 6.x) не установлен по умолчанию.

UVV ★★★★★
() автор топика

KDE делает это через XCB, мне бы напрямую через X11 API.

ахм, а разве xcb - это не вид сбоку на X11?

Stil ★★★★★
()
Ответ на: комментарий от Stil

ой, извините :(

Прощаю, ступай с миром.

UVV ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Занятно, не знал.
Спасибо, анон.

UVV ★★★★★
() автор топика

KDE делает это через XCB, мне бы напрямую через X11 API.

Программазм лучше включить, когда совсем тяжко. Смотри xidle и xautolock

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

xidle uses the XScreenSaver(3) extension to receive inactivity events when a timeout is specified, running a specific program after the elapsed time. xidle also monitors the very corner of the given position for pointer activity and runs a program if the pointer sits there for more than the specified number of seconds. This behavior is always present, whether -timeout is specified or not.

То же самое, что и выше посоветовали.

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

То же самое, что и выше посоветовали.

Я имел в виду не то, что XScreenSaver используется (другого механизма и нет), а то, что для решения задачи, может быть, не надо писать программу самому, а воспользоваться тем, что есть, чтобы свои действия по событию выполнять из скрипта, например. Вот и все, что я имел в виду. Дальше уже сам посмотришь.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Я понял, спасибо. У меня в любом случае программа, поэтому мне нужен код :)

UVV ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.