আমার স্ক্রিপ্টটি চলমান থাকাকালীন কোনও আইকন প্রদর্শন করার জন্য কি কোনও উপায় আছে?


10

আমি খুব, স্ক্রিপ্টিং খুব নতুন। এখানে আমি লিখেছি এমন সরল স্ক্রিপ্ট (যা কাজ করে) যা 5 মিনিট কেটে গেলে কোনও চিত্র প্রদর্শিত হয়:

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

এখানে আমার প্রশ্ন: আমি টাইমার শুরু করেছি কিনা কখনও কখনও মনে করতে পারি না। কোনও পাঠ্য বা আইকন ইঙ্গিতটি যুক্ত করার কোনও উপায় আছে (আদর্শভাবে টাস্কবারে, তবে যে কোনও জায়গায় দুর্দান্ত লাগবে) যা 5 মিনিটের জন্য উপস্থিত হয় (যে মুহুর্তে আমি টাইমারটি শুরু করি আমি শেষ করার মুহুর্তে)?

কোন পরামর্শের জন্য অনেক ধন্যবাদ।


1
ডেস্কটপ ফাংশনগুলি হ্যান্ডেল করার জন্য বাশ সর্বাধিক উপায় নয়। আপনি জেনিটি বা ইয়াডের দিকে তাকিয়ে থাকতে পারেন তবে তারা ঘুমের ক্রিয়ায় এত দুর্দান্ত কাজ করে না। যদি আপনি পাইথন ব্যবহার বিবেচনা করেন তবে এটি একটি খুব সাধারণ স্ক্রিপ্ট যা কোনও জিটিকে / ডাব্লুএক্স সিস্টেমের ট্রে আইকন ব্যবহার করতে পারে।
ডোরিয়ান

Zenity সহ আরও জটিল বাশ সমাধানের জন্য, আপনি এই কোডটি একবার দেখে নিতে পারেন: github.com/john-davies/ Shellpomo
ডোরিয়ান

হাই ডোরিয়ান - আপনার পরামর্শের জন্য অনেক ধন্যবাদ। আমি পাইথনটি ব্যবহার করতে পেরে খুশি হব, আপনি কি আমাকে জিটিকে / ডাব্লুএক্স সিস্টেম ট্রে আইকনটির জন্য নির্দেশ করতে পারেন?
সাগে।

উত্তর:


4

প্রক্রিয়া শুরু হয়ে গেলে আপনি একটি পপ-আপ বিজ্ঞপ্তি প্রদর্শন করতে পারেন। আপনার স্ক্রিপ্টটি কেবল এতে পরিবর্তন করুন

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"

কিন্তু এই প্যারামিটারটি আপনার ডেস্কটপে পরিবেশ উপর নির্ভর করে সম্পূর্ণভাবে উপেক্ষা করা হতে পারে (দেখুন এই )।


হাই পমস্কি, আপনার পরামর্শের জন্য ধন্যবাদ। আমি যা খুঁজছি তা হ'ল পুরো 5 মিনিটের জন্য স্ক্রিনে থেকে যায়।
সাগে।

1
@Sage। বিজ্ঞপ্তি বুদ্বুদ জন্য সময়সীমা সেট করার একটি উপায় আছে (উত্তরের সম্পাদনা দেখুন), তবে দুর্ভাগ্যক্রমে এটি নির্দিষ্ট ডেস্কটপ পরিবেশে কাজ নাও করতে পারে।
পোমস্কি

হাই পোমস্কি - বিজ্ঞপ্তি-প্রেরণ-সমাধান একটি স্বপ্নের মতো কাজ করে। আমি সত্যিই তোমার সাহায্যকে উপলব্ধি করি.
সাগে।

6

এটির মতো স্ক্রিপ্ট থাকা যথেষ্ট sufficient

#!/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 -fif..fiশেল স্ক্রিপ্টগুলিতে বিবৃতি কমান্ডগুলির প্রস্থান স্থিতিতে পরিচালিত হয়, সুতরাং pgrep -fসফল প্রস্থান স্থিতি ফিরে আসা মানে এটি আপনার স্ক্রিপ্টের প্রক্রিয়া খুঁজে পেয়েছে এবং এটি চলছে। অন্যথায়, আমরা অন্য বিবৃতিতে যান।

উভয় ক্ষেত্রেই আমরা পাঠ্যের একটি লাইন প্রিন্ট করি যা ব্যবহারকারীকে বলছে যে এটি চলছে কিনা। printf "\r%b" "\033[2K"লাইন সাফ করার জন্য একটি পালানোর ক্রম মুদ্রণের জন্য যুক্ত করা হয়েছে (কেবল ক্লিনার আউটপুট জন্য)।

সেখান থেকে আকাশ সীমাবদ্ধ। আপনি টেক্সটটি পাইপের মাধ্যমে টার্মিনালের অন্য প্রক্রিয়াতে পাঠাতে পারেন বা আপনি নজরদারি স্ক্রিপ্ট থেকে সূচক-সিজনমিটারে আউটপুটটি পাস করতে পারেন , যা সূচকটিতে কাস্টম তথ্য প্রদর্শনের অনুমতি দেয়। এটি মাধ্যমে ইনস্টল করা যেতে পারে

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

এরপরে একটি কাস্টম কমান্ড প্রদর্শনের জন্য সূচকটি কনফিগার করুন যা মনিটরিং স্ক্রিপ্ট হবে। একটি কাস্টম কমান্ড কনফিগার করার উদাহরণ এখানে পাওয়া যাবে

অবশ্যই, পাইথনে কেউ তাদের নিজস্ব সূচক লিখতে পারে, তবে এটির জন্য কেবল কোনও ওভারকিল হতে পারে যখন ইতিমধ্যে এর জন্য কোনও সরঞ্জাম রয়েছে।


1
indicator-sysmonitorদরকারী মনে হচ্ছে, আমি এটি চেষ্টা করা উচিত।
pa4080

6

এই উত্তর এবং ইন্টারনেটের অতিরিক্ত গবেষণার উপর ভিত্তি করে পাইথন লঞ্চারটি এখানে রয়েছে যা উবুন্টু 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()
  • আপনি যদি স্ক্রিপ্টটি উন্নত করার কোনও উপায় দেখতে পান তবে দয়া করে উত্তরটি সম্পাদনা করতে দ্বিধা করবেন না। পাইথনের সাথে আমার খুব বেশি অভিজ্ঞতা নেই।

এক্সিকিউটেবল ফাইল তৈরি করুন এবং উপরের লাইনগুলিকে এর সামগ্রী হিসাবে স্থাপন করুন place ধরে নেওয়া যাক ফাইলটি বলা হয়েছে 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শেল কমান্ড সিস্টেম প্রশস্ত হিসাবে অ্যাক্সেসযোগ্য হতে রাখতে পারেন। আপনি এই উত্সর্গীকৃত গিটহাব গিস্ট থেকে এটি ডাউনলোড করতে পারেন :

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

2
সাবাশ ! ইতিমধ্যে উত্সাহিত
সের্গেই কলডিয়্যাজহনি

4

সঙ্গে osd_cat

আপনি প্যাকেজটি osd_catথেকে ব্যবহার করতে পারেন xosd-bin Xosd-bin ইনস্টল করুন, যেমন:

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

এটি স্ক্রিনে অবস্থানের 100জন্য 5কয়েক সেকেন্ডের জন্য হরফ আকারের সাথে "রান" প্রদর্শন 20,50করে এবং firefoxএটি প্রস্তুত হওয়ার পরে শুরু হয় - আপনার sleepএই পদ্ধতির প্রয়োজন নেই। আপনি বিকল্পটির জন্য xfontselএক্স লজিকাল ফন্ট বর্ণনাকারী (এই বিচিত্র -*-*-…জিনিস) -fপেতে ব্যবহার করতে পারেন, যেমন আপনি যদি অন্য কোনও ফন্ট ব্যবহার করতে চান। man osd_catআরও বিকল্পের জন্য পড়ুন ।

সঙ্গে yad

আপনি yad ইয়াড ইনস্টল করুননিম্নলিখিত হিসাবে ব্যবহার করতে পারেন :

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

এটির সুবিধাটি রয়েছে যে আপনি আদেশটি বাতিল করতে বা তত্ক্ষণাত্ কার্যকর করতে পারেন, আপনি যদি কিছু না করেন তবে এটি 5উদাহরণের কয়েক সেকেন্ড পরে বন্ধ হয়ে যাবে ।


হাই ডেজার্ট - আপনার পরামর্শের জন্য ধন্যবাদ। আমি যা খুঁজছি তা হ'ল পুরো 5 মিনিটের জন্য স্ক্রিনে থেকে যায়।
সাগে।

@Sage। উভয়ই তা করে, yadউইন্ডোটি ছোট করা যায়, ওএসডি পাঠ্যটি পারেন না।
মিষ্টান্ন

@Sage। আমি উভয় প্রস্তাবিত সমাধান পরীক্ষা করেছি এবং তারা বেশ সুন্দর কাজ করে।
pa4080

0

আপনি এটি ইতিমধ্যে কাজ করা স্ক্রিপ্টটিmulti-timer নিতে পারেন এবং একটি জেনেরিক গণনা-ডাউন টাইমারের জন্য এটির বেশিরভাগ অংশ বের করে দিতে পারেন:

কাটনা পিজা.gif

এটি indicator-sysmonitorসার্জ এর উত্তরে বর্ণিত একই ব্যবহার করে ।

Systray অংশটি Brightness: 2344একই স্ক্রিপ্ট দ্বারা প্রদর্শিত হয়।

যদি নতুন ব্যবহারকারীদের জন্য বাশ কোডের অপ্রয়োজনীয় অংশগুলি সরিয়ে ফেলা খুব কঠিন হয় তবে আমি এখানে show-sleepপ্রয়োজনীয় সীমাবদ্ধ কার্যকারিতা সহ একটি স্ক্রিপ্ট পোস্ট করতে পেরে খুশি হব । শুধু নীচে একটি মন্তব্য পোস্ট করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.