Was kann die Systemüberwachung im oberen Gnome-Panel in Unity ersetzen?


117

Ich bin es gewohnt, Systemüberwachung im oberen Gnome-Panel zu haben: CPU, Temperatur, Netz, Lüftergeschwindigkeit. (siehe Screenshot unten)

Screenshot des Gnome 2-Panels mit den Systemmonitor-Applets

In Unity ist der obere Bereich für Fensternamen und globales Menü gesperrt, daher kann ich keine Panel-Applets hinzufügen. Meine Frage lautet also:

Gibt es eine Möglichkeit, diese Art der Systemüberwachung (immer sichtbar, mit geringem Platzbedarf) in Unity zu ersetzen?

Antworten:



44

Ich fand die folgende Frage und Antwort, die das Problem für mich löste. Es enthält eine Liste der Ersetzungen für die alten Applets, die als Anwendungsindikatoren bezeichnet werden. Leider sind noch nicht alle für natty verfügbar, aber ich habe zumindest eine sehr einfache Systemlastüberwachung (Indicator-Sysmonitor) und eine funktionierende Wetteranzeige (Indicator-Weather).

Bildbeschreibung hier eingeben

Klicken Sie zum Installieren auf die Schaltfläche:

Installation über das Software Center


20

Hier ist ein schneller und unsauberer Systemmonitor, den ich zusammen aus Python gehackt habe: Menüleiste

Es verwendet den "System Monitor Indicator" ( hier ), um das Skript aufzurufen, das ich geschrieben habe. Um es zu benutzen:

  1. installieren indicator-sysmonitor. Führen Sie dazu den folgenden Befehl aus:

    sudo apt-add-repository ppa:alexeftimie/ppa && sudo apt-get update && sudo apt-get install indicator-sysmonitor
    
  2. Kopieren Sie das folgende Skript in eine Datei namens sysmonitor

  3. mach das Skript ausführbar ( chmod +x path-to-file)

  4. Klicken Sie auf den Indikator und wählen Sie "Einstellungen". Beispiel zeigt das

  5. Wählen Sie "Diesen Befehl verwenden" und geben Sie den Pfad zur Sysmonitor-Datei an.

Hier ist der Code:

#!/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

BEARBEITEN: Wenn Sie die Speichernutzung möchten (als Bericht von "oben"), fügen Sie die Zeilen hinzu

memperc = int(100*float(psutil.used_phymem())/float(psutil.TOTAL_PHYMEM))
outstr += "mem: "+str(memperc)+"%\t"

Wenn Sie über die Version 2.0 von psutil verfügen, können Sie die vom GNOME-Systemmonitor gemeldete Speichernutzung mit der folgenden Zeile abrufen:

memperc = int(100*float(psutil.used_phymem()-psutil.cached_phymem())/float(psutil.TOTAL_PHYMEM))

Wenn Sie wenig Platz haben und Einheiten für die Nettogeschwindigkeit (b, k, M) bevorzugen, können Sie dies auch verwenden

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)

danke James für die Formatierung und den fehlenden Schritt (apt-add-repository).
Krumpelstilzchen

Könnten Sie mir bitte sagen, wie ich den RAM% anstelle der Datenträgerverwendung erhalten könnte?
Vijay

2
@neo: Erstellt eine Funktion, die "/ proc / meminfo" analysiert, ähnlich der Funktion "getInOut ()" (die Felder in meminfo sind selbsterklärend). Rufen Sie dann Ihre neue Funktion mit makeSample () auf. Wenn Bedarf besteht, schreibe ich den Code und poste ihn.
krumpelstiltskin

1
@neo: Ich habe die Zeilen für die Speichernutzung zum Beitrag hinzugefügt. Wenn Sie nur Mem verwenden möchten, sollten Sie alle anderen Zeilen aus dem Skript entfernen, damit Python sie nicht analysieren muss.
krumpelstiltskin

1
Ich habe das Gleiche entdeckt und ein kurzes Perl-Skript geschrieben, das die Netzwerkauslastung überwacht.
Nathan Osman





3

Es ist nicht im oberen Bereich, aber Sie könnten Conky verwenden .

Ich verwende Conky nicht, aber es gibt einige schlanke Themen, und ich denke, Sie können es immer ganz oben machen. (Obwohl ich nicht weiß, welcher Teil des Bildschirms gut zu verdecken wäre ...)


+1 Ich habe Conky genau dafür verwendet (als Ersatz für ein Systemmonitor-Applet). Es ist extrem konfigurierbar und es ist wahrscheinlich, dass einige Arbeit erforderlich ist, um das gewünschte Ergebnis zu erzielen. Für einige gut aussehende und interessante Konfigurationen habe ich eine auf webupd8.org
belacqua


-1

Ich habe ein paar Anwendungen ausprobiert und festgestellt, dass die auf KDE für mich das beste Systemmonitor-Tool ist: ksysguard.

Es befindet sich in den Ubuntu-Standard-Repositorys, Sie müssen es also nur im Software Center installieren.

Siehe den Vergleich in diesem Screenshot. Wie viel Prozessor verwendet Gnome System Monitor im Vergleich zu KDE System Monitor (ksysguard)?

Wie Sie sehen können, ist ksysguard viel besser.


Passt das in das Panel?
Robert Siemer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.