Видео ролики бесплатно онлайн

Смотреть уз видео

Официальный сайт seoturbina 24/7/365

Смотреть видео бесплатно

solomenikm 22.07.2010 19:44

Есть вопрос!Выполнение комманды при переходе в бездейсвие

У меня такой вопрос: как сделать так чтобы при неактивности пользователя скажем в пять минут выполнялась команда "начать качать порно с трекера", а при появлении пользователя - "прекратить качать порно с трекера". Спасибо.


Тэги: cron torrent скрипт
+ 6 -
Похожие Поделиться

K-9 22.07.2010 19:48 #
+ 0 -
качать порно с трекера

Палитесь, товарищ. А вообще можно вроде как-то на заставку привесить
solomenikm 22.07.2010 19:55 #
+ 3 -
А вось welinux'у позиции по этому запросу в google подниму :)
Как можно? И чтоб он еще и при закрытии заставки вторую команду выполнил...
razum2um 22.07.2010 20:22 #
+ 0 -
бинго :)
man xscreenserver
programs (class Programs)
The graphics hacks which xscreensaver runs when the user is idle. The value of this
resource is a multi-line string, one sh-syntax command per line. Each line must contain
exactly one command: no semicolons, no ampersands.

чьёрт, оказывается обратная задача решается проще...
razum2um 22.07.2010 20:01 #
+ 3 -
хор вопрос. крон тут не при чем. это не расписание. это раз
а я делал такое для себя: мониторинг своей активности: какие окна открыты, сколько времени + графики в MatplotLib
принцип демона-клиента

демон: создается файл. при твоей активности демон дает отсрочку процессу, который его удаляет. Фишка в том, что я не знаю метода отследить активность, кроме как читать из /dev/input КАК ИНАЧЕ?!!

клиент: пока есть файл собирает пишет статистику.

вариантов демона два:
на баше, работает как форк бомба, родитель постоянно килляет детей
#!/bin/bash

# please, cat /proc/bus/input/devices
MOUSE='/dev/input/mouse0'
KEYBOARD='/dev/input/event2'

if < ! -r $MOUSE >; then
echo "No permissions to $MOUSE"
exit 1
fi

if < ! -r $KEYBOARD >; then
echo "No permissions to $KEYBOARD"
exit 1
fi

FILE=/tmp/.awesome_is_watching
#this file keeps system think you're on
TIMEOUT=30
KILLING=/tmp/.kills

checker () {
touch $FILE
sleep $TIMEOUT
rm $FILE &>/dev/null
}

while true; do
checker &
CHECKER_PID=$!
: > $KILLING

(cat $MOUSE | od -N 3 > $KILLING) &
MOUSE_CHK_PID=$!

(cat $KEYBOARD | od -N 3 > $KILLING) &
KEYB_CHK_PID=$!

(while < `ps aux | grep 'mplayer\|vlc' | grep -v grep | wc -l` -eq 0 >; do sleep $TIMEOUT ;done; echo 'VIDEO!' > $KILLING) &
MPLAYER_CHK_PID=$!

while < `cat $KILLING | wc -l` -eq 0 >; do
sleep 1
done

# Now we can sleep as long as the checker would sleep
# "now" - "timestamp of $FILE" - $TIMEOUT

if < -e $FILE >; then
kill -9 $CHECKER_PID
TIMESTAP=`stat -c %X $FILE`
NOW=`date +%s`
NO_FORK=`expr $NOW - $TIMESTAP`
SEC_LEFT=`expr $TIMEOUT - $NO_FORK + 1`
sleep $SEC_LEFT
fi

kill -9 $KEYB_CHK_PID
kill -9 $MOUSE_CHK_PID
kill -9 $MPLAYER_CHK_PID
done

второй на питоне, использует очередь как сигнал для завершения треда, который собирается по таймауту убить файл активности.
#!/usr/bin/env python
#-*- coding: utf-8 -*-

import sys
import os
from threading import Thread
import Queue
import select
import time
#DEVICES = <'/dev/input/mouse0', '/dev/input/event3'>
DEVICES = <'/dev/input/mouse0', '/dev/input/event2'>

for d in DEVICES:
if not os.access(d, os.R_OK): sys.exit('No permissions to %s' % d)

FILE = '/tmp/.awesome_is_watching'
#this file keeps system think you're on
TIMEOUT = 30
KILLING = '/tmp/.kills'

KILL_POINTER = 0
KILL_ACTIVITY_CHECK = 0

def pointer(fd, kill_me_queue):
global KILL_POINTER
if not os.access(fd, os.F_OK):
open(fd, 'w').close()

try:
x = kill_me_queue.get(True, TIMEOUT)
#print 'break success!'
return 1
except Queue.Empty:
os.unlink(fd)
return 0

def activity_check(devices, signal_fd):
global KILL_POINTER
queue = Queue.Queue(1)
Thread(target=pointer, args=(signal_fd,queue)).start()

while 1:
rlist = <>
for i in devices:
rlist.append(open(i))
ret = select.select(rlist, <>, <>, 1)
#print ret
if ret<0>:
#print 'break!'
break
# Somthing active!
#KILL_POINTER = 1
queue.put('kill yourself!!')
return 0

if __name__ == "__main__":
while 1:
try:
activity_check(DEVICES, FILE)
except KeyboardInterrupt:
sys.exit()


а еще я гентушнег
razum2um 22.07.2010 20:06 #
+ 0 -
у тебя обратная ситуация. клиент должен проверять, что файла активности нет.
как-то так...
solomenikm 22.07.2010 20:12 #
+ 0 -
Ниче не понял в этих скриптах - буду разбираться. Вообще активность пользователя думал проверять по статусу в Pidgin (как сам статус в нем проверить пока не нашел).
razum2um 22.07.2010 20:16 #
+ 0 -
pidgin... нестандартно ;)
но как-то нечестно... давайте учитесь ;)
а скрипты только не вам, не воображате.
Вам спасибо, что я про них вспомнил ;)
razum2um 22.07.2010 20:17 #
+ 0 -
**не только вам**
PaulRed 22.07.2010 20:12 #
+ 0 -
Вопрос возможно не совсем в тему, но как можно ввести команду в консоли и заставить её выполниться через некоторое время?
uscr 22.07.2010 20:20 #
+ 2 -
Такая строка удалит домашние каталоги пользователей через 100500 секунд.
sleep 100500; rm -rf /home
Вопросы?
razum2um 22.07.2010 20:15 #
+ 0 -
sleep 30; your_cmd
your_cmd | at TIME

еще?
solomenikm 22.07.2010 20:18 #
+ 0 -
sleep 10 && your_cmd
А чем отличается от "sleep 30; your_cmd"?
razum2um 22.07.2010 20:24 #
+ 2 -
по Сtrl-C та что с амперсандами не выполнится вообще. с точкозапятой - выполнится раньше времени (по нажатию этому)
Space_indus 22.07.2010 20:17 #
+ 0 -
Улыбнуло)
Space_indus 22.07.2010 20:25 #
+ 0 -
Может быть http://welinux.ru/post/3497/ ?
kstep 22.07.2010 20:29 #
+ 1 -
Уже было, было это и не раз.

sudo apt-get install xautolock
man xautolock

И ещё тыц для юзеров zsh.

И хватит изобретать велосипеды.
solomenikm 22.07.2010 20:36 #
+ 0 -
Есть такая тема: есть папочка /usr/share/applications/screensavers/ откуда запускаются и прекращают свою работу заставки. Возможно можно как-то к заставкам нужные команды прикрутить?
Пример файла:

Encoding=UTF-8
Name=BioF
Comment=This is an attempt to recreate some of the work of William Latham. Take a look at the program 'organic art' at this site (http://www.artworks.co.uk).
TryExec=biof
Exec=biof -r
StartupNotify=false
Terminal=false
Type=Application
Categories=Screensaver
Space_indus 22.07.2010 20:56 #
+ 0 -
file test.sh

#!/bin/bash

while << `pgrep -c 'gnome-screensaver'` -eq 0 >>
do
sleep 10s
done

./kill_it || ./download_pron

exit

file kill_it

#!/bin/bash

while << `pgrep -c 'gnome-screensaver'` -eq 1 >>
do
while << `pgrep -c 'gnome-screensaver'` -eq 0 >>
do
pgrep "" | kill && exit
done
done


exit

P.S. Сильно не смеяться; Рассчитано на Gnome и возможно не работает, нет скрипта download_pron.
Space_indus 22.07.2010 21:00 #
+ 0 -
вот блин, не ту копию отправил.
file kill_it

pgrep "test.sh" | kill
pgrep "download_pron" | kill || pgrep "test.sh"
Space_indus 22.07.2010 21:07 #
+ 3 -
УДАЛИТЕ ЭТО!!! ТУТ КУЧА ОШИБОК!!!
Username 22.07.2010 20:57 #
+ 0 -
Емнип, в кде в настройке питания можно добавлять собственные скрипты для реакции на события. Событий там много - вкл/ выкл питание, нажатие кнопок питания, заряд батареи, закрытие крышки ноутбука, простои. ПОКОВЫРЯЙ @ СДЕЛАЙ.
solomenikm 22.07.2010 21:17 #
+ 0 -
Вот тут есть прикольная штука:
xset q | sed '/^Screen Saver:/,/^<^ >/ { s/.*timeout: *\(<0-9>*\).*/\1/; t }; d'
Как я понял она пишет ноль если "активен", в противном случаи - время простоя.
Из чего вытекает вот такой вот скрипт:
#!/bin/bash
while true; do
sleep 2
xset q | sed '/^Screen Saver:/,/^<^ >/ { s/.*timeout: *\(<0-9>*\).*/\1/; t }; d'
done

Не знаю одного: как передать значение xset q | sed '/^Scre... в переменную.
Есть идеи?
vkotovv 22.07.2010 21:30 #
+ 4 -
Ах вот что двигает open source вперед..
Space_indus 22.07.2010 21:37 #
+ 1 -
Благодаря прону, появился не только open source, но и все человечество))
opium_inside 23.07.2010 00:16 #
+ 1 -
thumb.png
Процесс мышления типичного молодого программиста. =) Вы меня извините ради б-га, я просто не удержался.
Space_indus 23.07.2010 11:58 #
+ 1 -
Я просто хотел сказать что нужно отслеживать работу скринсейвера, и зачем то попытался это реализовать... Больше так не буду :D
roignac 23.07.2010 00:32 #
+ 0 -
Можно сделать запуск скринсейвера через 5 минут, а уже к нему прикрутить свою команду. http://live.gnome.org/GnomeScreensaver/FrequentlyAskedQuestions#Is_there_a_way_to_perform_actions_when_the_screensaver_activates_or_deactivates.3F__Or_when_the_session_becomes_idle.3F
leonike 23.07.2010 09:31 #
+ 0 -
не знаю, насколько правильно, но я бы сделал это через dbus, именно для этого он и был придуман. org.freedesktop.ScreenSaver, отслеживать сигнал ActiveChanged. не?
leonike 23.07.2010 10:26 #
+ 0 -
что-то типа такого:
# -*- coding: utf-8 -*-
import os, dbus, dbus.glib

def active_changed_slot(f):
if f == 1:
#выполняем деяствия, при активации скринсейвера
elif f == 0:
#ну вы поняли

dbus_loop = dbus.glib.DBusGMainLoop()
bus = dbus.SessionBus(mainloop=dbus_loop)

screensaver_service = bus.get_object('org.freedesktop.ScreenSaver', '/ScreenSaver')
bus.add_signal_receiver(active_changed_slot, 'ActiveChanged', 'org.freedesktop.ScreenSaver', 'org.freedesktop.ScreenSaver', '/ScreenSaver')

os.fork()
leonike 23.07.2010 10:27 #
+ 0 -
только должен быть установлен python-dbus
leonike 23.07.2010 11:24 #
+ 0 -
что-то я напортачил
так лучше:
# -*- coding: utf-8 -*-
import dbus, dbus.glib, gtk

def active_changed_slot(f):
if f == 1:
pass
#выполняем деяствия, при активации скринсейвера
elif f == 0:
pass
#ну вы поняли

dbus_loop = dbus.glib.DBusGMainLoop()
bus = dbus.SessionBus(mainloop=dbus_loop)

screensaver_service = bus.get_object('org.freedesktop.ScreenSaver', '/ScreenSaver')
bus.add_signal_receiver(active_changed_slot, 'ActiveChanged', 'org.freedesktop.ScreenSaver', 'org.freedesktop.ScreenSaver', '/ScreenSaver')

gtk.main()
solomenikm 23.07.2010 12:33 #
+ 0 -
А вы пробовали этот скрипт запускать? У меня выдает ошибку синтаксиса в четвертой строке.
leonike 23.07.2010 12:42 #
+ 0 -
пробовал, работает

запускал вот это:
# -*- coding: utf-8 -*-
import dbus, dbus.glib, gtk

def active_changed_slot(f):
if f == 1:
print 'active'
elif f == 0:
print 'inactive'

dbus_loop = dbus.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus(mainloop=dbus_loop)

screensaver_service = bus.get_object('org.freedesktop.ScreenSaver', '/ScreenSaver')
bus.add_signal_receiver(active_changed_slot, 'ActiveChanged', 'org.freedesktop.ScreenSaver', 'org.fr$

gtk.main()
leonike 23.07.2010 12:46 #
+ 0 -
неправильно скопировал
вот это запускал, все работает:
# -*- coding: utf-8 -*-
import dbus, dbus.glib, gtk

def active_changed_slot(f):
if f == 1:
print 'active'
elif f == 0:
print 'inactive'

dbus_loop = dbus.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus(mainloop=dbus_loop)

screensaver_service = bus.get_object('org.freedesktop.ScreenSaver', '/ScreenSaver')
bus.add_signal_receiver(active_changed_slot, 'ActiveChanged', 'org.freedesktop.ScreenSaver', 'org.freedesktop.ScreenSaver', '/ScreenSaver')

gtk.main()
leonike 23.07.2010 12:51 #
+ 0 -
версия python какая? у меня 2.6.5
solomenikm 23.07.2010 12:56 #
+ -1 -
Нашел такой скрипт на perl
my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='SessionIdleChanged'\"";

open (IN, "$cmd |");

while (<IN>) {
if (m/^\s+boolean true/) {
print "*** Session is idle ***\n";
} elsif (m/^\s+boolean false/) {
print "*** Session is no longer idle ***\n";
}
}


Не работает. Не могу понять в чем причина. Есть идеи?
vyazovoi 24.07.2010 16:34 #
+ 0 -
запускай раз в минуту xprintidle, проверяй вывод и выполняй комманду. У торренты качает transmission на роутере так что можно рулить им через transmission-remote

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн