#!/bin/bash
echo "password" | Sudo -S halt
このスクリプトは、「トレントが完了したときにスクリプトを呼び出す」オプションを指定しました:Edit > Preferences > Downloading
問題:このスクリプトは、ダウンロードが終了した後、キューにさらにトレントが存在する間、コンピューターをシャットダウンします!
どうすれば改善できますか?
まず-ルートでシャットダウンを停止します。 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アクセスをオンにする必要があります。
@Henningが言ったように、transmissionrpcを使用して、すべてのトレントのステータスを取得します。まだアクティブになっていない場合は、先に進んでコンピューターをシャットダウンできます。
これを行うために、Pythonで小さなプログラムを作成しました。あなたはそれを見つけることができます こちら 。
Transmissionは、プログラムでTransmissionと通信できるようにするRPCインターフェイスを提供します。これにより、現在のように、1つの(任意の)トレントのダウンロードが完了した後に実行されるスクリプトを作成できます。そのスクリプトは、まだダウンロードしている他のトレントがあるかどうかをRPCインターフェースを介してチェックします。何も見つからない場合にのみ、システムがシャットダウンされます。それ以外の場合、スクリプトは何もせずに終了します(そして、次のトレントが終了すると再び呼び出されるのを待ちます)。
BashスクリプトでRPCインターフェイスと通信できるかどうかはわかりませんが、 Transmission Homepage によると、Ruby、Python、PHPで使用する「リモートコントロールライブラリ」がありますまたはPerl。したがって、上記のタスクを実行するためにこれらの言語のいずれかでスクリプトを作成するのは難しくありません。