The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Определение Idle состояния X сесии"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (GUI, XWindow, Qt, GTK)
Изначальное сообщение [ Отслеживать ]

"Определение Idle состояния X сесии"  +/
Сообщение от anton7811 (ok) on 22-Апр-11, 15:52 
Может кто сталкивался, как определить, что сесия (gnome/kde) находится в состоянии idle?

Конкретно сейчас борюсь с Gnome. Ранее в dbus у screensaver были методы GetSessionIdle() GetSessionIdleTime(), но сейчас они признаны устаревшими. GetActive() показывает true только когда запущен screensaver, но его в настройках и вовсе можно отключить. А интересует именно момент когда нету активности (мышка, клавиатура) пользователя. Сам screensaver как-то может ведь єто отследить. Можно ли такое без C/C++ сделать, например читать гдето тот же dbus или еще что? Если нет, то рассмотрю варианты и на C/C++.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Определение Idle состояния X сесии"  +/
Сообщение от anton7811 (ok) on 22-Апр-11, 18:21 
Способ получения результата без C/C++ актуален.

Но паралельно, если никто не знает другого варианта, может подскажете как сделать что б нижеприведеная программа работала корректно не только на дисплее :0, но и на других, таких как удаленные сеансы.

#include <stdio.h>
#include <X11/extensions/scrnsaver.h>

main() {
    XScreenSaverInfo *info = XScreenSaverAllocInfo();
    Display *display = XOpenDisplay(0);

    XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);
    printf("%lu ms\n", info->idle);
}


Собственно сразу оговорюсь, что я с C/C++ не знаком, поєтому если можно коментируйте поподробней.
Заранее благодарен!

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Определение Idle состояния X сесии"  +/
Сообщение от gpl77 (ok) on 22-Апр-11, 19:06 
> Но паралельно, если никто не знает другого варианта, может подскажете как сделать
> что б нижеприведеная программа работала корректно не только на дисплее :0,
>     Display *display = XOpenDisplay(0);
> коментируйте поподробней.

все просто

man XOpenDisplay
Display *XOpenDisplay(char *display_name);

..     XOpenDisplay connects your application to the X
       server through TCP or DECnet communications protocols, or through some
       local inter-process communication protocol.  If the hostname is a host
       machine name and a single colon (:) separates the hostname and display
       number, XOpenDisplay connects using TCP streams.  If the hostname is
       not specified, Xlib uses whatever it believes is the fastest transport.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Определение Idle состояния X сесии"  +/
Сообщение от pavlinux (ok) on 22-Апр-11, 21:08 
> Способ получения результата без C/C++ актуален.
> Но паралельно, если никто не знает другого варианта, может подскажете как сделать
> что б нижеприведеная программа работала корректно не только на дисплее :0,
> но и на других, таких как удаленные сеансы.


#include <stdio.h>
#include <X11/extensions/scrnsaver.h>

char *displays[] = { NULL, "micosoft.com:0", "oracle.com:0", "8.8.8.8:0" };

int main(void) {

        XScreenSaverInfo *info = XScreenSaverAllocInfo();

        for (int i = 0; i < 4; i++) {

                Display *display = XOpenDisplay(displays[i]);
                if (display != NULL) {
                        XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);
                        printf("%lu ms\n", info->idle);
                }
        }
return 0;
}

как-то так.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

5. "Определение Idle состояния X сесии"  +/
Сообщение от anton7811 (ok) on 27-Апр-11, 14:43 
Спасибо за ответ.

Получил такое вот сообщение на удаленной сесии:

Xlib:  extension "MIT-SCREEN-SAVER" missing on display ":1019.0".

Похоже что screensaver впринципе на удаленном сеансе nx не работает (на vnc еще не проверял). Пока есть другие задачи, но к єтому еще вернусь, еще и поищю информацию по нижнему посту.

Была мысль пошарится по исходникам pidgin, но он как оказалось тоже не определяет idle на удаленной сесии.

Если что-то получится отпишу.


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Определение Idle состояния X сесии"  +/
Сообщение от pavlinux email(ok) on 27-Апр-11, 22:16 
> Xlib:  extension "MIT-SCREEN-SAVER" missing on display ":1019.0".

MIT-SCREEN-SAVER - это расширение Xorg (встроенное), видимо оно отключено,
например через

# xset s off
или стартует без него
# Xorg -extension MIT-SCREEN-SAVER  

> Была мысль пошарится по исходникам pidgin, но он как оказалось тоже не
> определяет idle на удаленной сесии.

Вам нужно Idle именно у Xorg? А то для истинного idle давно уже придумали watchdog_и,
программные иль аппаратные.


Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

3. "Определение Idle состояния X сесии"  +/
Сообщение от pavlinux (ok) on 22-Апр-11, 20:33 
> Может кто сталкивался, как определить, что сесия (gnome/kde) находится в состоянии idle?
> Конкретно сейчас борюсь с Gnome. Ранее в dbus у screensaver были методы
> GetSessionIdle() GetSessionIdleTime(), но сейчас они признаны устаревшими. GetActive()
> показывает true только когда запущен screensaver, но его в настройках и
> вовсе можно отключить. А интересует именно момент когда нету активности (мышка,
> клавиатура) пользователя. Сам screensaver как-то может ведь єто отследить. Можно
> ли такое без C/C++ сделать, например читать

Google: xlock, xautolock, xlockmore

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру