Informationen zum Kernel anzeigen per grafischen KDE Dialog

Teilen:

Für die schnelle und einfache Anzeige der Kernelversion bemüht man sehr häufig die KDE Konsole oder ein anderes Terminalprogramm und ermittelt die benötigten Information mit Hilfe eines Kommandos auf der Befehlszeile.

Durch diese immer wiederkehrenden Arbeiten bin ich auf die Idee gekommen ein Shellscript zu programmieren. Nach den ersten Codezeilen bin ich allerdings umgestiegen auf ein grafisches Dialogscript (kdialog des KDE) um den Umweg über die Konsole einzusparen und die Informationen sofort am KDE-Desktop präsent zu haben.

Die Dialogbox (siehe nachstehenden Screenshot) liefert Informationen zum aktuellsten verfügbaren Kernel, den aktuell gebooteten Kernel und evtl. zusätzlich installierte Kernelversionen. Desweiteren wird bei dem Punkt der Dialogbox, “Details zu den installierten Kernelversionen”, der Kernel-Paketname gelistet, das jeweilige Installationsdatum angezeigt und seit wann dieser Kernel im Repository verfügbar war.

Die Informationen werden abgerundet durch die Anzeige des freien Speicherplatz des Root-Dateisystems und falls als eigenes Dateisystem vorhanden, ebenso von /boot. Diese Informationen sind wichtig wenn man weitere zusätzliche Kernel installieren will. Jeder weitere Kernel beansprucht ca. 200 MByte Speicherplatz im Filesystem.


Ausgabe des grafischen Kdialog-Scriptes



Scriptlisting

Das Script ist mit der Linuxdistribution KDE Neon oder auf einen Ubuntu Linux mit dem KDE Desktop lauffähig, aber auch auf einer anderen debianbasierten Distribution (nicht getestet) sollte dies möglich sein. Wenn kdialog nicht installiert ist kann dies per Paketverwaltung nachinstalliert werden, da dieses Paket Grundlage für mein Script ist.

$ sudo apt install kdialog


  1#!/bin/bash
  2#
  3#######################
  4#  Variablenbelegung
  5#######################
  6#
  7DPKG_INFODIR="/var/lib/dpkg/info"
  8SEARCHSTR="Modifiziert:"
  9BOOTDIR="/boot"
 10FILE_DETAIL="/home/$USER/tmp/kernel_info_detail.txt"
 11
 12
 13################
 14#  Funktionen
 15################
 16#
 17get_installed_kernel()
 18{
 19	# Alle lokal installierten Kernel ermitteln
 20	KERNEL_INSTALLED=$(dpkg -l | egrep linux-image-[0-9] | awk -F'-' '{printf("%s%s%s ", $3,"-",$4)}')
 21}
 22
 23get_latest_kernel()
 24{
 25	# Neuesten installierbaren Kernel ermitteln
 26	KERNEL_LATEST=$(apt-cache search linux-image-[0-9].*-generic.* | awk -F"-" '{print $3"-"$4}' | sort -V | tail -1)
 27}
 28
 29get_running_kernel()
 30{
 31	# Version des laufenden Kernel ermitteln
 32	KERNEL_RUNNING=$(uname -r | awk -F"-" '{print $1"-"$2}')
 33}
 34
 35create_all_installed_kernel()
 36{
 37	# Installationsdatum der Kernel ermitteln (und Array erstellen)
 38	for ROW in $(ls -1 $DPKG_INFODIR/linux-image-[0-9]*-generic.list)
 39		do
 40		INSTALL_TIME_ORIG=$(stat $ROW | egrep ^$SEARCHSTR | cut -d" " -f2)
 41		INSTALL_TIME_NEW=$(date -d "$INSTALL_TIME_ORIG" '+%Y%m%d')
 42		INSTALL_TIME_DE=$(date -d "$INSTALL_TIME_ORIG" '+%d-%b-%Y')
 43		BASENAME=$(basename $ROW)
 44		TMP1=$(echo ${BASENAME:12})
 45		SHORTNAME_INSTKERNEL=$(echo ${TMP1/.list/})
 46		ARRAY_INSTKERNEL[$INDEX_INSTKERNEL]=$SHORTNAME_INSTKERNEL"#"$INSTALL_TIME_ORIG"#"$INSTALL_TIME_DE"#"$INSTALL_TIME_NEW
 47		INDEX_INSTKERNEL=$[INDEX_INSTKERNEL+1]
 48	done 
 49
 50	# Verfügbarkeitsdatum der Kernel ermitteln (an Array als weitere Spalte hinzufügen)
 51	ROW=0
 52	INDEX_INSTKERNEL=0
 53	for ROW in $(ls -1 $BOOTDIR/vmlinuz-*-*)
 54		do
 55		AVALIABLE_TIME_ORIG=$(stat $ROW | egrep ^$SEARCHSTR | cut -d" " -f2)
 56		AVALIABLE_TIME_DE=$(date -d "$AVALIABLE_TIME_ORIG" '+%d-%b-%Y')
 57		ARRAY_INSTKERNEL[$INDEX_INSTKERNEL]=${ARRAY_INSTKERNEL[$INDEX_INSTKERNEL]}"#"$AVALIABLE_TIME_DE
 58		INDEX_INSTKERNEL=$[INDEX_INSTKERNEL+1]
 59	done 
 60}
 61
 62get_all_installed_kernel()
 63{
 64	# Ausgabe des Arrays mit Deatilinfos zu den installierten Kerneln in Datei schreiben
 65	for ROW in ${ARRAY_INSTKERNEL[@]}
 66		do
 67      echo $ROW
 68	done | sort -t"#" -n -k4 | awk -F"#" '{printf("%s%-25s %-20s %-20s\n", "linux-image-",$1,$3,$5)}' > $FILE_DETAIL
 69}
 70
 71del_log()
 72{
 73	# Aufräumen
 74	if [ -e "$FILE_DETAIL" ]
 75		then
 76		rm $FILE_DETAIL
 77	fi
 78}
 79
 80get_available_size()
 81{
 82	# Freien Speicherplatz im Root-FS ermitteln
 83	FREE_SIZE_ROOT=$(df --output=size,avail --block-size=MB  / | tail -1 | awk '{print "Freier Speicherplatz im Root Dateisystem "$2" von "$1}')
 84	
 85	# Überprüfen ob /boot ein eigenes Dateisystem ist und ggf. freien Speicherplatz ermitteln
 86	AVAILABLE_BOOT_FS=$(df --output=target| egrep ^/boot)
 87	
 88	if [ "$AVAILABLE_BOOT_FS" ]
 89		then
 90		FREE_SIZE_BOOT=$(df --output=target,size,avail --block-size=MB /boot | tail -1 | awk '{print "Freier Speicherplatz im /boot Dateisystem "$3" von "$2}')
 91	fi
 92}
 93
 94##################
 95#  Hauptprogramm
 96##################
 97#
 98create_all_installed_kernel
 99get_all_installed_kernel
100get_installed_kernel
101get_latest_kernel
102get_running_kernel
103get_available_size
104
105# Dialogbox anzeigen
106kdialog --title "Kernel Info" --msgbox "$(echo "\n")Informationen zu den Kernelversionen im System.$(echo "\n\n")Neueste verfügbare Kernelversion$(echo "\n")$KERNEL_LATEST $(echo "\n\n")Aktuell laufende Kernelversion$(echo "\n")$KERNEL_RUNNING $(echo "\n\n")$(echo "Alle installierten Kernelversionen"; for ROW in $(echo $KERNEL_INSTALLED); do echo $ROW; done) $(echo "\n\n")Details zu den installierten Kernelversionen$(echo "\n\n")$(echo "Kernelpaketname                             Installiert am        Verfügbar seit")$(echo "\n")$(cat $FILE_DETAIL)$(echo "\n\n")$FREE_SIZE_ROOT$(echo "\n")$FREE_SIZE_BOOT$(echo "\n")"
107
108del_log
109#EOF

Fazit

Wenn man sich dieses Script noch als Icon noch am KDE-Desktop hinterlegt, bekommt man einen schnellen und effizienten Zugriff auf die oben gezeigten Informationen zum Kernel, ohne die Kommandozeile zu bemühen.

Quelle Teaser-Logo: Photo by Shahadat Rahman on Unsplash