2

Когда я блокирую экран в Ubuntu, я хочу, чтобы передача открывалась автоматически, а когда я разблокирую экран, передача должна приостановиться или прекратиться.

Я много искал, но не могу найти ничего стоящего.

Я подумал о решении, о создании задания cron и использовании gnome-screensaver-command -q и запуске передачи, которое кажется бесполезным. Есть ли лучший способ (основанный на событиях)?

2 ответа2

2

Вы можете использовать dbus, чтобы получить информацию о событиях, когда заставка активируется или деактивируется, см. Здесь.

Вы можете использовать transmission-remote для управления передачей из командной строки, как показано здесь.

Таким образом, вы получите скрипт на Perl, который выглядит следующим образом:

my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'\"";

$starttrans="transmission-remote --torrent all --start";
$stoptrans="transmission-remote --torrent all --stop";

open (IN, "$cmd |");

while (<IN>) {
    if (m/^\s+boolean true/) {
        starttrans;
    } elsif (m/^\s+boolean false/) {
        stoptrans;
    }
}

(Я пишу это в Windows без Perl / Transmission, так что почти наверняка он не будет работать должным образом.)

1

Хорошо. Я придумал скрипт на python, который делает то, что я хочу, используя dbus-monitor

#!/usr/bin/python
import os, sys

while True:
    line = sys.stdin.readline()
    if "boolean true" in line:
        print os.system("transmission -m &")
    elif "boolean false" in line:
        print os.system("pkill transmission")

На оболочке,

dbus-monitor type=signal,\
             interface=org.gnome.ScreenSaver,\
             member=ActiveChanged\
             | ./script.py  &

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .