-
-
Save miratcan/1319142 to your computer and use it in GitHub Desktop.
Ubuntu System Information Script. Prints sysinfo on terminal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# | |
# archey [version 0.1-11] | |
# | |
# Maintained by Melik Manukyan <[email protected]> | |
# 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