首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件系统使用指示器

文件系统使用指示器
EN

Ask Ubuntu用户
提问于 2016-09-26 06:18:12
回答 2查看 3K关注 0票数 10

我无法找到一个适当的实用程序来指示面板上文件系统的使用情况(分区可用的%空间)。

我并不期待安装任何不好的桌面管理工具,而是一个简单的指示器。

我感谢你所有的建议。

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2016-09-26 18:17:09

编辑:

1.新答案

虽然可以使用这个选项的底部的答案(请参见[2.]),但它会导致一个带有附加选项的ppa -version,该选项将在preferences窗口中设置。

备选方案包括:

  • 在一个窗口中设置所有别名
  • 设置面板图标的主题颜色:
  • 设置警告阈值
  • 在通知中显示有关新挂载/连接卷的信息:
  • 启动运行

此外,该指示器现在包括一个较小(宽度)图标设置为其他发行版(如xfce),它将自动应用,取决于窗口管理器。

安装:

代码语言:javascript
复制
sudo add-apt-repository ppa:vlijm/spaceview
sudo apt-get update
sudo apt-get install spaceview

2.旧答案

下面的脚本是一个指示器,它列出了您的设备并显示了它们的使用情况。信息每10秒更新一次(如果必要的话)。

  • 当指示符正在运行时,您可以选择要在图标中表示的设备。下一次运行指示器时,将记住该设备:
  • 对于一个或多个设备,您可以设置一个替代名称(“自定义名称”),作为示例设置在脚本的头上,这将显示:别名=[ “sdc1”,“棍子”,“sdb1”、“外部,“sda2”,“根”,“sda4”,“ntfs1”,“sda5”,“ntfs2”,"//192.168.0.104/ media“,”netwerk媒体“,“//192.168.0.104/werkmap_纪录片”,“netwerk docs”,]:
  • 您可以设置一个阈值;如果您的任何一个设备的空闲空间都低于这个阈值,您将得到一个警告:
  • 插入/拔出的设备将在10秒内从菜师中添加/删除。

脚本

代码语言:javascript
复制
#!/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 alias names below in the format [[device1, alias1], [device2, alias2]]
#--- just set alias = [] to have no custom naming
alias = []
#--- set the threshold to show a warning below 
#--- set to 0 to have no warning
threshold = 17
#---
currpath = os.path.dirname(os.path.realpath(__file__))
prefsfile = os.path.join(currpath, "showpreferred")

class ShowDevs():
    def __init__(self):
        self.default_dev = self.get_showfromfile()
        self.app = 'show_dev'
        iconpath = currpath+"/0.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("Starting up...", self.app)
        self.update = Thread(target=self.check_changes)
        self.update.setDaemon(True)
        self.update.start()

    def check_changes(self):
        state1 = None
        while True:
            self.state2 = self.read_devices()
            if self.state2 != state1:
                self.update_interface(self.state2)
            state1 = self.state2
            time.sleep(10)

    def update_interface(self, state):
        warning = False; self.newmenu = []
        for dev in state:
            mention = self.create_mention(dev)
            name = mention[0]; deci = mention[2]; n = mention[1]
            if n <= threshold:
                warning = True
            try:
                if self.default_dev in name:
                    newlabel = mention[3]
                    newicon = currpath+"/"+str(10-deci)+".png"
            except TypeError:
                pass
            self.newmenu.append(name+" "+str(n)+"% free")
        if warning:
            newlabel = "Check your disks!"
            newicon = currpath+"/10.png"
        try:
            self.update_indicator(newlabel, newicon)
        except UnboundLocalError:
            labeldata = self.create_mention(state[0])
            newlabel = labeldata[3]
            newicon = currpath+"/"+str(10-labeldata[2])+".png"
            self.update_indicator(newlabel, newicon)
        GObject.idle_add(self.set_new, 
            priority=GObject.PRIORITY_DEFAULT)  

    def update_indicator(self, newlabel, newicon):
        GObject.idle_add(self.indicator.set_label,
            newlabel, self.app,
            priority=GObject.PRIORITY_DEFAULT)   
        GObject.idle_add(self.indicator.set_icon,
            newicon,
            priority=GObject.PRIORITY_DEFAULT)

    def set_new(self):
        for i in self.initmenu.get_children():
            self.initmenu.remove(i)
        for item in self.newmenu:
            add = Gtk.MenuItem(item)
            add.connect('activate', self.change_show)
            self.initmenu.append(add) 
        menu_sep = Gtk.SeparatorMenuItem()
        self.initmenu.append(menu_sep)
        self.item_quit = Gtk.MenuItem('Quit')
        self.item_quit.connect('activate', self.stop)
        self.initmenu.append(self.item_quit)
        self.initmenu.show_all()

    def change_show(self, *args):
        index = self.initmenu.get_children().index(self.initmenu.get_active())
        self.default_dev = self.newmenu[index].split()[0]
        open(prefsfile, "wt").write(self.default_dev)
        self.update_interface(self.read_devices())

    def create_mention(self, dev):
        name = dev[1] if dev[1] else dev[0]
        n = dev[2]; deci = round(dev[2]/10)
        newlabel = name+" "+str(n)+"% free"
        return (name, n, deci, newlabel)        

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

    def read_devices(self):
        # read the devices, look up their alias and the free sapace
        devdata = []
        data = subprocess.check_output(["df", "-h"]).decode("utf-8").splitlines()
        relevant = [l for l in data if all([
                    any([l.startswith("/dev/"), l.startswith("//")]),
                    not "/loop" in l])
                    ]
        for dev in relevant:
            data = dev.split(); name = data[0]; pseudo = None       
            free = 100-int([s.strip("%") for s in data if "%" in s][0])
            for al in alias:
                if al[0] in name:
                    pseudo = al[1]
                    break
            devdata.append((name, pseudo, free)) 
        return devdata

    def get_showfromfile(self):
        # read the preferred default device from file
        try:
            defdev = open(prefsfile).read().strip()
        except FileNotFoundError:
            defdev = None
        return defdev

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

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

图标

0.png

1.png

2.png

3.png

4.png

5.png

6.png

7.png

8.png

9.png

10.png

设置

设置很简单:

  • 将脚本复制到一个空文件中,保存为showusage.py
  • 将上面的图标,完全按照标签中的名称保存到与脚本完全相同的目录中(右击>另存为)
  • 在脚本的首页中,设置(可能的)替代名称(aliasses)。下面的示例:别名=[ “sda2”,“根”,“sdb1”、“外部 ]如果您想不改变显示设备,请使用:别名= [] ...and (如果需要),更改阈值以显示警告:#--将阈值设置为在以下显示警告(%空闲,步骤为10%) #--设置为0以没有警告阈值= 10 --就这样

运行它的

若要使用该指示符,请运行以下命令:

代码语言:javascript
复制
python3 /path/to/showusage.py

若要将其添加到启动应用程序中,请使用以下命令:

代码语言:javascript
复制
/bin/bash -c "sleep 10 && python3 /path/to/showusage.py"

选择应用程序:破折号>启动应用程序>添加,添加上面的命令。

票数 19
EN

Ask Ubuntu用户

发布于 2016-09-26 12:56:52

安装Sysmonitor指示器

代码语言:javascript
复制
sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor
sudo apt-get update
sudo apt-get install indicator-sysmonitor

它还有“文件系统中的可用空间”选项。

票数 4
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/829707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档