Transmission 先生,请在所有下载完成后关闭电脑!

Transmission 先生,请在所有下载完成后关闭电脑!
#!/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 写了一个小程序来实现这个功能。你可以找到它这里

相关内容