Apa yang bisa menggantikan pemantauan sistem di Panel Gnome atas di Unity?


117

Saya terbiasa memiliki pemantauan Sistem di atas Panel Gnome: CPU, Suhu, Net, Kecepatan Fan. (lihat tangkapan layar di bawah)

tangkapan layar panel Gnome 2 yang menunjukkan applet monitor sistem

Di Unity, Panel Atas dikunci untuk nama jendela dan menu global, jadi saya tidak bisa menambahkan applet panel. Jadi pertanyaan saya adalah:

Apakah ada cara untuk mengganti pemantauan sistem semacam ini (selalu terlihat, tidak memakan banyak ruang) di Unity?

Jawaban:



44

Saya menemukan pertanyaan dan jawaban berikut yang memecahkan masalah bagi saya. Ini berisi daftar penggantian untuk applet lama yang disebut indikator aplikasi. Sayangnya belum semuanya tersedia untuk natty, tapi setidaknya saya punya monitor beban sistem yang sangat dasar (indikator-sysmonitor) dan indikator cuaca (indikator-cuaca) yang berfungsi.

masukkan deskripsi gambar di sini

Klik tombol untuk menginstal:

Instal melalui pusat perangkat lunak


20

Berikut ini adalah monitor sistem yang cepat dan kotor yang saya retas bersama dari python: menubar

Ia menggunakan "Indikator Monitor Sistem" (di sini ) untuk memanggil skrip yang saya tulis. Untuk menggunakannya:

  1. instal indicator-sysmonitor. Untuk melakukannya, jalankan perintah berikut:

    sudo apt-add-repository ppa:alexeftimie/ppa && sudo apt-get update && sudo apt-get install indicator-sysmonitor
    
  2. salin skrip di bawah ini ke file yang disebut sysmonitor

  3. membuat skrip dapat dieksekusi ( chmod +x path-to-file)

  4. klik pada indikator dan pilih "Preferensi". Contoh menunjukkan itu

  5. pilih "gunakan perintah ini" dan berikan path ke file sysmonitor.

ini kodenya:

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

Sunting: jika Anda ingin penggunaan memori (seperti yang dilaporkan oleh "atas") tambahkan baris

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

Jika Anda memiliki psutil versi 2.0 maka Anda bisa mendapatkan penggunaan memori seperti yang dilaporkan oleh Monitor Sistem GNOME dengan baris berikut:

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

Jika Anda memiliki sedikit ruang, dan Anda lebih suka memiliki unit untuk kecepatan bersih (b, k, M) Anda dapat menggunakan ini juga

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)

terima kasih James untuk pemformatan dan langkah yang hilang (apt-add-repository).
krumpelstiltskin

Bisakah Anda memberi tahu saya bagaimana saya bisa mendapatkan% RAM daripada menggunakan disk?
Vijay

2
@neo: membuat fungsi yang mem-parsing "/ proc / meminfo" seperti yang disebut "getInOut ()" (bidang dalam meminfo cukup jelas). Kemudian panggil fungsi baru Anda dengan makeSample (). Jika ada permintaan untuk ini, saya akan menulis dan memposting kode.
krumpelstiltskin

1
@neo: saya menambahkan baris untuk penggunaan memori ke posting. jika mem penggunaan adalah semua yang Anda inginkan, saya sarankan Anda menghapus semua baris lain dari skrip sehingga python tidak harus menguraikannya.
krumpelstiltskin

1
Saya menemukan hal yang sama dan menulis skrip Perl pendek yang memonitor pemanfaatan jaringan.
Nathan Osman





3

Itu tidak ada di panel atas, tetapi Anda bisa menggunakan Conky .

Saya tidak menggunakan Conky, tetapi ada beberapa tema tipis di luar sana dan saya pikir Anda dapat membuatnya selalu di atas. (Meskipun aku tidak tahu bagian mana dari layar yang akan bagus untuk menutupi ...)


+1 Saya telah menggunakan Conky untuk ini (sebagai pengganti applet monitor sistem). Ini sangat dapat dikonfigurasi, dan kemungkinan dibutuhkan beberapa usaha untuk mendapatkan hasil yang diinginkan. Untuk beberapa konfigurasi yang tampan dan menarik, saya telah menggunakan yang disarankan di webupd8.org
belacqua


-1

Saya mencoba beberapa aplikasi dan saya menemukan bahwa yang ada di KDE adalah alat monitor sistem terbaik: ksysguard.

Itu ada di repositori standar Ubuntu, jadi Anda tinggal menginstalnya di Software Center.

Lihat perbandingan dalam tangkapan layar ini. Berapa banyak prosesor yang menggunakan Monitor Sistem Gnome vs KDE System Monitor (ksysguard)

Seperti yang Anda lihat, ksysguard jauh lebih baik.


Apakah itu sesuai dengan panel?
Robert Siemer
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.