Câu hỏi Làm thế nào tôi có thể hiển thị một biểu tượng trong bảng nếu (và trong khi) một quá trình nhất định đang chạy?


Tôi có một kịch bản hoạt động ở chế độ nền. Tôi muốn hiển thị một biểu tượng trong bảng điều khiển (chỉ) nếu nó chạy; nó sẽ không hiển thị nếu kịch bản không chạy, giống như biểu tượng Dropbox.

Làm thế nào tôi có thể đạt được điều này? tôi đã cài Xubuntu 14.04.


3
2018-04-14 02:06


gốc


Ứng dụng là gì? Biểu tượng nên thay đổi hoặc là xuất hiện? - Jacob Vlijm
@JacobVlijm Đó là một kịch bản. Khi nó đang làm việc một biểu tượng phải xuất hiện trên bảng thông báo, và khi nó không hoạt động, nó phải biến mất. Ý tưởng là để có một cái nhìn nhanh chóng và biết nếu nó đang chạy hay không. - joshsoj
btw, nếu bạn cần màu sắc khác hoặc muốn thiết lập bất cứ điều gì từ ông chỉ số, chỉ đề cập đến :) - Jacob Vlijm
Cảm ơn Jacob. Một câu hỏi: có thể di chuyển biểu tượng đến một địa điểm khác không? Ý tôi là, bây giờ nó đang ở giữa "Plugin chỉ thị". Tôi có thể chuyển nó vào đầu bảng điều khiển không? - joshsoj
Có một số cách để làm điều đó. Bí quyết đơn giản nhất là thay đổi danh mục trong dòng AppIndicator3.IndicatorCategory.OTHER)vào AppIndicator3.IndicatorCategory.SYSTEM_SERVICES) hoặc là AppIndicator3.IndicatorCategory.APPLICATION_STATUS). Nếu không cung cấp những gì bạn thích có những cách khác. Cho tôi biết. - Jacob Vlijm


Các câu trả lời:


Cách hiển thị biểu tượng trong bảng nếu quá trình chạy

Dựa trên (và được giải thích trong) câu trả lời này, chúng ta có thể dễ dàng tạo ra một chỉ báo, chạy trên cả hai Xubuntu và Unity hoặc bất kỳ hương vị khác, để hiển thị nếu một quá trình, một kịch bản hoặc một ứng dụng chạy hay không.

tập lệnh chạy:

enter image description here

tập lệnh không chạy:

enter image description here

Trong kịch bản (chỉ báo) bên dưới, tôi đã thêm một chuỗi để phát hiện quy trình cho chỉ báo:

#!/usr/bin/env python3
import subprocess
import os
import time
import signal
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3, GObject
from threading import Thread

# --- set the path to the script below
script = "/path/to/script.sh"
#---

currpath = os.path.dirname(os.path.realpath(__file__))

def runs(script):
    # function to check if the process runs
    try:
        return subprocess.check_output(["pgrep", "-f", script]).decode("utf-8")
    except subprocess.CalledProcessError:
        pass

class Indicator():
    def __init__(self):
        self.app = 'show_proc'
        iconpath = currpath+"/nocolor.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.update = Thread(target=self.check_runs)
        # daemonize the thread to make the indicator stopable
        self.update.setDaemon(True)
        self.update.start()     

    def check_runs(self):
        # the function (thread), checking for the process to run
        runs1 = ""
        while True:
            time.sleep(1)
            runs2 = runs(script)
            # if there is a change in state, update the icon
            if runs1 != runs2:
                if runs2:
                    # set the icon to show
                    GObject.idle_add(
                        self.indicator.set_icon,
                        currpath+"/green.png",
                        priority=GObject.PRIORITY_DEFAULT
                        )
                else:
                    # set the icon to hide
                    GObject.idle_add(
                        self.indicator.set_icon,
                        currpath+"/nocolor.png",
                        priority=GObject.PRIORITY_DEFAULT
                        )
            runs1 = runs2


    def create_menu(self):
        menu = Gtk.Menu()
        # quit
        item_quit = Gtk.MenuItem('Quit')
        item_quit.connect('activate', self.stop)
        menu.append(item_quit)
        menu.show_all()
        return menu

    def stop(self, source):
        Gtk.main_quit()

Indicator()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()

Cách sử dụng

  1. Sao chép tập lệnh bên dưới vào một tệp trống, lưu tệp dưới dạng show_proc.py 
  2. Trong phần đầu của tập lệnh, trong dòng:

    # --- set the path to the script below
    script = "/path/to/script.sh"
    #---
    

    đặt đường dẫn đến tập lệnh hoặc ứng dụng của bạn

  3. Sao chép cả hai biểu tượng bên dưới (nhấp chuột phải -> lưu dưới dạng) và lưu chúng trong cùng một thư mục với show_proc.pyvà được đặt tên chính xác như được chỉ ra bên dưới

    green.png

    enter image description here

    nocolor.png

    enter image description here  <- đây là một biểu tượng trong suốt, nhưng là có :). di chuyển con trỏ qua nó cho đến khi ngón tay xuất hiện ...

  4. Bây giờ chạy thử show_proc.py bằng lệnh:

    python3 /path/to/show_proc.py
    

    và khởi động kịch bản của bạn

  5. Nếu tất cả hoạt động tốt, hãy thêm phần sau vào ứng dụng sgtartup:

    /bin/bash -c "sleep 15 && python3 /path/to/show_proc.py"
    

1
2018-04-15 08:57



CNTT HOẠT ĐỘNG! Cảm ơn sự giúp đỡ của bạn! - joshsoj


Trong Xubuntu, hãy cài đặt plugin bảng điều khiển Generic Monitor bằng cách dán phần sau vào terminal:

sudo apt-get install xfce4-genmon-plugin

Từ Generic Monitor plugin trang:
"Plugin này cyclically sinh ra kịch bản chỉ định / chương trình, nắm bắt đầu ra của nó (stdout) và hiển thị chuỗi kết quả vào bảng điều khiển. Chuỗi cũng có thể chứa đánh dấu để hiển thị hình ảnh, thanh, nút và chú giải công cụ được cá nhân hóa. "

Đặt tập lệnh sau để chạy bằng cách sử dụng plugin bảng điều khiển Màn hình chung. Tôi khuyên bạn không có Nhãn. Hãy chắc chắn để thay thế your_script với tên của tập lệnh và thêm vào đường dẫn đến biểu tượng của bạn.

#!/bin/bash

status=$(pgrep your_script)

if [ -n "$status" ]; then
    echo "<img>/path/to/your/icon.png</img>"
else
    echo ""
fi

Điều thú vị là bạn đề cập đến Dropbox. Tôi sử dụng plugin này cho Dropbox. 

Cũng có các plugin cho bảng điều khiển trong Unity hiển thị lệnh hoặc đầu ra tập lệnh. Tuy nhiên, tôi chỉ có Xfce nên tôi không thể xác nhận một cái cụ thể. Tôi hy vọng tất cả các công trình tuyệt vời.


1
2018-04-15 13:32