J'ai écrit un script d'arrêt pour la transmission. Transmission appelle le script à la fin du téléchargement d'un torrent. Le script fonctionne parfaitement sur ma machine (Ubuntu 11.04 et 12.04).
#!/bin/bash
sleep 300s
# default display on current Host
DISPLAY=:0.0
# find out if monitor is on. Default timeout can be configured from screensaver/Power configuration.
STATUS=`xset -display $DISPLAY -q | grep 'Monitor'`
echo $STATUS
if [ "$STATUS" == " Monitor is On" ]
### Then check if its still downloading a torrent. Couldn't figure out how.(May be) by monitoring network downstream activity?
then
notify-send "Downloads Complete" "Exiting transmisssion now"
pkill transmission
else
notify-send "Downloads Complete" "Shutting Down Computer"
dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
fi
exit 0
Le problème est que lorsque je télécharge plusieurs fichiers, lorsque le premier est terminé, la transmission exécute le script. J'aimerais le faire, mais une fois tous les téléchargements terminés.
Je veux mettre une seconde vérification (juste après la vérification du moniteur) s'il télécharge encore un autre torrent.
Est-ce qu'il y a un moyen de faire ça?
Ces informations ne sont pas transmises aux scripts via les variables d'environnement. Vous devez donc interroger l'interface RPC de Transmission. Cela est parfois effectué par les bibliothèques clientes - par exemple, un script Python pourrait utiliser python transmissionrpc . Il existe d'autres interfaces de ce type répertoriées à l'adresse http://www.transmissionbt.com/resources/ .
Voici une approche rapide qui utilisera transmission-remote pour compter le nombre de téléchargements non inactifs:
transmission-remote yourhost:yourport -tall --info | grep "^ State:" | grep "Down" | wc --lines
Si vous souhaitez également inclure des téléchargements inactifs, vous pouvez essayer ceci:
transmission-remote yourhost:yourport -l | grep -v -e " 100% " -e "^Sum" -e "^ID" -e " Stopped " | wc --lines
Où "^ ID" et "^ Sum" enlèvent l'en-tête et le pied de page; "100%" bandes bandes complétées torrents; et "Stopped" arrête les torrents incomplets mais en pause. Cette approche n’est pas infaillible - par exemple, un torrent nommé "100% arrêté" la casserait.
J'ai créé un meilleur script (à partir des conseils de user98677) qui tire parti de l'interface RPC de la transmission.
Code:
Github Gist: https://Gist.github.com/khurshid-alam/6474227
Qu'est-ce qu'il fait?
Mettre en pause ou supprimer les torrents terminés une fois qu'ils sont terminés.
Envoyer une notification de transfert (avec curl) [facultatif]
Envoyer une notification Twitter (requiert twidge) [facultatif]
Suspendre/éteindre l'ordinateur OR le laisser tel quel.
Capture d'écran
Sur Ubuntu
Sudo apt-get install libnotify-bin
Sudo apt-get install transmission-cli
Sur Ubuntu> = 13.04 (pour la notification Twitter):
Sudo add-apt-repository ppa:moorhen-core/moorhen-apps
Sudo apt-get install twidge
Pour suspend
action sur une distribution non-Ubuntu (Ubuntu utilise Upower), installez le paquet powermanagement-interface
Sudo apt-get install powermanagement-interface
Après l'installation:
Obtenez le code de github-Gist & enregistrez le fichier sous le nom trsm
n’importe où sur votre disque dur. Rendre le fichier exécutable chmod a+x trsm
.
Connectez-vous pour transférer et copier votre clé d'utilisateur . Collez-le sous user-key
dans le script.
Si vous souhaitez que les notifications soient envoyées avec l'icône Nice Looking Application (transmission), créez simplement une fausse application avec l'icône de transmission puis copiez la clé d'application (clé API/Token) et collez-la sous app-key
dans le script.
Pour la configuration de Twitter, voir la documentation de twidge.
Transmission ouverte. Aller à préférence-> Web. Activez le client Web (port par défaut 9091
) et activez l'authentification de l'utilisateur. Choisissez un nom d'utilisateur et mot de passe. Mettez ce nom d'utilisateur et mot de passe dans le script en tant que username
& password
respectivement.
Cliquez sur open web-client pour vérifier s'il fonctionne correctement.
Enfin, sauvegardez le script et allez dans l’onglet de téléchargement (dans les préférences de transmission) et cliquez sur call script when torrent is complete
. Sélectionnez le script respectif.
#!/bin/bash
user-key=" " #put your pushover user-key
app-key=" " #put your pushover application-key
device=" " #Your device name in pushover
username=" " # Transmission remote username
password=" " # Transmission remote password
sleep 100s
# default display on current Host
DISPLAY=:0.0
# authorize transmission
trsm="transmission-remote --auth $username:$password"
# find out number of torrent
TORRENTLIST=`$trsm --list | sed -e '1d;$d;s/^ *//' | cut --only-delimited --delimiter=' ' --fields=1`
for TORRENTID in $TORRENTLIST
do
echo "* * * * * Operations on torrent ID $TORRENTID starting. * * * * *"
#echo $TORRENTID
DL_COMPLETED=`$trsm --torrent $TORRENTID --info | grep "Percent Done: 100%"`
#echo $DL_COMPLETED
# pause completed torrents & get those torrent names.
if [ "$DL_COMPLETED" != "" ]; then
$trsm --torrent $TORRENTID --stop
trname=`$trsm --torrent $TORRENTID --info | grep "Name:" | awk -F: '{print $NF}'`
# post an update to Twitter
echo "$trname download was completed" | twidge update # Put "#" if you don't need this.
# Push update for pushover
curl -s \
-F "token=$user-key" \
-F "user=$app-key" \
# -F "device=$device" \ # uncomment, if you want to send notification to a particular device.
-F "title=Download Finished" \
-F "message=$trname download has completed." \
http://api.pushover.net/1/messages > /dev/null
# The following codes works assuming One take advantage of gnome-power-manager by setting "black screen after 2/5/10/.. minitues ".
# if monitor(Including laptop screen but EXCLUDING external monitor) is on, it will just force blank the screen, if not, it will shutdown/suspend or leave it as it is.
# Modify it as per your requirement.
STATUS=`xset -display $DISPLAY -q | grep 'Monitor'`
#echo $STATUS
if [ "$STATUS" == " Monitor is On" ]
then
notify-send "Downloads Complete" "turning off the screen now"
xset dpms force off
else
notify-send "Downloads Complete" "$trname"
# uncomment to shutdown the computer
#dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
# uncomment to suspend (on ubuntu)
#dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
# uncomment to suspend (on Linux) (requires powermanagement-interface package)
#pmi action suspend
else
echo "Torrent #$TORRENTID is not completed. Ignoring."
fi
done
Un script simple.
Merci à Khurshid Alam et à l'utilisateur98677 J'ai écrit ce script qui fonctionne très bien. Si l'affichage est activé (vous travaillez), la transmission se ferme et envoie une notification si l'ordinateur n'est pas arrêté.
installer
Sudo apt-get install transmission-cli libnotify-bin
dans Ubuntu 16.04
Sudo apt install transmission-cli libnotify-bin
Paramètres système> Alimentation> Luminosité de l'écran> Désactiver l'écran lorsqu'il est inactif pour> sélectionner une durée raisonnable.
#!/bin/bash
sleep 300s
DISPLAY=:0.0
STATUS=$(xset -display $DISPLAY -q | grep 'Monitor')
STATE=$(transmission-remote 127.0.0.1:9091 -tall --info | grep "^ State:" | grep "Down" | wc --lines)
if
[ "$STATUS" == " Monitor is On" ] && [ "$STATE" == "0" ]
then
notify-send "Downloads Complete" "Exiting transmisssion now"
pkill transmission
Elif
[ "$STATE" == "0" ]
then
#in Ubuntu 16,04
shutdown -h now
#in older versions use the following
#dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
fi
exit 0