отслеживание действий пользователя в bash (как узнать, были ли нажаты клавиши?)
Модераторы: /dev/random, Модераторы разделов
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
отслеживание действий пользователя в bash
Хотелось бы что-бы скрипт на bash(очень медленный), работал только тогда, когда меня нет за компом. Например если я не нажимал 40 минут на кнопки. Как бы это проще и переносимо отследить? Например screensaver это как-то отслеживает... Можно ли на bash?
-
Mage-Warrior
- Сообщения: 869
- Статус: Семь раз понюхай, один раз откуси!
- ОС: SlackWare 12.1
Re: отслеживание действий пользователя в bash
Появилась одна идея... воспользоваться event-файлами. У меня они в /dev/input/. Какое устройство, на каком event-е, можно узнать в /proc/bus/input/devices. В строке типа такой
Handlers=kbd event0
... Вы и найдете номер event-файла-устройства. Есть одно НО - файлы доступны для чтения только root-у (что, несомненно, логично). Дальше я подсказать не могу, так как сам не знаю, но предполагаю, что уже есть демон, который оповещает о получении событий.
*- Большинство проблем, дружок, завсегда покажет лог! -*
Спасибо сказали:
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: отслеживание действий пользователя в bash
не совсем понял как его прочитать... команда cat что-то не читает если так
Код: Выделить всё
#!/bin/sh
while true
do
date >> event_log.txt
cat /dev/input/event0 >> event_log.bin
sleep 1
doneUPD:
не, читает... только непонятно как-то... дату всего 2 раза скрипт вывел...
-
Mage-Warrior
- Сообщения: 869
- Статус: Семь раз понюхай, один раз откуси!
- ОС: SlackWare 12.1
Re: отслеживание действий пользователя в bash
Это третья причина, по которой нужен демон.
Первая, права!
Вторая, вывод действий пользователя в файл, который опять же для пользователя должен (обязан) быть недоступен.
Третья, команда cat прерывает свое выполнение либо, когда приходит сигнал о завершении ее работы, либо при встрече с EOF. Поэтому в файл сыплются все действия, но... команда реагирует не на каждый первый упавший байт.
По третьей причине могу порекомендовать использовать команду dd по типу:
В таком случае чтение будет происходить в null (это лучше, чем в файл) и будет завершаться при прочтении одного байта из event0. Кстати, а что у Вас event0?
P.S. Хотелось бы все-таки найти демон, который просто сообщает о событиях (не об их содержании). Чувствую своей здоровой (от слова "здоровье"
) печенью, что должен быть такой. Помогайте, форумчане!
Первая, права!
Вторая, вывод действий пользователя в файл, который опять же для пользователя должен (обязан) быть недоступен.
Третья, команда cat прерывает свое выполнение либо, когда приходит сигнал о завершении ее работы, либо при встрече с EOF. Поэтому в файл сыплются все действия, но... команда реагирует не на каждый первый упавший байт.
По третьей причине могу порекомендовать использовать команду dd по типу:
Код: Выделить всё
dd if=/dev/input/event0 of=/dev/null bs=1 count=1В таком случае чтение будет происходить в null (это лучше, чем в файл) и будет завершаться при прочтении одного байта из event0. Кстати, а что у Вас event0?
P.S. Хотелось бы все-таки найти демон, который просто сообщает о событиях (не об их содержании). Чувствую своей здоровой (от слова "здоровье"
*- Большинство проблем, дружок, завсегда покажет лог! -*
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: отслеживание действий пользователя в bash
$ xdg-screensaver status
выдаёт статус — запущен ли в данный момент скринсейвер.
если не сработало (у меня — нет), смотрим http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=511248 и видим магическую команду:
нули выдало во время работы скринсейвера.
если результат больше нуля, скринсейвер не работает.
p.s. а ещё есть nice.
выдаёт статус — запущен ли в данный момент скринсейвер.
если не сработало (у меня — нет), смотрим http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=511248 и видим магическую команду:
Код: Выделить всё
xset q | sed '/^Screen Saver:/,/^[^ ]/ { s/.*timeout: *\([0-9]*\).*/\1/; t }; d'тест
$ while true; do xset q | sed '/^Screen Saver:/,/^[^ ]/ { s/.*timeout: *\([0-9]*\).*/\1/; t }; d'; sleep 5; done
600
600
0
0
0
0
600
^C
$если результат больше нуля, скринсейвер не работает.
p.s. а ещё есть nice.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Спасибо сказали:
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: отслеживание действий пользователя в bash
выдаёт всегда enabled
xset q всегда 0
ага. а есть ещё "трудноуловимый баг в ядре", из-за которого всё тормозит, хотя загрузка 5%
ну а так-как 5%, то nice я как-то не ощущаю...
-
svary
- Сообщения: 49
- ОС: Linux FC-9
Re: отслеживание действий пользователя в bash
Может быть просто анализировать загрузку процессора ? например, вот так :
Скажем, раз в 10 минут вызываем эту ф-цию, и если загрузка за последние 15 минут ниже порога - запускаем Ваш процесс...
Код: Выделить всё
#include <sys/sysinfo.h>
int sysinfo(struct sysinfo *info);
struct sysinfo {
long uptime; /* секунд с момента начальной загрузки */
[b]unsigned long loads[3]; /* средняя загрузка системы за 1, 5 и 15 минут */[/b]
unsigned long totalram; /* общее количество оперативной памяти */
unsigned long freeram; /* объём доступной памяти */
unsigned long sharedram; /* объём разделяемой памяти */
unsigned long bufferram; /* память, используемая под буферы */
unsigned long totalswap; /* общий объём своппинга */
unsigned long freeswap; /* доступно памяти на своппинге */
unsigned short procs; /* количество текущих процессов */
unsigned long totalhigh; /* общий объём старшей (high) памяти */
unsigned long freehigh; /* доступный объём старшей (high) памяти */
unsigned int mem_unit; /* Размер модуля памяти в байтах */
char _f[20-2*sizeof(long)-sizeof(int)]; /* остаток для libc5 */
};Скажем, раз в 10 минут вызываем эту ф-цию, и если загрузка за последние 15 минут ниже порога - запускаем Ваш процесс...
-
Mage-Warrior
- Сообщения: 869
- Статус: Семь раз понюхай, один раз откуси!
- ОС: SlackWare 12.1
Re: отслеживание действий пользователя в bash
Не. Это не к задаче. Средняя загрузка процессора может держаться на уровне далеком от 0, даже если пользователь уже полночи спит. Пример? Задача бакапа по cron, выполнение любого длительного процесса не требующего участия пользователя. И обратное возможно - пользователь не торопясь набирает текст в mcedit.
*- Большинство проблем, дружок, завсегда покажет лог! -*
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: отслеживание действий пользователя в bash
не пойдёт -
Mage-Warrior писал(а): ↑26.05.2009 08:33Не. Это не к задаче. Средняя загрузка процессора может держаться на уровне далеком от 0, даже если пользователь уже полночи спит. Пример? Задача бакапа по cron,
мне и надо бекап по crond. только что-бы если я не сплю - бекап откладывался.
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: отслеживание действий пользователя в bash
Код: Выделить всё
[portnov]$ apt-cache show xautolock
Package: xautolock
Priority: optional
Section: x11
Installed-Size: 92
Maintainer: Roland Stigge <stigge@antcom.de>
Architecture: i386
Version: 1:2.1-7.1
Depends: libc6 (>= 2.7-1), libx11-6, libxext6, libxss1
Recommends: xlockmore | xtrlock | xscreensaver
Filename: pool/main/x/xautolock/xautolock_2.1-7.1_i386.deb
Size: 29356
MD5sum: 7d92a3c40668c7624f40e88c700f2bd7
SHA1: 822f35e5224cf745eb2243e1a72fec4aa1de0362
SHA256: 84a86ba261435e34477ab6387a2b7a319e40184b41a19d765c010af7bcb6cb70
Description: Program launcher for idle X sessions
Xautolock monitors input devices under the X Window System, and launches a
program of your choice if there is no activity after a user-configurable
period of time. You can use this to automatically start up a screen locker
if you have left your computer unattended for some period of time. The
program launched need not be a screen locker such as xlock.
Tag: hardware::input, interface::x11, role::program, scope::utility, uitoolkit::gtk, use::monitor, x11::application, x11::screensaver?
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: отслеживание действий пользователя в bash
не хочу ещё одну блокировку ставить. уже есть xscreensaver, он прекрасно работает. проблему решил так:
Код: Выделить всё
flag=""
while [ "$flag" = "" ]
do
sleep 444
flag=`sudo -uuser xscreensaver-command -time | sed -rn 's/^[^:]+: screen locked since //p'`
doneбекап запускается по расписанию, но не сразу, а через 444 сек после блокировки