Как выполнить что-нибудь при закрытии VNC вьюера на другом компьютере?

Компьютер управляется удаленно, через VNC-вьюеры (из Windows или другого Linux). При закрытии вьюера на удаленном компьютере нужно, чтобы на этом выполнилась команда для ухода в спящий режим (pm-hibernate). Я вижу, что подключение и отключение вьюера регистрируется на этом компьютере в списке событий, его там видно - но как привязать к конкретному событию выполнение команды с правами суперпользователя?

-1
Гость - 12 Октябрь, 2015 - 19:18

Планировщик?

+1
lord_i - 12 Октябрь, 2015 - 22:45
Изображение пользователя lord_i.

По хрону раз скажем в минуту проверять есть ли подключение к порту vnc.
Скрипт в две строчки.

0
Gourmet - 13 Октябрь, 2015 - 00:38

Да как-то вот не хочется чтобы он занимался ерундой даже раз в минуту. Событие хочется словить. И мне проще программу на Qt/C++ написать и собрать, чем скрипт. Знать бы, как это событие поймать.

0
lord_i - 13 Октябрь, 2015 - 11:15
Изображение пользователя lord_i.

Да как-то вот не хочется чтобы он занимался ерундой даже раз в минуту.

Дело ваше. Программа, постоянно следящая за событием будет "заниматься ерундой" ничуть не меньше.

0
Gourmet - 13 Октябрь, 2015 - 15:08

На самом деле, меньше. Обработчик события вызывается только при возникновении события, а не раз в минуту. В остальное время процессорный ресурс он не отнимает.

0
DarkneSS - 13 Октябрь, 2015 - 17:06
Изображение пользователя DarkneSS.

Напишите сервис и слушайте дибас.

+1
Chibiko - 13 Октябрь, 2015 - 16:33
Изображение пользователя Chibiko.

О, пошёл флуд и минуса.
Есть cron - прекрасная утилита.
В неё можно поместить на выполнение скрипт каждую минуту.
А в скрипте прописать:

1) Проверка на файлик (например /tmp/x11vnc.$username) и vnc - не запущено, файлика нет - ничего не делаем.
2) VNC запущен, но файлика нет - создаём файлик (touch /tmp/x11vnc.$username).
3) VNC не запущено, но файлик есть - впадаем в спячку, удаляем файлик (rm /tmp/x11vnc.$username).

Как-то так. Я бы поподробнее расписал, но мне это не нужно. Это быстренькая блок-схемка, по которой можно скриптик накалякать по пырому за 5 минут.

+1
lord_i - 13 Октябрь, 2015 - 17:43
Изображение пользователя lord_i.

Зачем файлы?
if netstat -atpn | grep 5900 | grep ESTABLISHED > /dev/null; then
  echo "vnc present"
  # ничего не делаем
else
  echo "vnc absent"
  # тушим свет любимым способом
fi

* 5900 - дефолтный порт vnc. В реальной системе может быть другим, зависит от настроек. Вместо номера порта можно вписать название процесса vnc
и всё собственно ...

0
Chibiko - 13 Октябрь, 2015 - 18:02
Изображение пользователя Chibiko.

Эмн.. т.е. чел включает комп, но не включает vnc. После чего сразу он уходит в гибернацию, так шоле?
Или я слишком много надумал? И иксы работают только когда работает vnc?

0
lord_i - 13 Октябрь, 2015 - 18:45
Изображение пользователя lord_i.

Компьютер управляется удаленно, через VNC-вьюеры
Я так понял что как только он включается сразу сессия vnc подымается...
ТЗ не было собственно ... Я, так сказать, warhead набросал. Нюансы можно добавлять.

0
Gourmet - 14 Октябрь, 2015 - 17:56

Не уверен, что VNC поднимается раньше, чем сработает этот скрипт. Поэтому, чтобы не было нюансов, надо не проверять наличие сервиса, а ловить его завершение. Наверно лучший способ был бы с обработкой сигналов DBUS, как тут выше написали. Но особо нет времени разбираться с этим. В Qt есть поддержка DBUS, но я с этим не работал, и документация на QDBus мрачная.

0
MacLeod - 15 Октябрь, 2015 - 06:20
Изображение пользователя MacLeod.

Как вариант - вкорячить дополнительный функционал в сам vnc-сервер и пересобрать =)
Прямо в обработчик события отключения клиента подождать сколько-то секунд реконнекта и если не последовало - спать.
Предлагаю такое решение только потому, что добавочный код реально копеечный.

0
Gourmet - 15 Октябрь, 2015 - 14:05

А может там уже есть такая возможность? VNC сервер родной из KDE - "Совместный доступ к рабочему столу" версия 4.13.2. Но в гуе ничего такого нет. Может можно его ключами настроить? Не нахожу ничего в Инете.

0
MacLeod - 16 Октябрь, 2015 - 12:56
Изображение пользователя MacLeod.

Ну, еще проще. Исходники этой штуки можно получить через
apt-get source krfb
и дальше научить "эту собаку любым фокусам" =)

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры