Я написал сценарий отключения для передачи. Передача вызывает скрипт после завершения загрузки торрента. Скрипт отлично работает на моей машине (Ubuntu 11.04 и 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
Проблема в том, что когда я загружаю более одного файла, когда заканчивается первый, передача выполняет сценарий. Я хотел бы сделать это, но после завершения всех загрузок.
Я хочу поставить 2-ую проверку (сразу после проверки монитора), если он все еще загружает другой торрент.
Есть ли способ сделать это?
Простой сценарий.
Спасибо Khurshid Alam и user98677 Я написал этот скрипт, который работает нормально. Если дисплей включен (вы работаете), он заставляет Transmission завершить работу и отправляет уведомление, если компьютер не выключен.
установить
sudo apt-get install transmission-cli libnotify-bin
в Ubuntu 16.04
sudo apt install transmission-cli libnotify-bin
Системные настройки> Питание> Яркость экрана> Отключение экрана, когда он неактивен в течение> выбора разумного времени.
#!/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
Эта информация не передается в сценарии через переменные среды, поэтому вам необходимо запросить RPC-интерфейс Transmission. Это иногда делается клиентскими библиотеками - например, скрипт Python может использовать python transmissionrpc . Существуют и другие интерфейсы, подобные этому, перечисленные на http://www.transmissionbt.com/resources/ .
Вот быстрый подход, который использует передачу с удаленного доступа для подсчета числа не холостые загрузки:
transmission-remote yourhost:yourport -tall --info | grep "^ State:" | grep "Down" | wc --lines
Если вы также хотите включить холостые загрузки, вы можете попробовать это:
transmission-remote yourhost:yourport -l | grep -v -e " 100% " -e "^Sum" -e "^ID" -e " Stopped " | wc --lines
Где «^ ID» и «^ Sum» удаляют верхний и нижний колонтитулы ; «100%» полосы завершены торрентами; и «Остановленный» удаляет незавершенные, но приостановленные торренты. Этот подход не является надежным - например, торрент с именем «100% остановлен» сломает его.
Я создал лучший сценарий (от user98677 совета), который использует в своих интересах Интерфейс RPC передачи.
Код:
Суть GitHub: https://gist.github.com/khurshid-alam/6474227
Что это Делает?
Пауза или удаляет завершенные потоки после того, как они будут завершены.
Отправьте слабое уведомление (с завихрением) [дополнительный]
Отправьте уведомление Твиттера (требует twidge) [дополнительный]
Приостановите/Завершите работу Компьютер ИЛИ оставьте его как есть.
Снимок экрана
На Ubuntu
sudo apt-get install libnotify-bin
sudo apt-get install transmission-cli
На Ubuntu> = 13.04 (Для уведомления Твиттера):
sudo add-apt-repository ppa:moorhen-core/moorhen-apps
sudo apt-get install twidge
Для suspend
действие с дистрибутивом не-Ubuntu (Ubuntu использует Upower), пакет powermanagement-интерфейса установки
sudo apt-get install powermanagement-interface
После установки:
Получите код от сути GitHub и сохраните файл как trsm
где угодно на Вашем жестком диске. Сделайте исполняемый файл файла chmod a+x trsm
.
Войдите в слабого соперника и скопируйте свой пользовательский ключ. Вставьте его под user-key
в сценарии.
Если Вы хотите уведомления, отправляют с симпатичным приложением (передача), значок просто создает поддельное приложение в слабом сопернике со значком передачи и затем копирует ключ приложения (Ключ API/маркера) и вставляет его под app-key
в сценарии.
Для Твиттера установка см. twidge документацию.
Открытая передача. Перейдите к предпочтению-> сеть. Включите веб-клиент (порт по умолчанию 9091
) И включите аутентификацию пользователя. Выберите имя пользователя и пароль. Помещенный, что имя пользователя и пароль в сценарии как username
& password
соответственно.
Нажмите открытый веб-клиент, чтобы проверить, работает ли он правильно.
Наконец сохраните сценарий и перейдите к загрузке вкладки (в предпочтении передачи) и щелчок call script when torrent is complete
. Выберите соответствующий сценарий.
#!/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