Я очень, очень плохо знаком со сценариями. Вот простой сценарий (который работает), что я записал, который отображает изображение, когда 5 минут передали:
sleep 300 && firefox file:///home/tasks/fiveminutes.jpg
Вот мой вопрос: иногда я не могу помнить, запустил ли я таймер. Существует ли способ добавить текст или признак значка (идеально на панели задач, но где-нибудь было бы большим), который появляется в течение 5 минут (с момента, я запускаю таймер к моменту, я заканчиваю его)?
Большое спасибо за любые предложения.
Вы можете отобразить всплывающее уведомление при запуске процесса. Просто измените ваш сценарий на
notify-send "Your image will arrive" "after 5 minutes" && sleep 300 && firefox file:///home/tasks/fiveminutes.jpg
Вы можете установить длительность всплывающего уведомления с параметром -t
(и временем в миллисекундах) с помощью команды notify-send
, например, чтобы установить продолжительность для 5 минуты использования
notify-send -t 300000 "heading" "text"
, но этот параметр может полностью игнорироваться в зависимости от среды вашего рабочего стола (см. , ).
Достаточно иметь такой сценарий:
#!/usr/bin/env bash
while true
do
if pgrep -f gedit > /dev/null
then
printf "\r%b" "\033[2K"
printf "Script is running"
else
printf "\r%b" "\033[2K"
printf "Script is not running."
fi
sleep 0.25
done
Это очень типичный способ, который часто используется в сценариях оболочки. То, что это делает, работает непрерывно, и каждую четверть секунды он проверяет, работает ли ваш скрипт через pgrep -f
. if..fi
операторы в сценариях оболочки работают с состоянием выхода команд, поэтому pgrep -f
, возвращающий успешное состояние завершения, означает, что он нашел процесс вашего сценария и он запущен. В противном случае мы переходим к другому заявлению.
В обоих случаях мы печатаем строку текста, которая сообщает пользователю, работает он или нет. Также добавлено printf "\r%b" "\033[2K"
для печати escape-последовательности для очистки линии (только для более чистого вывода).
sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor
sudo apt-get update
sudo apt-get install indicator-sysmonitor
. После этого просто сконфигурируйте индикатор для отображения пользовательской команды, которая будет скриптом мониторинга. Пример настройки пользовательской команды можно найти здесь здесь .
Конечно, можно написать свой собственный индикатор на Python, но это может быть просто излишним, когда уже есть инструмент для этого.
osd_cat
Вы можете использовать osd_cat
из пакета xosd-bin
, например:
<<<"runs" osd_cat -d5 -i20 -o50 -f"-*-*-*-*-*-*-100-*-*-*-*-*-*-*" && firefox
Это отображает «пробеги» с размером шрифта 100
в течение 5
секунд в позиции 20,50
на экране и запускает firefox
, когда он будет готов - вам не нужен sleep
при таком подходе. Вы можете использовать xfontsel
, чтобы получить X логический дескриптор шрифта (эта странная штука -*-*-…
) для опции -f
, например, если вы хотите использовать другой шрифт. Прочитайте man osd_cat
для получения дополнительной информации.
yad
Вы можете использовать yad
следующим образом:
yad --title=runs --text="it’s running!" --timeout=5 --button=Fire:1 --button=Abort:0 || firefox
Это имеет то преимущество, что вы можете прервите команду или выполните ее немедленно, если вы ничего не сделаете, она закроется через 5
секунд в этом примере.
Вы можете взять этот уже работающий скрипт multi-timer
и вырезать его большую часть для общего таймера обратного отсчета:
Он использует то же indicator-sysmonitor
, что описано в ответе Сержа.
Часть Systray Brightness: 2344
также отображается тем же сценарием.
Если вычеркнуть ненужные части кода bash слишком сложно для новых пользователей, я с удовольствием выложу здесь скрипт под названием show-sleep
с необходимой ограниченной функциональностью. Просто оставьте комментарий ниже.
Вот средство запуска Python, на основе этого ответа и дополнительного исследования в Интернете, который работает хороший в Ubuntu 16.04:
#!/usr/bin/env python3
import signal
import gi
import os
import subprocess
import sys
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3, GObject
import time
from threading import Thread
# Execute the script
script = os.path.basename(sys.argv[1])
subprocess.Popen(sys.argv[1:])
script_name = script.rsplit('/', 1)[-1]
class Indicator():
def __init__(self):
self.app = 'Script indicator'
iconpath = "/usr/share/unity/icons/launcher_bfb.png"
self.indicator = AppIndicator3.Indicator.new(
self.app, iconpath,
AppIndicator3.IndicatorCategory.OTHER)
self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.create_menu())
self.indicator.set_label("Script Indicator", self.app)
# the thread:
self.update = Thread(target=self.show_seconds)
# daemonize the thread to make the indicator stopable
self.update.setDaemon(True)
self.update.start()
def create_menu(self):
menu = Gtk.Menu()
# menu item 1
item_quit = Gtk.MenuItem('Quit')
item_quit.connect('activate', self.stop)
menu.append(item_quit)
menu.show_all()
return menu
def show_seconds(self):
global script_name
t = 0
process = subprocess.call(['pgrep', script_name], stdout=subprocess.PIPE)
while (process == 0):
t += 1
GObject.idle_add(
self.indicator.set_label,
script_name + ' ' + str(t) + 's', self.app,
priority=GObject.PRIORITY_DEFAULT
)
time.sleep(1)
process = subprocess.call(['pgrep', script_name], stdout=subprocess.PIPE)
subprocess.call(['notify-send', script_name + ' ended in ' + str(t) + 's'])
time.sleep(10)
Gtk.main_quit()
def stop(self, source):
global script_name
subprocess.call(['pkill', script_name], stdout=subprocess.PIPE)
Gtk.main_quit()
Indicator()
# this is where we call GObject.threads_init()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
Создайте исполняемый файл и поместите вышеупомянутые строки как его содержание. Давайте предположим, что файл называют script-indicator.py
. В зависимости от Ваших потребностей и Вашего характера сценария, можно использовать это средство запуска одним из следующих способов:
./script-indicator.py /path/to/script.sh
./script-indicator.py /path/to/script.sh &
./script-indicator.py /path/to/script.sh > out.log &
./script-indicator.py /path/to/script.sh > /dev/null &
script.sh
тот, на который Вы хотите указать.Снимок экрана, сделанный как раз в то самое время, когда script.sh
заканчивается:
Кроме того, можно поместить сценарий в /usr/local/bin
быть доступным как широкая система команд оболочки. Можно загрузить его с этого, выделяют Суть GitHub:
sudo wget -qO /usr/local/bin/script-indicator https://gist.githubusercontent.com/pa4080/4e498881035e2b5062278b8c52252dc1/raw/c828e1becc8fdf49bf9237c32b6524b016948fe8/script-indicator.py
sudo chmod +x /usr/local/bin/script-indicator
Я протестировал его со следующим синтаксисом:
script-indicator /path/to/script.sh
script-indicator /path/to/script.sh &
script-indicator /path/to/script.sh > output.log
script-indicator /path/to/script.sh > output.log &
script-indicator /path/to/script.sh > /dev/null
script-indicator /path/to/script.sh > /dev/null &
nohup script-indicator /path/to/script.sh >/dev/null 2>&1 &
# etc...