当我在 Ubuntu 上锁定屏幕时,我希望传输自动打开,而当我解锁屏幕时,传输应该自动暂停或停止。
我搜索了很多,但没有找到任何有价值的东西。
我想到了一个解决方案,创建一个 cron 作业并使用gnome-screensaver-command -q
并启动传输,这似乎是一种浪费。有没有更好的方法(基于事件的方法)?
答案1
您可以使用 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;
}
}
(我在没有 perl/传输的 Windows 中编写此程序,因此它几乎肯定无法正常工作。)
答案2
好的。我已经想出了一个python脚本,它可以完成我想要的操作dbus 监控
#!/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 &