added swap and gpu info to pinfo

This commit is contained in:
fatalerrors
2026-06-03 15:48:04 +02:00
parent bcc86814b5
commit a93d367974

View File

@@ -171,7 +171,7 @@ pinfo()
hostname_str="${HOSTNAME:-unknown}" hostname_str="${HOSTNAME:-unknown}"
fi fi
# --- OS release (parsed line by line, never sourced) --- # --- OS release (security: parsed line by line, never sourced) ---
local os_name="Unknown" os_version="" local os_name="Unknown" os_version=""
if [[ -r /etc/os-release ]]; then if [[ -r /etc/os-release ]]; then
local _osr_key _osr_val local _osr_key _osr_val
@@ -241,18 +241,22 @@ pinfo()
(( cpu_cores == 0 )) && cpu_cores=$cpu_threads (( cpu_cores == 0 )) && cpu_cores=$cpu_threads
# --- Memory (pure bash, /proc/meminfo, values in kB) --- # --- Memory (pure bash, /proc/meminfo, values in kB) ---
local mem_total=0 mem_available=0 local mem_total=0 mem_available=0 swap_total=0 swap_free=0
if [[ -r /proc/meminfo ]]; then if [[ -r /proc/meminfo ]]; then
local _mkey _mval _munit local _mkey _mval _munit
while read -r _mkey _mval _munit; do while read -r _mkey _mval _munit; do
case "${_mkey%:}" in case "${_mkey%:}" in
MemTotal) mem_total="$_mval" ;; MemTotal) mem_total="$_mval" ;;
MemAvailable) mem_available="$_mval" ;; MemAvailable) mem_available="$_mval" ;;
SwapTotal) swap_total="$_mval" ;;
SwapFree) swap_free="$_mval" ;;
esac esac
done < /proc/meminfo done < /proc/meminfo
fi fi
local mem_total_mib=$(( mem_total / 1024 )) local mem_total_mib=$(( mem_total / 1024 ))
local mem_used_mib=$(( (mem_total - mem_available) / 1024 )) local mem_used_mib=$(( (mem_total - mem_available) / 1024 ))
local swap_total_mib=$(( swap_total / 1024 ))
local swap_used_mib=$(( (swap_total - swap_free) / 1024 ))
# --- Process count (glob over numeric /proc entries) --- # --- Process count (glob over numeric /proc entries) ---
local proc_count=0 _pdir local proc_count=0 _pdir
@@ -264,6 +268,54 @@ pinfo()
local shell_str="${BASH:-bash} ${BASH_VERSION%\(*}" local shell_str="${BASH:-bash} ${BASH_VERSION%\(*}"
local term_str="${TERM:-unknown}" local term_str="${TERM:-unknown}"
# --- GPU (no external tools required; sysfs first, then /proc/bus/pci) ---
local -a gpu_list=()
local _gdir _gname _gline
# Preferred: sysfs drm — each card has a device/vendor+device pair readable
# without root. The human-readable name comes from the uevent file.
for _gdir in /sys/class/drm/card[0-9]*/device; do
[[ -d "$_gdir" ]] || continue
_gname=""
# Try uevent: contains PCI_ID and sometimes DRIVER
if [[ -r "$_gdir/uevent" ]]; then
local _uev_driver="" _uev_pci=""
local _uev_line
while IFS='=' read -r _uev_key _uev_val; do
case "$_uev_key" in
DRIVER) _uev_driver="$_uev_val" ;;
PCI_ID) _uev_pci="$_uev_val" ;;
esac
done < "$_gdir/uevent"
[[ -n "$_uev_pci" ]] && _gname="PCI ${_uev_pci}"
[[ -n "$_uev_driver" ]] && _gname+=" (${_uev_driver})"
fi
# Better: label file written by driver (e.g. amdgpu, i915)
if [[ -r "$_gdir/label" ]]; then
read -r _gname < "$_gdir/label"
elif [[ -r "$_gdir/../label" ]]; then
read -r _gname < "$_gdir/../label"
fi
# Better still: product name from hwmon or power supply description
# Try modalias vendor/device text via /sys/.../subsystem_device not always human
# Last resort: readable model via drm connector name
[[ -z "$_gname" ]] && _gname="unknown GPU"
gpu_list+=("$_gname")
done
# Fallback: scan /proc/bus/pci/devices — field 1 is vendor:device hex, field 14 is name
if (( ${#gpu_list[@]} == 0 )) && [[ -r /proc/bus/pci/devices ]]; then
while IFS=$'\t' read -r _pci_bus _pci_id _pci_irq _rest _pci_name; do
# Display class is in the high 16 bits of field 2 (vendor:device word)
# /proc/bus/pci/devices col 1 is busdevfn, col 2 is vendorID<<16|deviceID
# The class 0x03xx is "Display controller / VGA compatible"
case "$_pci_name" in
*VGA*|*Display*|*3D*|*GPU*|*Graphics*|*Radeon*|*GeForce*|*Intel*Iris*|*Intel*UHD*|*Intel*HD*Graphics*)
gpu_list+=("$_pci_name")
;;
esac
done < /proc/bus/pci/devices
fi
# --- Render --- # --- Render ---
local _lbl="${BIWhite:-}" _val="${ICyan:-}" _rst="${DEFAULTCOL:-}" local _lbl="${BIWhite:-}" _val="${ICyan:-}" _rst="${DEFAULTCOL:-}"
@@ -276,7 +328,18 @@ pinfo()
_row "Load avg" "$load_str" _row "Load avg" "$load_str"
_row "CPU" "$cpu_model" _row "CPU" "$cpu_model"
_row "Cores" "${cpu_cores} physical, ${cpu_threads} logical" _row "Cores" "${cpu_cores} physical, ${cpu_threads} logical"
if (( ${#gpu_list[@]} > 0 )); then
local _gi
for _gi in "${!gpu_list[@]}"; do
local _gpu_lbl="GPU"
(( ${#gpu_list[@]} > 1 )) && _gpu_lbl="GPU $(( _gi + 1 ))"
_row "$_gpu_lbl" "${gpu_list[$_gi]}"
done
fi
_row "Memory" "${mem_used_mib} MiB used / ${mem_total_mib} MiB total" _row "Memory" "${mem_used_mib} MiB used / ${mem_total_mib} MiB total"
if (( swap_total > 0 )); then
_row "Swap" "${swap_used_mib} MiB used / ${swap_total_mib} MiB total"
fi
_row "Processes" "$proc_count" _row "Processes" "$proc_count"
_row "Shell" "$shell_str" _row "Shell" "$shell_str"
_row "Terminal" "$term_str" _row "Terminal" "$term_str"