关于 Unity:什么可以替代 Gnome 2 系统顶部的监控面板?

关于 Unity:什么可以替代 Gnome 2 系统顶部的监控面板?

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

Gnome 2 面板的屏幕截图,显示了系统监视器小程序

在 Unity 中,顶部面板被锁定,无法显示窗口名称和全局菜单,因此我无法添加面板小程序。所以我的问题是:

有没有办法在 Unity 中替代这种系统监控(始终可见,不占用太多空间)?

答案1

与旧的 gnome 指示器完全一样:http://www.webupd8.org/2011/05/network-memory-and-cpu-usage-indicator.html#more

链接中的注释:安装后,从 Dash 启动系统负载指示器。与旧的 gnome 小程序不同,这是将这些指示器添加到面板的方法。

答案2

我发现以下问题和答案帮我解决了这个问题。它包含旧小程序(称为应用程序指示器)的替代品列表。不幸的是,并非所有这些小程序都可用于 natty,但至少我得到了一个非常基本的系统负载监视器(indicator-sysmonitor)和一个天气指示器(indicator-weather)。

在此处输入图片描述

点击按钮进行安装:

通过软件中心安装

答案3

下面是我用 Python 编写的一个快速而粗糙的系统监视器:

菜单栏

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

  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. 点击指标并选择“首选项”。

    例子表明

  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():
      """
      Get a readout of bytes in and out from /proc/net/dev.
      """
    
      netfile = "/proc/net/dev"
    
      try: f = open(netfile)
      except:
        sys.stderr.write("ERROR: can't open "+netfile+".\n")
        sys.exit(2)
    
      f.readline()    #Burn the top header line.
      f.readline()    #Burn the second header line.
    
      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():
      """
      Get a sample of I/O from the network interfaces.
      """
      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():
      """
      Wrapper for the diskstats_parse function that returns just the in and out.
      """
      ds = diskstats_parse("sda")
      return (ds["sda"]["writes"], ds["sda"]["reads"])
    
    def sampleDisk():
      """
      Get a sample of I/O from the disk.
      """
      return makeSample(diskstatWrapper)
    
    def diskstats_parse(dev=None):
        """
        I found this on 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()
            if len(split) != len(columns_disk) and len(split) != len(columns_partition):
                # No match
                continue
    
            data = dict(zip(columns_disk, split))
            if dev != None and dev != data['dev']:
                continue
            for key in data:
                if key != 'dev':
                    data[key] = int(data[key])
            result[data['dev']] = data
    
        return result
    
    #MAIN:    __    __    __    __    __    __    __    __    __    __    __    __
    #__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \__/  \_
    
    (indiff, outdiff) = sampleNet()
    outstr = ""
    outstr += "cpu: "+str(int(psutil.cpu_percent()))+"%\t"
    outstr += "net: "+str(indiff/1000)+"|"+str(outdiff/1000)+" K/s\t"
    
    (diskin, diskout) = sampleDisk()
    outstr += "disk: "
    if(diskin):
      outstr += "+"
    else:
      outstr += "o"
    outstr += "|"
    if(diskout):
      outstr += "+"
    else:
      outstr += "o"
    
    print outstr
    

编辑:如果您想要内存使用情况(如“top”报告),请添加以下行

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)

答案4

我对这个问题的看法:https://gist.github.com/982939

截屏:

在此处输入图片描述

相关内容