#!/bin/bash
echo "password" | sudo -S halt
我将此脚本指向“当 torrent 完成时调用脚本“选项下:Edit > Preferences > Downloading
问题:当队列中还有更多种子时,此脚本会在下载完成后关闭计算机!
我该如何改善它?
答案1
首先 - 停止使用 root 关机。使用dbus
。
接下来,在脚本中添加一些检测正在运行的种子的内容。这里有一些小东西,用于trasmission-remote
计算正在运行但未“完成”的种子的数量:
transmission-remote --list | sed '1d;$d' | grep -v Done | wc -l
要将其构建到您的脚本中:
count=$(transmission-remote --list | sed '1d;$d' | grep -v Done | wc -l)
if [ $count -eq 0 ]; then
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
fi
我不是 transmission 用户,所以我的搜索可能有点偏差,但这应该可以完成工作。您可能会发现,如果其中有一些种子处于暂停状态,它不会一直关闭。如果是这种情况,请尝试使用输出和一两个grep -v
子句来处理问题。
此外,您可能希望定时关机,这样您就不会遇到桌面在您使用时关闭的情况(这样您就可以中止它)。也许只是额外检查一下时间。
笔记: transmission-remote
要求您从其选项中打开网络访问以进行传输。
答案2
Transmission 提供了一个 RPC 接口,让您能够以编程方式与 Transmission 通信。有了它,您可以编写一个脚本,在一个(任何)torrent 下载完成后执行,就像您现在所做的那样。该脚本通过 RPC 接口检查是否还有其他 torrent 仍在下载。只有当没有找到时,系统才会关闭,否则脚本会退出而不执行任何操作(并等待下一个 torrent 完成后再次调用)。
我不确定你是否可以在 bash 脚本中与 RPC 接口对话,但是根据传动主页Ruby、Python、PHP 或 Perl 中都有可用的“远程控制库”。因此,用上述任何一种语言编写脚本来完成上述任务应该不难。
答案3
就像@Henning 所说的那样,使用 transmissionrpc 获取所有种子的状态。如果它们都不再处于活动状态,那么您可以继续关闭计算机。
我用 Python 写了一个小程序来实现这个功能。你可以找到它这里。