Есть ли способ отображать значок только во время работы моего скрипта?

Я очень, очень новичок в написании сценариев. Вот простой скрипт (который работает), который я написал, который отображает изображение, когда прошло 5 минут:

sleep 300 && firefox file:///home/tasks/fiveminutes.jpg

Вот мой вопрос: иногда я не могу вспомнить, начал ли я таймер. Есть ли способ добавить текст или иконку (в идеале на панели задач, но где угодно было бы здорово), которая появляется в течение 5 минут (с момента запуска таймера до момента окончания)?

Большое спасибо за любые предложения.

8
задан 25 May 2018 в 19:09

12 ответов

Вы можете отобразить всплывающее уведомление, когда процесс начинается. Просто измените ваш скрипт

[Ф1]

Вы можете установить Продолжительность пузырь уведомлений [параметр Ф3] (и времени в миллисекундах) с помощью команды [F4] для того, например, чтобы установить время, в течение 5 минут использовать

[Ф2]

, но этот параметр может быть полностью проигнорирован в зависимости от рабочей среды (см. это).

4
ответ дан 8 June 2018 в 13:55
  • 1
    Привет, Помский, спасибо за ваше предложение. То, что я ищу, - это то, что осталось на экране в течение 5 минут. – Sage . 25 May 2018 в 19:06
  • 2
    @Мудрец. Есть способ, чтобы установить тайм-аут для мыльный пузырь уведомлений (см. редактировать чтобы ответить), но к сожалению он не может работать в некоторых рабочих средах. – pomsky 25 May 2018 в 19:34
  • 3
    Привет Pomsky - уведомление-отправить -т решение работает как сон. Я очень ценю вашу помощь. – Sage . 25 May 2018 в 21:27

При запуске процесса вы можете отобразить всплывающее уведомление. Просто измените свой сценарий на

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"

, но этот параметр можно полностью игнорировать в зависимости от среды вашего рабочего стола (см. Это).

4
ответ дан 17 July 2018 в 13:27

При запуске процесса вы можете отобразить всплывающее уведомление. Просто измените свой сценарий на

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"

, но этот параметр можно полностью игнорировать в зависимости от среды вашего рабочего стола (см. Это).

4
ответ дан 20 July 2018 в 13:33

это достаточно, чтобы иметь скрипт вот так:

[Ф1]

это очень типичные и часто используемые в Shell скриптах. Что это делает, постоянно работает, и каждые четверть секунды он проверяет, если ваш скрипт работает через [Ф3]. [Ф4] заявления в Shell-скрипты работают на статус выхода из команды, так [ф5] возвращаясь успешный статус выхода означает, что он нашел обработать ваш скрипт и он работает. В противном случае мы пойдем в другое заявление.

в обоих случаях мы печатаем строку текста, который сообщает Пользователю, если он работает или нет. Там также добавили [ф6] для печати Escape-последовательности для выравнивания линии(только для чистого выхода).

оттуда, небо это предел. Вы можете передавать этот текст на другой процесс в терминал через трубы или вы можете пройти выход из скрипта мониторинга показатель-sysmonitor, которая позволяет выводить информацию на индикатор. Он может быть установлен через

[Ф2]

после этого просто настроить индикатор, чтобы отобразить пользовательскую команду, которая будет скрипт мониторинга. Пример настройки пользовательских команд можно найти индикатор-sysmonitor .

конечно, можно написать свой собственный индикатор в Python, но это может быть просто перебор, когда есть инструмент для этого уже.

5
ответ дан 8 June 2018 в 13:55
  • 1
    indicator-sysmonitor звучит полезно, я должен попробовать. – pa4080 26 May 2018 в 11:17

вот лаунчер на языке Python, на основе этого ответа и дополнительные исследования в Интернете, что работает в Ubuntu 16.04:

[Ф1] если вы видите способ улучшить скрипт, пожалуйста, не стесняйтесь редактировать ответ. Я не много опыта с Python.

создать исполняемый файл и поместите выше линии, как и ее содержание. Предположим, что файл называется [ф5]. В зависимости от ваших потребностей и вашей природе скрипт, вы можете использовать этот лончер одним из следующих способов:

[Ф2] если вы видите способ улучшить скрипт, пожалуйста, не стесняйтесь редактировать ответ. Я не много опыта с Python.

Скриншот сделал только тогда, когда [ф7] это закончилось:

ответ

нажмите на изображение, чтобы увидеть анимированное демо. [dиода d17]в качестве альтернативы вы можете поместить скрипт в [ф8], чтобы быть доступным максимально широкой системе команд оболочки. Вы можете скачать его с этого выделить суть на github:[!dиода d17] [Ф3]

я проверил это с помощью следующего синтаксиса:

[Ф4]
4
ответ дан 8 June 2018 в 13:55

С osd_cat

Вы можете использовать osd_cat из пакета xosd-bin, например:

<<<"runs" osd_cat -d5 -i20 -o50 -f"-*-*-*-*-*-*-100-*-*-*-*-*-*-*" && firefox

Отображается «выполняется» с размером шрифта 100 для 5 секунд в позиции 20,50 на экране и начнется firefox, когда он будет готов - вам не нужно sleep при таком подходе. Вы можете использовать xfontsel, чтобы получить X-логический дескриптор шрифта (этот странный -*-*-… thingy) для опции -f, например. если вы хотите использовать другой шрифт. Прочитайте man osd_cat для получения дополнительных опций.

С помощью yad

Вы можете использовать xosd-bin следующим образом:

yad --title=runs --text="it’s running!" --timeout=5 --button=Fire:1 --button=Abort:0 || firefox

Это имеет то преимущество, что вы можете прервать команду или выполнить ее немедленно, если вы ничего не сделаете, она закроется после 5 секунд в этом примере.

3
ответ дан 8 June 2018 в 13:55
  • 1
    Привет Десерт - спасибо за ваше предложение. То, что я ищу, - это то, что осталось на экране в течение 5 минут. – Sage . 25 May 2018 в 19:07
  • 2
    @Мудрец. как это сделать, в окне [Ф1] может быть сведен к минимуму, текст меню может не. – dessert 25 May 2018 в 19:08
  • 3
    @Sage. Я тестировал оба предложенных решения, и они работают довольно хорошо. – pa4080 26 May 2018 в 11:26

С osd_cat

Вы можете использовать osd_cat из пакета xosd-bin, например:

<<<"runs" osd_cat -d5 -i20 -o50 -f"-*-*-*-*-*-*-100-*-*-*-*-*-*-*" && firefox

Отображается «выполняется» с размером шрифта 100 для 5 секунд в позиции 20,50 на экране и начнется firefox, когда он будет готов - вам не нужно sleep при таком подходе. Вы можете использовать xfontsel, чтобы получить X-логический дескриптор шрифта (этот странный -*-*-… thingy) для опции -f, например. если вы хотите использовать другой шрифт. Прочитайте man osd_cat для получения дополнительных опций.

С помощью yad

Вы можете использовать xosd-bin следующим образом:

yad --title=runs --text="it’s running!" --timeout=5 --button=Fire:1 --button=Abort:0 || firefox

Это имеет то преимущество, что вы можете прервать команду или выполнить ее немедленно, если вы ничего не сделаете, она закроется после 5 секунд в этом примере.

4
ответ дан 17 July 2018 в 13:27

Здесь находится пусковая установка 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() Если вы видите какой-либо способ улучшить сценарий, пожалуйста, не не стесняйтесь отредактировать ответ. У меня мало опыта работы с Python.

Создайте исполняемый файл и поместите вышеуказанные строки в качестве своего содержимого. Предположим, что файл называется 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 & Если вы видите какой-либо способ улучшить сценарий, пожалуйста, не стесняйтесь отредактируйте ответ. У меня мало опыта работы с Python.

Снимок экрана, сделанный только после окончания script.sh:

этот ответ

Нажмите на изображение, чтобы увидеть анимированную демонстрацию.

В качестве альтернативы вы можете разместить сценарий в /usr/local/bin для доступа к системе командной оболочки в целом. Вы можете скачать его из этого посвященного GitHub Gist:

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...
5
ответ дан 17 July 2018 в 13:27

Достаточно достаточно иметь такой скрипт:

#!/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, возвращающий успешное состояние выхода, означает, что он нашел процесс вашего скрипта и работает. В противном случае мы перейдем к else.

В обоих случаях мы печатаем строку текста, которая сообщает пользователю, работает ли она или нет. Там также добавлен printf "\r%b" "\033[2K" для печати escape-последовательности для очистки линии (только для более чистого вывода).

Оттуда небо является пределом. Вы можете передать этот текст другому процессу в терминале через канал или вы можете передать вывод из сценария мониторинга на индикатор-sysmonitor, который позволяет отображать пользовательскую информацию в индикаторе. Он может быть установлен через

sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor sudo apt-get update sudo apt-get install indicator-sysmonitor

. После этого просто настройте индикатор, чтобы отобразить пользовательскую команду, которая будет скриптом мониторинга. Пример настройки пользовательской команды можно найти в indicator-sysmonitor .

Конечно, на Python можно было написать свой собственный индикатор, но это может быть просто излишним, когда есть инструмент для этого уже.

6
ответ дан 17 July 2018 в 13:27

С osd_cat

Вы можете использовать osd_cat из пакета xosd-bin, например:

<<<"runs" osd_cat -d5 -i20 -o50 -f"-*-*-*-*-*-*-100-*-*-*-*-*-*-*" && firefox

Отображается «выполняется» с размером шрифта 100 для 5 секунд в позиции 20,50 на экране и начнется firefox, когда он будет готов - вам не нужно sleep при таком подходе. Вы можете использовать xfontsel, чтобы получить X-логический дескриптор шрифта (этот странный -*-*-… thingy) для опции -f, например. если вы хотите использовать другой шрифт. Прочитайте man osd_cat для получения дополнительных опций.

С помощью yad

Вы можете использовать xosd-bin следующим образом:

yad --title=runs --text="it’s running!" --timeout=5 --button=Fire:1 --button=Abort:0 || firefox

Это имеет то преимущество, что вы можете прервать команду или выполнить ее немедленно, если вы ничего не сделаете, она закроется после 5 секунд в этом примере.

4
ответ дан 20 July 2018 в 13:33
  • 1
    Привет Десерт - спасибо за ваше предложение. То, что я ищу, - это то, что осталось на экране в течение 5 минут. – Sage . 25 May 2018 в 19:07
  • 2
    @Sage. оба делают это, окно yad можно свести к минимуму, текст osd не может. – dessert 25 May 2018 в 19:08
  • 3
    @Sage. Я тестировал оба предложенных решения, и они работают довольно хорошо. – pa4080 26 May 2018 в 11:26

Здесь находится пусковая установка 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() Если вы видите какой-либо способ улучшить сценарий, пожалуйста, не не стесняйтесь отредактировать ответ. У меня мало опыта работы с Python.

Создайте исполняемый файл и поместите вышеуказанные строки в качестве своего содержимого. Предположим, что файл называется 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 & Если вы видите какой-либо способ улучшить сценарий, пожалуйста, не стесняйтесь отредактируйте ответ. У меня мало опыта работы с Python.

Снимок экрана, сделанный только после окончания script.sh:

этот ответ

Нажмите на изображение, чтобы увидеть анимированную демонстрацию.

В качестве альтернативы вы можете разместить сценарий в /usr/local/bin для доступа к системе командной оболочки в целом. Вы можете скачать его из этого посвященного GitHub Gist:

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...
5
ответ дан 20 July 2018 в 13:33
  • 1
    Отличная работа ! Уже поддержано – Sergiy Kolodyazhnyy 26 May 2018 в 11:10

Достаточно достаточно иметь такой скрипт:

#!/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, возвращающий успешное состояние выхода, означает, что он нашел процесс вашего скрипта и работает. В противном случае мы перейдем к else.

В обоих случаях мы печатаем строку текста, которая сообщает пользователю, работает ли она или нет. Там также добавлен printf "\r%b" "\033[2K" для печати escape-последовательности для очистки линии (только для более чистого вывода).

Оттуда небо является пределом. Вы можете передать этот текст другому процессу в терминале по каналу или вы можете передать вывод из сценария мониторинга на индикатор-sysmonitor, который позволяет отображать пользовательскую информацию в индикаторе. Он может быть установлен через

sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor sudo apt-get update sudo apt-get install indicator-sysmonitor

. После этого просто настройте индикатор, чтобы отобразить пользовательскую команду, которая будет скриптом мониторинга. Пример настройки пользовательской команды можно найти в indicator-sysmonitor .

Конечно, на Python можно было написать свой собственный индикатор, но это может быть просто излишним, когда есть инструмент для этого уже.

6
ответ дан 20 July 2018 в 13:33
  • 1
    indicator-sysmonitor звучит полезно, я должен попробовать. – pa4080 26 May 2018 в 11:17

Другие вопросы по тегам:

Похожие вопросы: