Прокси для автоматического сохранения определенных URL-адресов

Хотя EDIT 2 позволяет заставке запускать и возобновлять службу autosuspend при удалении файла запрета, как отмечено выше, это будет через 30 минут после удаления файла, когда система будет приостановлена.

Один из возможных решение - отключить встроенную автоматическую заставку и автоматическую приостановку функций и реализовать их самостоятельно и выбрать поведение таймера по мере необходимости. Команда xprintidle (возможно, вам придется установить это) печатает количество миллисекунд, для которых не было активности клавиатуры или мыши. Это открывает несколько возможностей. Я реализовал следующий менеджер неактивности в python (не слишком большой скрипт bash). Особенности включают в себя установку команды, тайм-аут и запрещение файла (я называю его блокировкой) для заставки и / или autosuspend. Кроме того, есть возможность выбрать, следует ли перезапускать таймер неактивности при удалении файла запрета или нет (поведение может быть разным для приостановки и заставки). Я попытался сделать использование понятным в заметках, но если что-то неясно, спросите.

#!/usr/bin/python

#Notes:##################

#   1. All TIMEOUTs are specified in seconds
#   2. 0 or negative TIMEOUT disables a particular action.
#   3. If an actionCOMMAND (like pm-suspend) requires 'sudo'ing, make them 'sudo'able without password. Alternatively, you may run this script in sudo mode, and make this script sudoable without password. https://askubuntu.com/questions/159007/specific-sudo-commands-without-password
#   4. 'action'_timer_starts_... option: True - if a lock file is created and then removed, inactivity timer (for that action) restarts at the time of deletion of lock. False - doesn't restart.
#   5. screensaverCOMMAND can be screen-lock (security) or screen-off (power saving) or both. To do both, but at different times (I can't see any reason to do so) extend this script from two actions (screensaver, autosuspend) to three (screen-lock, screen-off, autosuspend).

#########################

import os
import time
import threading
import subprocess

HOME = os.getenv('HOME') + '/'

#Configuration###########

screensaverCOMMAND = "gnome-screensaver-command --lock && xset -display :0.0 +dpms dpms force off"
autosuspendCOMMAND = "gnome-screensaver-command --lock && sudo pm-suspend"

screensaverTIMEOUT = 10*60
autosuspendTIMEOUT = 20*60

screensaverLOCK = HOME + ".inactivitymanager/screensaverLOCK"
autosuspendLOCK = HOME + ".inactivitymanager/autosuspendLOCK"

screensaver_timer_starts_only_after_lockfile_is_deleted = False
autosuspend_timer_starts_only_after_lockfile_is_deleted = False

#########################

def stayOn():
    print "inactivitymanager is running..."
    try:
        while True:
            time.sleep(10)
    except:
        print "Closed."

class inactivity_action(threading.Thread):
    def __init__(self, command, timeout, lock, timer_starts_blah):
        threading.Thread.__init__(self)
        self.daemon = True
        self.command = command
        self.timeout = timeout
        self.lock = lock
        self.timer_starts_blah = timer_starts_blah
    def run(self):
        if not(self.timer_starts_blah):
            while True:
                try:
                    while True:
                        time.sleep(1)
                        f = open(self.lock, 'r')
                        f.close()
                except IOError:
                    xidletime = int(subprocess.Popen('xprintidle', stdout = subprocess.PIPE).communicate()[0])/1000
                    if xidletime > self.timeout:
                        os.system(self.command)
                    else:
                        time.sleep(self.timeout - xidletime + 2)
        else:
            lockremovetime = 0
            while True:
                lockdetected = False
                try:
                    while True:
                        time.sleep(1)
                        f = open(self.lock, 'r')
                        f.close()
                        lockdetected = True
                except IOError: #Will enter this section if/when lockfile is/becomes absent
                    xidletime = int(subprocess.Popen('xprintidle', stdout = subprocess.PIPE).communicate()[0])/1000
                    if lockdetected:
                        lockremovetime = int(time.time())
                    timesincelockremove = int(time.time()) - lockremovetime
                    if min(xidletime, timesincelockremove) > self.timeout:
                        os.system(self.command)

if screensaverTIMEOUT > 0:
    inactivity_screensaver = inactivity_action(screensaverCOMMAND, screensaverTIMEOUT, screensaverLOCK, screensaver_timer_starts_only_after_lockfile_is_deleted)
    inactivity_screensaver.start()

if autosuspendTIMEOUT > 0:
    inactivity_autosuspend = inactivity_action(autosuspendCOMMAND, autosuspendTIMEOUT, autosuspendLOCK, autosuspend_timer_starts_only_after_lockfile_is_deleted)
    inactivity_autosuspend.start()

stayOn()

Использование:

Просто добавьте inactivitymanager & в .profile или .xsessionrc в домашнем каталоге (см., какой из них работает для вас. Не добавляйте в обоих случаях, иначе два экземпляра этого скрипта будут выполняться одновременно, что-то, с чем я не справился. Я думаю, именно в этих деталях основные реализации реализуют собственные) , Возможно, вам придется установить xprintidle.

Как доставляется файл запрета, до сих пор остается в воображении пользователя (если я привожу себя для реализации демона для этого, я поставлю это в EDIT для этого ответа). Вы (ОП), конечно, решили это для вашего дела. Одна ошибка, которую следует избегать при попытке заблокировать приостановление для нескольких процессов, - это удаление файла блокировки, когда один процесс завершается, а другой все еще работает. В качестве альтернативы сценарий может быть отредактирован немного, чтобы заблокировать приостановление, если какой-либо файл существует в определенном каталоге (каталог блокировки). Таким образом, каждый процесс может иметь свой собственный файл блокировки.

Примечания:

Просто добавьте inactivitymanager & в .profile или .xsessionrc в домашний каталог (см., Какой из них работает для вы не добавляете в обоих, иначе два экземпляра этого скрипта будут выполняться одновременно, что-то, что я не обрабатывал. Я думаю, именно в этих деталях основные реализации превзойдут пользовательские). pm-suspend требует sudo. Для pm-suspend без указания пароля. Как запустить определенные команды sudo без пароля ?. В качестве альтернативы вы можете запустить этот скрипт в режиме sudo и сделать этот сценарий sudoable без пароля (не проблема, если вы используете скрипт как root) Возможно, вам придется установить xprintidle. Поскольку у нас есть дескриптор таймеров , мышь не требуется!
5
задан 14 September 2010 в 08:49

9 ответов

Взлом для выполнения этого может заключаться в использовании wwwoffle: в режиме «онлайн» wwwoffle сохраняет все посещенные страницы (за исключением тех, которые соответствуют указанному регулярному выражению) в папку. Вы можете настроить путь к папке кэша.

Насколько я знаю, нет прямого способа сообщить WWWOFFLE, какие страницы / URL-адреса будут сохранены, но могут быть обходные пути:

[d3 ], если вы можете свести на нет ваше регулярное выражение, вы можете сказать WWWOFFLE, какие страницы не сохранять, если ваш браузер поддерживает прокси-сервер proxy.pac на основе JavaScript, просто скомпилировать функцию JavaScript, которая направляет браузер использовать только прокси для URL-адресов которые соответствуют регулярному выражению. вы можете настроить Squid для использования WWWOFFLE в качестве родительского прокси, когда URL-адрес соответствует определенному шаблону; т. е. у вас есть браузер-> Squid-> WWWOFFLE-> Интернет, когда URL-адрес запроса совпадает с regexp и браузером -> Squid-> Internet в противном случае.
3
ответ дан 26 May 2018 в 01:20
  • 1
    Похож на действительно хороший вариант. На следующей неделе я попробую попробовать, посмотрю, смогу ли я заставить его работать. – UrkoM 15 September 2010 в 11:00

Взлом для выполнения этого может заключаться в использовании wwwoffle: в режиме «онлайн» wwwoffle сохраняет все посещенные страницы (за исключением тех, которые соответствуют указанному регулярному выражению) в папку. Вы можете настроить путь к папке кэша.

Насколько я знаю, нет прямого способа сообщить WWWOFFLE, какие страницы / URL-адреса будут сохранены, но могут быть обходные пути:

, если вы можете свести на нет ваше регулярное выражение, вы можете сказать WWWOFFLE, какие страницы не сохранять, если ваш браузер поддерживает прокси-сервер proxy.pac на основе JavaScript, просто скомпилировать функцию JavaScript, которая направляет браузер использовать только прокси для URL-адресов которые соответствуют регулярному выражению. вы можете настроить Squid для использования WWWOFFLE в качестве родительского прокси, когда URL-адрес соответствует определенному шаблону; т. е. у вас есть браузер-> Squid-> WWWOFFLE-> Интернет, когда URL-адрес запроса совпадает с regexp и браузером -> Squid-> Internet в противном случае.
3
ответ дан 25 July 2018 в 23:13

Взлом для выполнения этого может заключаться в использовании wwwoffle: в режиме «онлайн» wwwoffle сохраняет все посещенные страницы (за исключением тех, которые соответствуют указанному регулярному выражению) в папку. Вы можете настроить путь к папке кэша.

Насколько я знаю, нет прямого способа сообщить WWWOFFLE, какие страницы / URL-адреса будут сохранены, но могут быть обходные пути:

, если вы можете свести на нет ваше регулярное выражение, вы можете сказать WWWOFFLE, какие страницы не сохранять, если ваш браузер поддерживает прокси-сервер proxy.pac на основе JavaScript, просто скомпилировать функцию JavaScript, которая направляет браузер использовать только прокси для URL-адресов которые соответствуют регулярному выражению. вы можете настроить Squid для использования WWWOFFLE в качестве родительского прокси, когда URL-адрес соответствует определенному шаблону; т. е. у вас есть браузер-> Squid-> WWWOFFLE-> Интернет, когда URL-адрес запроса совпадает с regexp и браузером -> Squid-> Internet в противном случае.
3
ответ дан 27 July 2018 в 03:19

Для этого можно использовать wwwoffle : в режиме «онлайн» wwwoffle сохраняет все посещенные страницы (за исключением тех, которые соответствуют указанному регулярному выражению) в папку. Вы можете настроить путь к папке кэша.

Насколько я знаю, нет прямого способа сообщить WWWOFFLE, какие страницы / URL для сохранения, но могут быть обходные пути:

  • , если вы можете отрицать ваше регулярное выражение, вы можете указать WWWOFFLE, какие страницы не сохранить
  • , если ваш браузер поддерживает JavaScript proxy.pac основанная на прокси-конфигурации, просто подготовить функцию JavaScript, которая направляет браузер только использовать прокси для URL-адресов, которые соответствуют регулярному выражению.
  • вы могли бы настроить Squid для использования WWWOFFLE в качестве родителя прокси, когда URL-адрес соответствует определенному шаблону; т. е. у вас есть браузер-> Squid-> WWWOFFLE-> Интернет, когда URL-адрес запроса совпадает с regexp и браузером-> Squid-> Internet в противном случае.
3
ответ дан 2 August 2018 в 04:31

Для этого можно использовать wwwoffle : в режиме «онлайн» wwwoffle сохраняет все посещенные страницы (за исключением тех, которые соответствуют указанному регулярному выражению) в папку. Вы можете настроить путь к папке кэша.

Насколько я знаю, нет прямого способа сообщить WWWOFFLE, какие страницы / URL для сохранения, но могут быть обходные пути:

  • , если вы можете отрицать ваше регулярное выражение, вы можете указать WWWOFFLE, какие страницы не сохранить
  • , если ваш браузер поддерживает JavaScript proxy.pac основанная на прокси-конфигурации, просто подготовить функцию JavaScript, которая направляет браузер только использовать прокси для URL-адресов, которые соответствуют регулярному выражению.
  • вы могли бы настроить Squid для использования WWWOFFLE в качестве родителя прокси, когда URL-адрес соответствует определенному шаблону; т. е. у вас есть браузер-> Squid-> WWWOFFLE-> Интернет, когда URL-адрес запроса совпадает с regexp и браузером-> Squid-> Internet в противном случае.
3
ответ дан 4 August 2018 в 21:04

Для этого можно использовать wwwoffle : в режиме «онлайн» wwwoffle сохраняет все посещенные страницы (за исключением тех, которые соответствуют указанному регулярному выражению) в папку. Вы можете настроить путь к папке кэша.

Насколько я знаю, нет прямого способа сообщить WWWOFFLE, какие страницы / URL для сохранения, но могут быть обходные пути:

  • , если вы можете отрицать ваше регулярное выражение, вы можете указать WWWOFFLE, какие страницы не сохранить
  • , если ваш браузер поддерживает JavaScript proxy.pac основанная на прокси-конфигурации, просто подготовить функцию JavaScript, которая направляет браузер только использовать прокси для URL-адресов, которые соответствуют регулярному выражению.
  • вы могли бы настроить Squid для использования WWWOFFLE в качестве родителя прокси, когда URL-адрес соответствует определенному шаблону; т. е. у вас есть браузер-> Squid-> WWWOFFLE-> Интернет, когда URL-адрес запроса совпадает с regexp и браузером-> Squid-> Internet в противном случае.
3
ответ дан 6 August 2018 в 04:35

Для этого можно использовать wwwoffle : в режиме «онлайн» wwwoffle сохраняет все посещенные страницы (за исключением тех, которые соответствуют указанному регулярному выражению) в папку. Вы можете настроить путь к папке кэша.

Насколько я знаю, нет прямого способа сообщить WWWOFFLE, какие страницы / URL для сохранения, но могут быть обходные пути:

  • , если вы можете отрицать ваше регулярное выражение, вы можете указать WWWOFFLE, какие страницы не сохранить
  • , если ваш браузер поддерживает JavaScript proxy.pac основанная на прокси-конфигурации, просто подготовить функцию JavaScript, которая направляет браузер только использовать прокси для URL-адресов, которые соответствуют регулярному выражению.
  • вы могли бы настроить Squid для использования WWWOFFLE в качестве родителя прокси, когда URL-адрес соответствует определенному шаблону; т. е. у вас есть браузер-> Squid-> WWWOFFLE-> Интернет, когда URL-адрес запроса совпадает с regexp и браузером-> Squid-> Internet в противном случае.
3
ответ дан 7 August 2018 в 22:45

Для этого можно использовать wwwoffle : в режиме «онлайн» wwwoffle сохраняет все посещенные страницы (за исключением тех, которые соответствуют указанному регулярному выражению) в папку. Вы можете настроить путь к папке кэша.

Насколько я знаю, нет прямого способа сообщить WWWOFFLE, какие страницы / URL для сохранения, но могут быть обходные пути:

  • , если вы можете отрицать ваше регулярное выражение, вы можете указать WWWOFFLE, какие страницы не сохранить
  • , если ваш браузер поддерживает JavaScript proxy.pac основанная на прокси-конфигурации, просто подготовить функцию JavaScript, которая направляет браузер только использовать прокси для URL-адресов, которые соответствуют регулярному выражению.
  • вы могли бы настроить Squid для использования WWWOFFLE в качестве родителя прокси, когда URL-адрес соответствует определенному шаблону; т. е. у вас есть браузер-> Squid-> WWWOFFLE-> Интернет, когда URL-адрес запроса совпадает с regexp и браузером-> Squid-> Internet в противном случае.
3
ответ дан 10 August 2018 в 10:50

Для этого можно использовать wwwoffle : в режиме «онлайн» wwwoffle сохраняет все посещенные страницы (за исключением тех, которые соответствуют указанному регулярному выражению) в папку. Вы можете настроить путь к папке кэша.

Насколько я знаю, нет прямого способа сообщить WWWOFFLE, какие страницы / URL для сохранения, но могут быть обходные пути:

  • , если вы можете отрицать ваше регулярное выражение, вы можете указать WWWOFFLE, какие страницы не сохранить
  • , если ваш браузер поддерживает JavaScript proxy.pac основанная на прокси-конфигурации, просто подготовить функцию JavaScript, которая направляет браузер только использовать прокси для URL-адресов, которые соответствуют регулярному выражению.
  • вы могли бы настроить Squid для использования WWWOFFLE в качестве родителя прокси, когда URL-адрес соответствует определенному шаблону; т. е. у вас есть браузер-> Squid-> WWWOFFLE-> Интернет, когда URL-адрес запроса совпадает с regexp и браузером-> Squid-> Internet в противном случае.
3
ответ дан 13 August 2018 в 17:25
  • 1
    Похож на действительно хороший вариант. На следующей неделе я попробую попробовать, посмотрю, смогу ли я заставить его работать. – UrkoM 15 September 2010 в 11:00

Другие вопросы по тегам:

Похожие вопросы: