Skript na zobrazenie systémových informácií

Sem přidávejte tipy a triky, které jsou příliš malé na článek na našem Webu. Podělte se o své zkušenosti s ostatními.
Odpovědět
Zpráva
Autor
lombardo1981
Poradce Mintu
Příspěvky: 396
Registrován: 25 lis 2014, 19:06

Skript na zobrazenie systémových informácií

#1 Příspěvek od lombardo1981 » 10 říj 2017, 16:17

Keď človeka prepadne tvorivá múza, dopadne to všelijako. Napríklad aj takto. :D
Pre svoje potreby som si vytvorila skript na zobrazenie systémových informácií v termináli. Váhala som, či ho sme dať, al napokon som sa predsa len rozhodla, že hej. a pre tento účel som ho trochu zovšeobecnila. No to ešte neznamená, že aj výstup je univerzálny. Pridám aj nejaké doplňujúce poznámky či iné možnosti zobrazenia. Jediná vec, ktorá bude odlišná, je terminálové písmo. Nadefinované je cez xfce4-terminal. Takže, kto používa XFCE, je z obliga.


Potrebné závislosti:
súbor xorg.conf
súbor Xorg.0.log
balíček sysstat
awesome-fonts na zobrazenie ikon
balíček wmctrl (ako alternatíva)
prehrávač mocplayer (voliteľný samozrejme, dá sa nahradiť)

Kód: Vybrat vše

#!/bin/bash

export LC_ALL=C
export LANG=C

OS=$(hostnamectl | awk 'NR==6{print $3,$4}')
KERNEL=$(uname -r)
ARCH=$(uname -m)
UPTIME=$(uptime -p | sed -e "s/up //")
VENDOR=$(cat  /sys/devices/virtual/dmi/id/board_vendor)
MODEL=$(cat  /sys/devices/virtual/dmi/id/product_name)
BIOS=$(cat  /sys/devices/virtual/dmi/id/bios_vendor)
DE=$(echo $DESKTOP_SESSION)
CPU=$(lscpu | awk '/Model name:/{gsub(/[(TMR)]/,"");print $3,$4,$5,$6,$7,$8,$9}' | head -1)
CPUs=$(lscpu | grep 'CPU(s)' | awk '{print $2}' | head -1)
GPU=$(lspci | awk '/VGA/{print $5,$8,$9,$10}' | tr -d '[]')
SHELL=$(echo "$SHELL" | awk -F/ '{print $NF}')

BIRTH=$(ls -dlct "/lost+found" | awk '{print $7,$6}')
BIRTH_DATE=$(date -d "$BIRTH" "+%a")
BIRTH_YEAR=$(ls -d --full-time "/lost+found" | awk '{print $6}' | cut -c 1-4)
BIRTH_TIME=$(ls -dlct "/lost+found" | awk '{print $8}')

ram_used=$(free -m | awk '/Mem/{print $3" MB"}')
ram_total=$(free -m | awk '/Mem/{print $2" MB"}')
ram_per=$(free -m | awk 'NR==2{printf "%0.0f\n",$3/$2*100}')
cpu_user=$(mpstat | awk '/all/{print $3"%"}')
cpu_sys=$(mpstat | awk '/all/{print $5"%"}')
cpu_idle=$(mpstat | awk '/all/{print $12"%"}')
temp=$(sensors coretemp-isa-0000 | awk '/Package/{gsub(/+/, "");print $4}')
temp1=$(sensors coretemp-isa-0000 | awk '/Core 0/{gsub(/+/, "");print $3}')
temp2=$(sensors coretemp-isa-0000 | awk '/Core 1/{gsub(/+/, "");print $3}')
PACKAGES=$(dpkg --list | cut -d " " -f1 | wc -l)
MONITOR=$(cat /etc/X11/xorg.conf | awk '/ModelName/{gsub(/"/, "");print $2,$3}')
RESOLUTION=$(xdpyinfo | awk '/dimensions:/{print $2}')
MOUSE=$(cat /var/log/Xorg.0.log | awk 'NR==183{print $4,$5,$6,$7}')
KEYBOARD=$(cat /var/log/Xorg.0.log | awk 'NR==205{print $4,$5}')
LAYOUT=$(setxkbmap -query | awk '/layout/{print $2}')
LAYOUT2=$(setxkbmap -query | awk '/model/{print $2}' | tr -d ' ')

DISK1=$(df -h / | awk 'NR==2{total=$2;used=$3;print used" / "total}')
DISK2=$(df -h /home | awk 'NR==2{total=$2;used=$3;print used" / "total}')
DISK3=$(df -h / | awk 'NR==2{print $5}')
DISK4=$(df -h /home | awk 'NR==2{print $5}')
TRASH=$(ls -A -U -1 "${HOME}/.local/share/Trash/files" | cut -d " " -f1 | wc -l)

gtkrc="$HOME/.gtkrc-2.0"
GtkTheme=$(grep "gtk-theme-name" "$gtkrc" | cut -d\" -f2)
GtkIcon=$(grep "gtk-icon-theme-name" "$gtkrc" | cut -d\" -f2)
GtkFont=$(grep "gtk-font-name" "$gtkrc" | cut -d\" -f2)
termfn=$(cat $HOME/.config/xfce4/terminal/terminalrc | grep 'FontName' | sed 's/FontName=//')

Artist=$(mocp -i | grep "Artist:" | sed -e "s/^.*: //")
SongTitle=$(mocp -i | grep "SongTitle:" | sed -e "s/^.*: //")
Album=$(mocp -i | grep "Album:" | sed -e "s/^.*: //")



 echo  ""
 echo -e "\e[94m   -------------------"
 echo "   SYSTEM INFORMATIONS"
 echo "   -------------------"
 echo  ""
 echo -e "\e[94m     lombardo1981"
 echo -e "\e[94m     \e[39m$OS $ARCH"
 echo -e "\e[94m     \e[39m$KERNEL"
 echo -e "\e[94m     \e[39m$UPTIME"
 echo -e "\e[94m     \e[39m$SHELL"
 echo -e "\e[94m     \e[39m$BIRTH_DATE $BIRTH $BIRTH_YEAR $BIRTH_TIME"
 echo -e "\e[94m     \e[39m$PACKAGES"
 echo -e "\e[36m   -------------------"
 echo -e "\e[36m     \e[36m$VENDOR $MODEL"
 echo -e "\e[36m     \e[39m$BIOS"
 echo -e "\e[36m     \e[39m$CPU"
 echo -e "\e[36m     \e[39m$CPUs"
 echo -e "\e[36m     \e[39m$GPU"
 echo -e "\e[36m     \e[39m$MONITOR"
 echo -e "\e[36m     \e[39m$RESOLUTION"
 echo -e "\e[36m     \e[39m$KEYBOARD"
 echo -e "\e[36m     \e[39m$LAYOUT ($LAYOUT2)"
 echo -e "\e[36m     \e[39m$MOUSE"
 echo -e "\e[95m   -------------------"
 echo -e "\e[95m     \e[39m$ram_used / $ram_total \e[95m($ram_per%)"
 echo -e "\e[95m     \e[39m$cpu_user / $cpu_sys / $cpu_idle"
 echo -e "\e[95m     \e[39m$temp / $temp1 / $temp2"
 echo -e "\e[95m     \e[39m$DISK1 \e[95m($DISK3)"
 echo -e "\e[95m     \e[39m$DISK2 \e[95m($DISK4)"
 echo -e "\e[95m     \e[39m$TRASH"
 echo -e "\e[92m   -------------------"
 echo -e "\e[92m     \e[92m$DE"
 echo -e "\e[92m     \e[39m$GtkTheme"
 echo -e "\e[92m     \e[39m$GtkIcon"
 echo -e "\e[92m     \e[39m$GtkFont"
 echo -e "\e[92m     \e[39m$termfn"
 echo -e "\e[91m   -------------------"
 echo -e "\e[91m     $Artist"
 echo -e "\e[91m     $SongTitle"
 echo -e "\e[91m     $Album"
 echo  ""

Táto časť spôsobí, že výstup je angličtine. Ale zase príkazy nie závislé na lokalizácii.

Kód: Vybrat vše

export LC_ALL=C
export LANG=C

Zobrazenie desktopového prostredia:
V prípade, že použitý prízak nbude fungovať, existuje aj alternatíva pomocou dodatočne nainštalovaného balíčku wmctrl. Nachádza sa v oficiálnych repozitároch. Príkaz a jeho deklarácia budú vyzerať nasledovne:

Kód: Vybrat vše

wmctrl -m | awk '/Name:/{gsub(/Name/,"");print $2}'
DE=$(wmctrl -m | awk '/Name:/{gsub(/Name/,"");print $2}')

Zobrazenie shellu:
Uvedený príkaz zobrazí iba názov shellu. Napríklad bash alebo zsh. Ak chceme zobraziť aj verziu, v prípade zsh je to pomerne jednoduché. Zmeníme príkaz a jeho deklaráciu na:

Kód: Vybrat vše

zsh --version  | awk '{print $1,$2}'
SHELL=$(zsh --version  | awk '{print $1,$2}')
V prípade bash, je to o niečo komplikovanejšie. Potrebujeme nadefinovať novú premennú, ktorú musíme pridať aj do výstupu, aby sa zobrazila. novú premennú si nazvime SHELL_VERSION. SHELL zostáva.

Kód: Vybrat vše

SHELL_VERSION=$(echo ${BASH_VERSION%%[^0-9.]*})
Výstup z druhej časti sa zmení na:

Kód: Vybrat vše

 echo -e "\e[94m     \e[39m$SHELL $SHELL_VERSION"

Balíčky:
Balíčky sú samozrejme neodskúšané. Použila som zaužívaný spôsob, ktorý nepredpokladám, že nebude fungovať. Ale ak by motyka predsa len vystrelila, tento bude fungovať zaiste:

Kód: Vybrat vše

dpkg --list | wc -l
PACKAGES=$(dpkg --list | wc -l)

Myš a klávesnica:
Tu upozorňujem, že log je potrebné si prehliadnuť a vyhľadať jednu z možností: keyboard a mouse. Tých riadkov sa tam nachádza viacero.

Použité príkazy pre klávesnicu (keyboard) a myš (mouse):

Kód: Vybrat vše

MOUSE=$(cat /var/log/Xorg.0.log | awk 'NR==183{print $4,$5,$6,$7}')
KEYBOARD=$(cat /var/log/Xorg.0.log | awk 'NR==205{print $4,$5}')
Čo je potrebné vedieť je, že NR zobrazí zvolený riadok a print zobrazí zvolené "slová" (nie vžd sú to jednotlivé slová, niekedy sa jedná o rôzne spojené časti, ktoré sa nachádzajú vedľa seba). Toto sú dva údaje, ktoré sú potrebné pre úpravu výstupu.

Okrem NR a print, je nutné sa oboznámiť s cut -c, ktorý zobrazuje požadované znaky od-do.
head -1 v prípade, že sa v "príkaze" nachádza viacero riadkov s hľadaným výrazom, zobrazí prvý. V prípade head -2 sa zobrazia dva vrchné a takto pokračuje ďalej.


Na vyhľadávanie potrebných parametrov v angličtine (nie v lokálnom jazyku terminálu), v termináli treba zadať tento príkaz:

Kód: Vybrat vše

export LC_ALL="en_US.UTF-8"
Zmeny sú dočasné, pokiaľ sa terminál nezatvorí. Taktiež zmena platí iba pre ten terminál, v ktorom bol príkaz vykonaný. Ak chceme v danom termináli vrátiť hodnotu spať, musíme zadať jeden z tých príkazov (podľa lokalizácie terminálu):

Kód: Vybrat vše

export LC_ALL="sk_SK.UTF-8"
export LC_ALL="cs_CZ.UTF-8"

Prehrávač:
K tomu sa moc vyjadrovať nebudem. Iba toľko, že potrebné informácie sú v manuálovej stránke. A ak niekto bude chcieť pomôcť s výstupom, rada poradím.


Farby v termináli:
Tu sa dá nájsť zoznam formátovania v termináli.


Snáď som vysvetlila všetko potrebné a dostatočne zrozumiteľne. A snáď sa nájde aj niekto, kto sa do toho dá. :D


A takto nejako vyzerá ten "zázrak":
skript.jpg
Nemáte oprávnění prohlížet přiložené soubory.
Naposledy upravil(a) lombardo1981 dne 12 říj 2017, 09:09, celkem upraveno 1 x.
Arch Linux (64-bit); Acer Aspire TC-705; i3wm; Intel Core i3-4160 CPU @ 3.6GHz; GeForce GTX 745; 8GB RAM DDR3
Arch Linux (64-bit); Acer Aspire V13 Aluminium; i3wm; Intel Core i5 5257U @ 2.7GHz; Intel Iris Graphics 6100 ; 8GB RAM DDR3L

Uživatelský avatar
redhawk
Velkovezír Mintu
Příspěvky: 1372
Registrován: 12 led 2016, 19:14
Bydliště: EU
Kontaktovat uživatele:

Re: Skript na zobrazenie systémových informácií

#2 Příspěvek od redhawk » 10 říj 2017, 18:12

pekna praca
Vdaka
1. neviem = pýtam sa.
2. funguje to = nerýpem do toho
Zlaté pravidlo= všetko funguje = neupgradujte. Distribúciu ani kernel.

Odpovědět