Bir simgeyi yalnızca betiğim çalışırken görüntülemenin bir yolu var mı?


10

Ben senaryo yazarken çok ama çok yeniyim. İşte 5 dakika geçtikten sonra bir görüntüyü gösteren yazdığım basit komut dosyası (çalışır):

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

İşte sorum: Bazen zamanlayıcıyı başlatıp açmadığımı hatırlayamıyorum. 5 dakika boyunca (zamanlayıcıyı başlattığım andan sona erdiğim ana kadar) bir metin veya simge göstergesi eklemenin bir yolu var mı (ideal olarak görev çubuğunda, ancak her yerde harika olurdu)?

Önerileriniz için çok teşekkürler.


1
Bash, masaüstü işlevlerini kullanmanın en iyi yolu değildir. Zenity veya yad'a bakabilirsiniz, ancak uyku fonksiyonu ile o kadar iyi çalışmıyorlar. Python kullanmayı düşünürseniz, bu GTK / wx sistem tepsisi simgesini kullanabilen çok basit bir komut dosyasıdır.
Dorian

Zenity ile daha karmaşık bir bash çözümü için, şu koda bir göz atabilirsiniz
Dorian

Merhaba Dorian - Önerileriniz için çok teşekkürler. Python'u kullanmaktan memnuniyet duyarım, beni GTK / wx sistem tepsisi simgesi için nasıl yapılır bölümüne yönlendirebilir misiniz?
Adaçayı.

Yanıtlar:


4

İşlem başladığında bir açılır bildirim görüntüleyebilirsiniz. Senaryonuzu şu şekilde değiştirin:

notify-send "Your image will arrive" "after 5 minutes" && sleep 300 && firefox file:///home/tasks/fiveminutes.jpg

Bildirim balonunun süresini -tparametre ile (ve milisaniye cinsinden süre) notify-sendkomutla ayarlayabilirsiniz, örneğin 5 dakikalık kullanım süresini ayarlamak için

notify-send -t 300000 "heading" "text"

ancak bu parametre masaüstü ortamına bağlı olarak tamamen göz ardı edilebilir (bkz bu ).


Merhaba Pomsky, öneriniz için teşekkürler. Aradığım şey, 5 dakika boyunca ekranda kalan bir şey.
Adaçayı.

1
@Adaçayı. Bildirim balonunun zaman aşımını ayarlamanın bir yolu vardır (cevaba göre düzenleme konusuna bakın), ancak maalesef belirli masaüstü ortamlarında çalışmayabilir.
pomsky

Merhaba Pomsky - bildir-gönder-t çözümü bir rüya gibi çalışır. Yardımın için sağol.
Adaçayı.

6

Böyle bir senaryoya sahip olmak için yeterli:

#!/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

Bu çok tipik bir yöntemdir ve genellikle kabuk betiklerinde kullanılır. Bunun yaptığı şey sürekli olarak çalışıyor ve saniyenin her çeyreği betiğinizin çalışıp çalışmadığını kontrol ediyor pgrep -f. if..fikabuk komut dosyalarındaki ifadeler komutların çıkış durumlarında çalışır, bu nedenle pgrep -fbaşarılı çıkış durumlarının döndürülmesi komut dosyanızın işlemini bulduğu ve çalıştığı anlamına gelir. Aksi takdirde, başka bir ifadeye gidiyoruz.

Her iki durumda da kullanıcıya çalışıp çalışmadığını bildiren bir metin satırı yazdırırız. Ayrıca printf "\r%b" "\033[2K"hattı temizlemek için bir kaçış dizisi yazdırmak için eklenmiştir (sadece daha temiz çıktı için).

Oradan, gökyüzü sınırdır. Bu metni boru yoluyla terminaldeki başka bir işleme geçirebilir veya çıktıyı izleme komut dosyasından göstergede özel bilgilerin görüntülenmesine izin veren gösterge-sysmonitor'e geçirebilirsiniz . Üzerinden kurulabilir

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

Bundan sonra, göstergeyi izleme komut dosyası olacak özel bir komut görüntüleyecek şekilde yapılandırın. Özel bir komut yapılandırma örneği burada bulunabilir .

Tabii ki, Python'da kendi göstergelerini yazabilir, ancak bunun için bir araç olduğunda bu sadece bir aşırı silah olabilir.


1
indicator-sysmonitorKulağa faydalı geliyor, denemeliyim.
pa4080

6

İşte bu cevaba ve internette ek bir araştırmaya dayanan, Ubuntu 16.04'te iyi çalışan Python başlatıcısı :

#!/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()
  • Komut dosyasını geliştirmenin herhangi bir yolunu görürseniz, lütfen yanıtı düzenlemekte tereddüt etmeyin. Python ile pek tecrübem yok.

Yürütülebilir dosya oluşturun ve yukarıdaki satırları içeriği olarak yerleştirin. Dosyanın çağrıldığını varsayalım script-indicator.py. İhtiyaçlarınıza ve komut dosyanızın doğasına bağlı olarak, bu başlatıcıyı aşağıdaki yollardan biriyle kullanabilirsiniz :

./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 &
  • Belirtmek script.shistediğiniz kişi nerede .

Ekran görüntüsü sadece script.shsona erdiğinde yapılır:

resim açıklamasını buraya girin

  • Animasyonlu bir demo görmek için resmin üzerine tıklayın.

Alternatif olarak, komut dosyasını /usr/local/binkabuk komut sistemi genişliğinde erişilebilir olacak şekilde yerleştirebilirsiniz . Bu adama GitHub Gist'ten indirebilirsiniz :

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

Aşağıdaki sözdizimi ile test ettim:

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...

2
Aferin ! Zaten kaldırıldı
Sergiy Kolodyazhnyy

4

İle osd_cat

Sen kullanabilirsiniz osd_catgelen xosd-bin Xosd-bin'i yüklepaketin, örneğin:

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

Yazı tipi boyutu olan bu görüntüler “çalışır” 100için 5konumunda saniye 20,50ekran ve başlar üstünde firefoxşey hazır - Gerek duymadığınız sleepbu yaklaşımla. Sen kullanabilirsiniz xfontselX Mantıksal Yazı Tanımlayıcısı (bu garip almak -*-*-…için zımbırtı) -fEğer farklı bir yazı tipi kullanmak isterseniz seçeneği, örneğin. man osd_catDaha fazla seçenek için okuyun .

İle yad

yad Yad yükleAşağıdaki gibi kullanabilirsiniz :

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

Bunun avantajı, komutu iptal edebilmeniz veya hemen uygulayabilmenizdir, hiçbir şey yapmazsanız 5bu örnekte saniyeler sonra kapanacaktır .


Merhaba Tatlı - öneriniz için teşekkürler. Aradığım şey, 5 dakika boyunca ekranda kalan bir şey.
Adaçayı.

@Adaçayı. her ikisi de bunu yapar, yadpencere küçültülebilir, osd metni olamaz.
tatlı

@Adaçayı. Her iki önerilen çözümü de test ettim ve oldukça iyi çalışıyorlar.
pa4080

0

Zaten çalışanmulti-timer bu komut dosyasını alıp, genel bir geri sayım sayacı için yığınını çıkarabilirsiniz :

pizza oyunu

indicator-sysmonitorSerge'in cevabında açıklananın aynısını kullanır .

Systray bölümü Brightness: 2344de aynı komut dosyası tarafından görüntülenir.

Eğer bash kodunun gereksiz kısımlarını sıyırmak yeni kullanıcılar için çok zorsa, burada show-sleepgerekli sınırlı işlevsellik ile adlandırılan bir komut dosyası göndermekten memnuniyet duyarım . Sadece bir yorum gönderin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.