web-dev-qa-db-ja.com

Transmissionさん、すべてのダウンロードが完了したらPCの電源を切ってください!

#!/bin/bash
echo "password" | Sudo -S halt

このスクリプトは、「トレントが完了したときにスクリプトを呼び出す」オプションを指定しました:Edit > Preferences > Downloading

問題:このスクリプトは、ダウンロードが終了した後、キューにさらにトレントが存在する間、コンピューターをシャットダウンします!

どうすれば改善できますか?

3
mini

まず-ルートでシャットダウンを停止します。 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

私は送信ユーザーではないので、検索は少しオフになるかもしれませんが、これでうまくいくはずです。たとえば、一時停止しているトレントがいくつかある場合、常にシャットダウンしないことがあります。その場合は、出力とgrep -v句を1つか2つ試して処理します。

また、デスクトップのシャットダウン中にデスクトップがシャットダウンすることがないように、シャットダウンのタイミングを設定することもできます(そのため、中断できます)。おそらく、時間を確認するために追加のチェックを行うだけです。

注:transmission-remoteでは、オプション内から送信へのWebアクセスをオンにする必要があります。

4
Oli

@Henningが言ったように、transmissionrpcを使用して、すべてのトレントのステータスを取得します。まだアクティブになっていない場合は、先に進んでコンピューターをシャットダウンできます。

これを行うために、Pythonで小さなプログラムを作成しました。あなたはそれを見つけることができます こちら

0
rohithpr

Transmissionは、プログラムでTransmissionと通信できるようにするRPCインターフェイスを提供します。これにより、現在のように、1つの(任意の)トレントのダウンロードが完了した後に実行されるスクリプトを作成できます。そのスクリプトは、まだダウンロードしている他のトレントがあるかどうかをRPCインターフェースを介してチェックします。何も見つからない場合にのみ、システムがシャットダウンされます。それ以外の場合、スクリプトは何もせずに終了します(そして、次のトレントが終了すると再び呼び出されるのを待ちます)。

BashスクリプトでRPCインターフェイスと通信できるかどうかはわかりませんが、 Transmission Homepage によると、Ruby、Python、PHPで使用する「リモートコントロールライブラリ」がありますまたはPerl。したがって、上記のタスクを実行するためにこれらの言語のいずれかでスクリプトを作成するのは難しくありません。

0