关于Unity:在顶部面板中,有什么可以替代Gnome 2系统监控的东西吗?

我习惯于在顶部的Gnome面板上有系统监控:CPU、温度、网络、风扇速度。(见下方截图)

screenshot of Gnome 2 panel showing the system monitor applets

在Unity中,顶部面板被锁定用于窗口名称和全局菜单,所以我无法添加面板小程序。 所以我的问题是:
有没有办法在Unity中替换这种系统监控(始终可见,占用空间不多)?
10个回答


请注意:indicator-multiload和其他插件现在已成为标准功能,您不需要PPA。有关教程,请参阅:http://www.howtogeek.com/118908/10-awesome-indicator-applets-for-ubuntus-unity-desktop/?PageSpeed=noscript - Tully

我找到了以下解决我的问题的问题和答案。它包含了一系列替代旧的小程序(称为应用指示器)的选项。不幸的是,其中并非所有选项都适用于Natty,但至少我成功使用了一个非常基本的系统负载监视器(indicator-sysmonitor)和一个天气指示器(indicator-weather)。

enter image description here

点击按钮进行安装:

Install via the software center


这是一个我用Python拼凑出来的快速而简单的系统监视器:

menubar

它使用“系统监视器指示器”(这里)来调用我编写的脚本。使用方法如下:

  1. 安装indicator-sysmonitor。要做到这一点,请运行以下命令:

    sudo apt-add-repository ppa:alexeftimie/ppa && sudo apt-get update && sudo apt-get install indicator-sysmonitor
    
  2. 将下面的脚本复制到一个名为sysmonitor的文件中

  3. 使脚本可执行(chmod +x path-to-file

  4. 点击指示器并选择“首选项”。

    Example showing that

  5. 选择“使用此命令”,并给它sysmonitor文件的路径。

    以下是代码:

    #!/usr/bin/python
    
    import re
    import sys
    import time
    import psutil
    
    #Functions:_    __    __    __    __    __    __    __    __    __    __    __
    #__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \_
    
    #interface |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    net_re = re.compile(r"\s*\S+:\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+\d+\s+")
    
    def getInOut():
      """
      从/proc/net/dev中获取字节的读取和写入。
      """
    
      netfile = "/proc/net/dev"
    
      try: f = open(netfile)
      except:
        sys.stderr.write("错误:无法打开"+netfile+"。\n")
        sys.exit(2)
    
      f.readline()    #跳过顶部标题行。
      f.readline()    #跳过第二行标题。
    
      inb = 0
      outb = 0
      for line in f:
        m = net_re.match(line)
        inb += int(m.group(1))
        outb += int(m.group(2))
      f.close()
    
      return (inb,outb)
    
    def sampleNet():
      """
      从网络接口获取I/O的样本。
      """
      return makeSample(getInOut)
    
    def makeSample(function):
      inlist = list()
      outlist = list()
    
      (inbytes, outbytes) = function()
      inlist.append(inbytes)
      outlist.append(outbytes)
      time.sleep(1)
    
      (inbytes, outbytes) = function()
      inlist.append(inbytes)
      outlist.append(outbytes)
    
      return (inlist[1] - inlist[0], outlist[1] - outlist[0])
    
    def diskstatWrapper():
      """
      diskstats_parse函数的包装器,只返回读取和写入。
      """
      ds = diskstats_parse("sda")
      return (ds["sda"]["writes"], ds["sda"]["reads"])
    
    def sampleDisk():
      """
      从磁盘获取I/O的样本。
      """
      return makeSample(diskstatWrapper)
    
    def diskstats_parse(dev=None):
        """
        我在stackoverflow上找到了这个函数。
        (http://stackoverflow.com/questions/3329165/python-library-for-monitoring-proc-diskstats)
        """
        file_path = '/proc/diskstats'
        result = {}
    
        # ref: http://lxr.osuosl.org/source/Documentation/iostats.txt
        columns_disk = ['m', 'mm', 'dev', 'reads', 'rd_mrg', 'rd_sectors',
                        'ms_reading', 'writes', 'wr_mrg', 'wr_sectors',
                        'ms_writing', 'cur_ios', 'ms_doing_io', 'ms_weighted']
    
        columns_partition = ['m', 'mm', 'dev', 'reads', 'rd_sectors', 'writes', 'wr_sectors']
    
        lines = open(file_path, 'r').readlines()
        for line in lines:
            if line == '': continue
            split = line.split
    
    <p><strong>编辑</strong>:如果你想要内存使用情况(如"top"报告)添加以下行:</p>
    
    <pre class="lang-py prettyprint-override"><code>memperc = int(100*float(psutil.used_phymem())/float(psutil.TOTAL_PHYMEM))
    outstr += "mem: "+str(memperc)+"%\t"
    

    如果您使用的是psutil 2.0版本,您可以通过以下代码获取GNOME系统监视器报告的内存使用情况:
    memperc = int(100*float(psutil.used_phymem()-psutil.cached_phymem())/float(psutil.TOTAL_PHYMEM))
    

    如果你的空间有限,并且你更喜欢使用单位来表示网络速度(b、k、M),你也可以使用这个。
    def withUnit(v):
        if v<1024:
          return "%03d" % v+"b";
        if v<1024**2:
          s= ("%f" % (float(v)/1024))[:3];
          if s[-1]=='.':
             s=s[:-1]
          return s +"k";
    
        return ("%f" % (float(v)/(1024**2)))[:3] +"M";
    
    
    (indiff, outdiff) = sampleNet()
    outstr = ""
    outstr += "c"+ "%02d" % int(psutil.cpu_percent())+" "
    outstr += "m"+ "%02d" % int((100*float(psutil.used_phymem())/float(psutil.TOTAL_PHYMEM)))+" "
    
    outstr += "d"+withUnit(indiff)+" u"+withUnit(outdiff)
    

感谢James对格式化和缺失的步骤(apt-add-repository)的处理。 - krumpelstiltskin
请问,您能告诉我如何获取RAM使用百分比而不是磁盘使用情况吗? - Vijay
2@neo:创建一个函数,类似于名为"getInOut()"的函数,用于解析"/proc/meminfo"文件(meminfo中的字段都是自解释的)。然后使用makeSample()调用你的新函数。 如果有需求,我会编写并发布代码。 - krumpelstiltskin
请问你能给我代码吗?我对编程一无所知。 - Vijay
我会尽量找时间去做...如果有其他人感兴趣的话,我会把它放在优先考虑的位置。 - krumpelstiltskin
@neo:请参考@zarej所提供的被接受的答案。 - krumpelstiltskin
@ krumpelstiltskin:我看过了,但是它并没有像你的那样显示速度,只是显示了图表。 - Vijay
1@neo:我在帖子中添加了关于内存使用的代码行。如果你只关心内存使用情况,我建议你从脚本中删除所有其他行,这样Python就不需要解析它们了。 - krumpelstiltskin
我用它来监测CPU、网络和内存使用情况。 - Vijay
1我发现了同样的事情,并编写了一个简短的Perl脚本来监控网络利用率。 - Nathan Osman
啊,最后更新是在2013年,无法在Ubuntu 20.04 Focal上安装... - hsandt





虽然它不在顶部面板上,但你可以使用Conky

我不使用Conky,但有一些瘦身主题可供选择,我认为你可以将其始终置于顶层。(尽管我不知道屏幕的哪个部分适合覆盖...)


+1 我一直在使用Conky来替代系统监视小程序。它非常可配置,可能需要一些工作才能达到所需的结果。对于一些好看和有趣的配置,我一直在使用webupd8.org上推荐的一个。 - belacqua


我试过几个应用程序,发现KDE上的ksysguard是我最喜欢的系统监视工具。
它在Ubuntu标准仓库中,所以你只需要在软件中心安装它。
请看这张截图中的比较。 Gnome系统监视器与KDE系统监视器(ksysguard)的处理器使用情况对比 正如你所见,ksysguard要好得多。

这个能放在面板上吗? - Robert Siemer