Skip to content

Instantly share code, notes, and snippets.

@uugr
Created October 27, 2011 09:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save uugr/1319137 to your computer and use it in GitHub Desktop.
Save uugr/1319137 to your computer and use it in GitHub Desktop.
Ubuntu System Information Script. Prints sysinfo on terminal
#!/usr/bin/env python
#
# archey [version 0.1-11]
#
# Maintained by Melik Manukyan <melik@archlinux.us>
# Distributed under the terms of the GNU General Public License v3.
# See http://www.gnu.org/licenses/gpl.txt for the full license text.
#
# System information tool for Archlinux written in python.
#-----------------Customized For Ubuntu----------------------------
# Ugur
# ubuntu based on archey [version 0.1-11]
# ubuntu logo ascii art by coralsaw "http://ubuntuforums.orgshowthread.php?t=351870"
#
# Distributed under the terms of the GNU General Public License v3.
# See http://www.gnu.org/licenses/gpl.txt for the full license text.
# System information tool for Ubuntu written in python 2.7.2
#------------------------------------------------------------------
# Import libraries
import os, platform, sys, subprocess, optparse, re
from subprocess import Popen, PIPE
from optparse import OptionParser
from getpass import getuser
from time import ctime, sleep
# Display [Comment/Uncomment to Enable/Disable information.]
display = [
'hostname', # Display Machine Hostname
'kernel', # Display Kernel Version
'uptime', # Display Battery Usage [Requires 'acpi']
'battery', # Display System Uptime
'wm', # Display Window Manager
'de', # Display Desktop Environment
'ram', # Display RAM Usage
'cpu', # Display CPU Model
'sh', # Display Current Shell
'fs:/boot', # Display /boot Partition Usage
'fs:/home', # Display /home Partition Usage
# 'fs:/MOUNT/POINT', # Display * Partition, Edit To Your Needs
# 'fs:/' # Display / Partition Usage
]
# Array containing Values
result = []
# Options
if __name__=='__main__':
parser = OptionParser(usage='%prog [-c COLOR] [-s, --screenshot]', description='To customize the info displayed on archey, edit "/usr/bin/archey" directly and look for the display array. Note: Archey can only allow up to 15 fields.', version="%prog 0.1.11")
parser.add_option('-c',
action='store', default='blue', type='choice', dest='color', choices=('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'), help='choose a color: black, red, green, yellow, blue, magenta, cyan, white [Default: blue]')
parser.add_option('-s', '--screenshot',
action='store_true', dest='screenshot', help='take a screenshot')
(options, args) = parser.parse_args()
# Define colors
colorscheme = '%s' % options.color
colors = {'black': '0', 'red': '1', 'green': '2', 'yellow': '3', 'blue': '4', 'magenta': '5', 'cyan': '6', 'white': '7'}
for key in colors.keys():
if key in colorscheme: colorcode = colors[key]
color = '\x1b[1;3%sm' % colorcode
color2 = '\x1b[0;3%sm' % colorcode
clear = '\x1b[0m'
# Define processes for identifying Desktop Environmentss, Window Managers, Shells.
de_dict = {
'gnome-session': 'GNOME',
'ksmserver': 'KDE',
'xfconfd': 'Xfce'}
wm_dict = {
'awesome': 'Awesome',
'beryl': 'Beryl',
'blackbox': 'Blackbox',
'compiz': 'Compiz',
'dwm': 'DWM',
'enlightenment': 'Enlightenment',
'fluxbox': 'Fluxbox',
'fvwm': 'FVWM',
'icewm': 'IceWM',
'kwin': 'KWin',
'metacity': 'Metacity',
'musca': 'Musca',
'openbox': 'Openbox',
'pekwm': 'PekWM',
'ratpoison': 'ratpoison',
'scrotwm': 'ScrotWM',
'wmaker': 'Window Maker',
'wmii': 'wmii',
'xfwm4': 'Xfwm',
'xmonad': 'xmonad'}
sh_dict = {
'zsh': 'Zsh',
'bash': 'Bash',
'dash': 'Dash',
'fish': 'Fish',
'ksh': 'Ksh',
'csh': 'Csh',
'jsh': 'Jsh',
'tcsh': 'Tcsh'}
# Find running processes.
def xmonadfix(str):
if re.compile("xmonad").match(str): return "xmonad"
return str
p1 = Popen(['ps', '-u', getuser()], stdout=PIPE).communicate()[0].split('\n')
processes = map(xmonadfix, [process.split()[3] for process in p1 if process])
p1 = None
# Print coloured key with normal value.
def output(key, value):
output = '%s%s:%s %s' % (color, key, clear, value)
result.append(output)
# RAM Function
def ram_display():
raminfo = Popen(['free', '-m'], stdout=PIPE).communicate()[0].split('\n')
ram = ''.join(filter(re.compile('M').search, raminfo)).split()
used = int(ram[2]) - int(ram[5]) - int(ram[6])
output ('RAM', '%s MB / %s MB' % (used, ram[1]))
# Screenshot Function
screen = '%s' % options.screenshot
def screenshot():
print 'Taking shot in',
list = range(1,6)
list.reverse()
for x in list:
print '%s..' % x,
sys.stdout.flush()
sleep(1)
print 'Say Cheeze!'
subprocess.check_call(['scrot'])
# Operating System Function
distro = " ".join(platform.linux_distribution())
output('Distro', distro)
# Kernel Function
def kernel_display():
kernel = Popen(['uname', '-r'], stdout=PIPE).communicate()[0].rstrip('\n')
output ('Kernel', kernel)
# Hostname Function
def hostname_display():
hostname = Popen(['uname', '-n'], stdout=PIPE).communicate()[0].rstrip('\n')
output ('Hostname', hostname)
# CPU Function
def cpu_display():
file = open('/proc/cpuinfo').readlines()
cpuinfo = re.sub(' +', ' ', file[4].replace('model name\t: ', '').rstrip('\n'))
output ('CPU', cpuinfo)
# Uptime Function
def uptime_display():
fuptime = int(open('/proc/uptime').read().split('.')[0])
day = int(fuptime / 86400)
fuptime = fuptime % 86400
hour = int(fuptime / 3600)
fuptime = fuptime % 3600
minute = int(fuptime / 60)
uptime = ''
if day == 1:
uptime += '%d day, ' % day
if day > 1:
uptime += '%d days, ' % day
uptime += '%d:%02d' % (hour, minute)
output('Uptime', uptime)
# Battery Function [Requires: acpi]
def battery_display():
p1 = Popen(['acpi'], stdout=PIPE).communicate()[0].lstrip()
battery = p1.split(' ')[3].rstrip('\n')
output ('Battery', battery)
# Desktop Environment Function
def de_display():
de = 'None found'
for key in de_dict.keys():
if key in processes: de = de_dict[key]
output ('Desktop Environment', de)
# Window Manager Function
def wm_display():
wm = 'None found'
for key in wm_dict.keys():
if key in processes: wm = wm_dict[key]
output ('Window Manager', wm)
# Shell Function
def sh_display():
sh = os.getenv("SHELL").split('/')[-1].capitalize()
output ('Shell', sh)
# File System Function
def fs_display(mount=''):
p1 = Popen(['df', '-TPh', mount], stdout=PIPE).communicate()[0]
used = [line for line in p1.split('\n') if line][1]
used = used.split()[3]
total = [line for line in p1.split('\n') if line][1]
total = total.split()[2]
type = [line for line in p1.split('\n') if line][1]
type = type.split()[1]
if mount == '/': mount = '/root'
fs = mount.rpartition('/')[2].title() + " FS"
part = '%s / %s (%s)' % (used, total, type)
output (fs, part)
# Run functions found in 'display' array.
for x in display:
call = [arg for arg in x.split(':') if arg]
funcname=call[0] + '_display'
func=locals()[funcname]
if len(call) > 1:
func(arg)
else:
func()
# Array containing values.
result.extend(['']*(16 - len(display)))
###### Result #######
print """%s%s%s .-.
.-'``( ) %s%s
,`\ \ `-`. %s%s %s%s
/ \ '``-. ` %s%s %s%s
.-. , `___: %s%s %s%s%s
( ) : ___ %s%s %s%s
`-` ` , : %s%s %s%s
\ / ,..-` , %s%s
`./ / .-.` %s%s
`-..-( ) %s%s
`-`
%s%s%s
%s%s%s%s%s%s """ % (color, color, color, result[0], color, result[1], color, result[2], color, result[3], color, result[4], color, result[5], color, result[6], color, color2, color, result[7], color, color2, color, result[8], color, color2, result[9], color2, result[10], color2, result[11], color2, result[12], color2, result[13], color2, result[14], color2, result[15], color2, clear)
if screen == 'True':
screenshot()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment