什么可以取代Unity顶部Gnome面板中的系统监视?


117

我曾经在顶部的Gnome面板中进行系统监视:CPU,温度,网络,风扇速度。(请参见下面的屏幕截图)

Gnome 2面板的屏幕快照,显示系统监视器小程序

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

有没有办法在Unity中替换这种系统监视(始终可见,占用很少的空间)?

Answers:



44

我发现以下问答可以为我解决问题。它包含替换为应用程序指示符的旧小程序的列表。不幸的是,还没有全部可用,但是至少我有了一个非常基本的系统负载监视器(indicator-sysmonitor)和一个天气指示器(indicator-weather)。

在此处输入图片说明

点击按钮进行安装:

通过软件中心安装


20

这是我用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

编辑:如果您要使用内存(作为报告由“顶部”)添加行

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 2011年

您能告诉我如何获得RAM%而不是磁盘使用率吗?
维杰

2
@neo:创建一个解析“ / proc / meminfo”的函数,就像称为“ getInOut()”的函数一样(meminfo中的字段是自解释性的)。然后使用makeSample()调用新函数。如果有此需求,我将编写并发布代码。
krumpelstiltskin 2011年

1
@neo:我在帖子中添加了内存使用行。如果仅使用mem,我建议您从脚本中删除所有其他行,以便python不必解析它们。
krumpelstiltskin 2011年

1
我发现了同样的事情,并编写了一个简短的Perl脚本来监视网络利用率。
内森·奥斯曼





3

它不在顶部面板中,但是您可以使用Conky

我不使用Conky,但其中有一些苗条的主题,我认为您可以始终将其放在首位。(尽管我不知道屏幕的哪一部分可以覆盖...)


+1我已经完全使用Conky了(作为系统监视器applet的替代品)。它是非常可配置的,并且可能需要花费一些工作才能获得所需的结果。对于一些美观有趣的配置,我一直在使用webupd8.org上
belacqua 2011年


-1

我尝试了一些应用程序,发现对我来说,KDE上的应用程序是最好的系统监视工具:ksysguard。

它位于Ubuntu标准存储库中,因此您只需将其安装在Software Center中即可。

请参阅此屏幕截图中的比较。 Gnome系统监视器与KDE系统监视器(ksysguard)使用多少处理器

如您所见,ksysguard更好。


这适合面板吗?
罗伯特·西默
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.