Scripts for genmon plugin xfce that works in puppy

Moderator: Forum moderators

Post Reply
User avatar
nilsonmorales
Posts: 204
Joined: Thu Dec 26, 2019 1:47 am
Location: El Salvador
Has thanked: 78 times
Been thanked: 133 times
Contact:

Scripts for genmon plugin xfce that works in puppy

Post by nilsonmorales »


genmon is a plugin for xfce and there are a lot of scripts in the web try this in puppy with xfce
you will need some deps like terminess nerd fonts (free font)
and hdsentinel

Code: Select all

#!/bin/bash
# Variables para la información del panel y del tooltip
INFO=""
# Obtener la fecha y hora actual
d=$(date +"%I:%M %p %d %b %Y")

# Aplicar la fuente "Terminess Nerd Font" y ajustar el tamaño
d_formatted="<span foreground='#AC507D'>   </span><span foreground='#35C5B9'>$d</span>"

# Obtener el día actual
current_day=$(date +"%e") # Día actual con espacio inicial si es necesario

# Generar el calendario y ajustar manualmente las columnas para consistencia
t=$(cal | awk -v day="$current_day" '
{
    for (i = 1; i <= NF; i++) {
        if ($i == day) {
            $i = "<span foreground=\"#35C5B9\"><b>" $i "</b></span>";
        }
    }
    print $0;
}')

# Aplicar la fuente "Terminess Nerd Font" y un tamaño más grande al calendario
t="<span font_family='Terminess Nerd Font' font_size='16000'>$t</span>"

# Crear la información del panel y la salida genmon
INFO="<txt>$d_formatted</txt>"
echo -e "${INFO}"
echo "<txtclick>set-time-for-puppy</txtclick>"
echo "<tool>$t</tool>"

calendar.sh
panel= the date
tooltip= calendar
onclick= set-time-for-puppy

Code: Select all

#!/usr/bin/env bash
# Dependencies: bash>=3.2, coreutils, gawk, grep, sed, btop

# CPU usage percentage for all logical CPUs
CPU_USAGE=$(grep 'cpu ' /proc/stat | awk -v FS=" " '{usage=($2+$4)*100/($2+$4+$5); printf "%.1f %%", usage}')

# Tooltip
MORE_INFO="<tool>"
MORE_INFO+="<span font_family='Terminess Nerd Font' font_size='16000' weight='bold'>"
MORE_INFO+="┌ $(grep 'model name' /proc/cpuinfo | cut -f2 -d ':' | sed -n 1p | sed -e 's/^[ \t]*//')\n" # CPU vendor, model, clock
STEP=0 # To generate CPU numbers (e.g., CPU0, CPU1...)
for CPU in $(awk '/MHz/ {print $4}' /proc/cpuinfo); do
  MORE_INFO+="├─ CPU ${STEP}: ${CPU} MHz\n"
  let STEP+=1
done
MORE_INFO+="</span>"
MORE_INFO+="</tool>"

# Panel
INFO="<txt>"
INFO+="<span foreground='#8F7BB9'> 󰍛  </span><span foreground='#35C5B9'>${CPU_USAGE} </span>"
INFO+="</txt>"
INFO+="<txtclick>xfce4-terminal --geometry=90x24 -e btop</txtclick>"

# Panel Print
echo -e "${INFO}"

# Tooltip Print
echo -e "${MORE_INFO}"

cpu.sh
panel=percent for cpu
tooltip=cores info
onclick=btop

Code: Select all

#!/usr/bin/env bash

# Obtener la dirección IPv4 local de la interfaz activa (ajustando el comando)
LOCAL_IP=$(ip -4 addr show scope global | grep inet | awk '{print $2}' | cut -d'/' -f1 | head -n 1)

# Obtener la dirección IPv4 pública (externa) usando un servicio web
EXTERNAL_IP=$(curl -s https://ifconfig.me)

# Validar si las IPs fueron obtenidas correctamente
if [[ -z "$LOCAL_IP" ]]; then
  LOCAL_IP="No disponible"
fi

if [[ -z "$EXTERNAL_IP" ]]; then
  EXTERNAL_IP="No disponible"
fi

# Información adicional en el tooltip
MORE_INFO="<tool>"
MORE_INFO+="<span font_family='Terminess Nerd Font' font_size='16000' font_weight='bold'>"
MORE_INFO+="┌ Dirección IPv4 Local: $LOCAL_IP\n"
MORE_INFO+="├ Dirección IPv4 Pública: $EXTERNAL_IP\n"
MORE_INFO+="├ 󰍛  Kernel: $(uname -r)\n"
MORE_INFO+="└   Hostname: $(hostname)"
MORE_INFO+="</span>"
MORE_INFO+="</tool>"

# Panel (muestra la dirección IPv4 local)
INFO="<txt><span foreground='#DAB45D'> 󰩠  </span><span foreground='#35C5B9'>${LOCAL_IP}</span></txt>"

# Panel Print
echo -e "${INFO}"

# Tooltip Print
echo -e "${MORE_INFO}"

ip.sh
panel=local ip
tooltip=local, external ip, host and kernel
onclick=none

Code: Select all

#!/bin/bash

# Definimos los puntos de montaje
MOUNT_POINT1="/initrd/mnt/dev_save"
MOUNT_POINT2="/initrd/pup_rw"

# Variables para la información del panel y del tooltip
INFO=""
MORE_INFO=""

# Función para obtener información de almacenamiento
get_storage_info() {
    local mount_point=$1
    if [ -d "$mount_point" ]; then
        local total_size=$(df -B1 "$mount_point" | awk 'NR==2 {printf "%.2f", $2 / 1073741824}') # Convertimos a GB
        local used_space=$(df -B1 "$mount_point" | awk 'NR==2 {printf "%.2f", $3 / 1073741824}')
        local free_space=$(df -B1 "$mount_point" | awk 'NR==2 {printf "%.2f", $4 / 1073741824}')

        # Cambiar la descripción del punto de montaje en el tooltip
        local description=""
        case "$mount_point" in
            "$MOUNT_POINT1")
                description="Pupsave"
                ;;
            "$MOUNT_POINT2")
                description="Running in live mode"
                ;;
            *)
                description="$mount_point"
                ;;
        esac

        # Información del Tooltip con Pango Markup
        MORE_INFO+="<tool>"
        MORE_INFO+="<span font_family='Terminess Nerd Font' font_size='16000' font_weight='bold'>"
        MORE_INFO+="┌ 󱂵  $description\n"
        MORE_INFO+="├─ Total: ${total_size} GB\n"
        MORE_INFO+="├─  Used: ${used_space} GB\n"
        MORE_INFO+="└─  Free: ${free_space} GB\n"
        MORE_INFO+="</span>"
        MORE_INFO+="</tool>"

        # Información del Panel
        INFO="<txt>"
        INFO+="<span foreground='#ADD387'> 󱂵  </span><span foreground='#35C5B9'>${used_space} G / ${total_size} G</span>"
        echo "<txtclick>pmount</txtclick>"
        INFO+="</txt>"
    else
        INFO="<txt>N/A</txt>"
        MORE_INFO="<tool><span font_family='Terminess Nerd Font' font_size='16000' font_weight='bold'>No hay datos disponibles para ${mount_point}</span></tool>"
    fi
}

# Verificar los puntos de montaje y obtener información
if [ -d "$MOUNT_POINT1" ]; then
    get_storage_info "$MOUNT_POINT1"
elif [ -d "$MOUNT_POINT2" ];then
    get_storage_info "$MOUNT_POINT2"
else
    INFO="<txt>No hay puntos de montaje disponibles.</txt>"
    MORE_INFO="<tool><span font_family='Terminess Nerd Font' font_size='18000'>No hay puntos de montaje disponibles.</span></tool>"
fi

# Panel Print (una sola línea)
echo -e "${INFO}"

# Tooltip Print (detallado)
echo -e "${MORE_INFO}"

space-save.sh
panel=used space in live mode or pupsave
tooltip=total, used and free
onclick=pmount

Code: Select all

#!/usr/bin/env bash

# Dependencies: bash>=3.2, coreutils, file, gawk

# Calcular valores generales de RAM
readonly TOTAL=$(free -b | awk '/^[Mm]em/ {printf "%.2f", $2 / (1024^3)}')
readonly USED=$(free -b | awk '/^[Mm]em/ {printf "%.2f", $3 / (1024^3)}')
readonly FREE=$(free -b | awk '/^[Mm]em/ {printf "%.2f", $4 / (1024^3)}')

# Calcular valores generales de SWAP
readonly SWAP_TOTAL=$(free -b | awk '/^Swap/ {printf "%.2f", $2 / (1024^3)}')
readonly SWAP_USED=$(free -b | awk '/^Swap/ {printf "%.2f", $3 / (1024^3)}')
readonly SWAP_FREE=$(free -b | awk '/^Swap/ {printf "%.2f", $4 / (1024^3)}')

# Inicializar variable para todos los bancos
BANKS_INFO=""

# Extraer información de módulos RAM
dmidecode -t memory | awk -F': ' '
    /Bank Locator:/ { bank=$2; if (bank == "") bank="No especificado" }
    /Size:/ { size=$2; if ($2 ~ "No Module Installed") size="No instalado" }
    /Type:/ && !/Correction/ { type=$2; if (type == "") type="Desconocido" }
    /Speed:/ && $2 ~ /^[0-9]+/ { speed=$2 " MT/s"; gsub("MT/s", "MHz", speed) }
    /Manufacturer:/ { manufacturer=$2; if (manufacturer == "") manufacturer="No especificado" }
    /^[[:space:]]*$/ {
        # Solo agregar bancos que tienen todos los datos relevantes (evita bancos vacíos)
        if (bank != "" && size != "" && size != "No instalado" && type != "" && speed != "" && manufacturer != "") {
            printf "┌ Banco %s:\n├─ Capacidad: %s\n├─ Tipo: %s\n├─ Frecuencia: %s\n└─ Marca: %s\n\n", bank, size, type, speed, manufacturer >> "/tmp/banks_info"
        }
        bank=""; size=""; type=""; speed=""; manufacturer="" # Limpiar variables para el siguiente módulo
    }
'

# Leer la información acumulada de los bancos
if [ -f /tmp/banks_info ]; then
    BANKS_INFO=$(cat /tmp/banks_info)
    rm /tmp/banks_info
else
    BANKS_INFO="No se encontró información de los bancos de memoria o no hay RAM instalada."
fi

# Construir el panel
INFO="<txt>"
INFO+="<span foreground='#EF936B'> 󱜳  </span><span foreground='#35C5B9'>${USED} G / ${TOTAL} G</span>"
INFO+="</txt>"

# Construir el tooltip
MORE_INFO="<tool>"
MORE_INFO+="<span font_family='Terminess Nerd Font' font_size='16000' font_weight='bold'>"
MORE_INFO+="    󱜳   RAM  󱜳 \n"
MORE_INFO+="${BANKS_INFO}\n\n"
MORE_INFO+="┌ Total RAM: ${TOTAL} GB\n"
MORE_INFO+="├─ RAM Usada: ${USED} GB\n"
MORE_INFO+="└─ RAM Libre: ${FREE} GB\n"
MORE_INFO+="\n┌ SWAP\n"
MORE_INFO+="├─ Total SWAP: ${SWAP_TOTAL} GB\n"
MORE_INFO+="├─ SWAP Usada: ${SWAP_USED} GB\n"
MORE_INFO+="└─ SWAP Libre: ${SWAP_FREE} GB\n"
MORE_INFO+="</span>"
MORE_INFO+="</tool>"

# Panel Print
echo -e "${INFO}"

# Tooltip Print
echo -e "${MORE_INFO}"

memory.sh
panel=ram used and total
tooltip=some ram details, size, brand, slots, used, free, and total ram
onclick=none

Code: Select all

#!/bin/bash

# Ruta al binario de hdsentinel
HDSENTINEL_CMD="/bin/hdsentinel"

# Archivo temporal para almacenar la salida completa de hdsentinel
TEMP_LOG="/tmp/hdsentinel_report.log"

# Comprobar si hdsentinel está instalado
if ! [ -x "$HDSENTINEL_CMD" ]; then
    echo "<txt>Error</txt>"
    echo "<tool>hdsentinel no está instalado o no es ejecutable.</tool>"
    exit 1
fi

# Generar el reporte de hdsentinel en un archivo temporal
"$HDSENTINEL_CMD" > "$TEMP_LOG"

# Función para extraer información de un dispositivo del archivo temporal
extract_disk_info_from_log() {
    local DEVICE=$1

    # Localizar datos específicos del dispositivo
    local HDD_DATA=$(grep -A 12 -i "$DEVICE" "$TEMP_LOG")

    # Extraer información relevante con grep y sed
    local MODEL=$(echo "$HDD_DATA" | grep -i "Model ID" | sed 's/.*Model ID *: //')
    local SERIAL=$(echo "$HDD_DATA" | grep -i "Serial No" | sed 's/.*Serial No *: //')
    local TEMP=$(echo "$HDD_DATA" | grep -i "Temperature" | sed 's/.*Temperature *: //; s/°C//')
    local HEALTH=$(echo "$HDD_DATA" | grep -i "Health" | sed 's/.*Health *: //; s/%//')
    local POWER_ON_TIME=$(echo "$HDD_DATA" | grep -i "Power on time" | sed 's/.*Power on time *: //')
    local SIZE=$(echo "$HDD_DATA" | grep -i "HDD Size" | sed 's/.*HDD Size *: //; s/ MB//')
    local TOTAL_WRITTEN=$(echo "$HDD_DATA" | grep -i "Total written" | sed 's/.*Total written *: //')

    # Determinar tipo (HDD, SSD, NVMe)
    local TYPE=$(echo "$HDD_DATA" | grep -qi "NVMe" && echo "NVMe" || \
                 (echo "$HDD_DATA" | grep -qi "USB/ATA" && echo "HDD" || echo "SSD"))

    # Validar datos faltantes
    [ -z "$MODEL" ] && MODEL="No disponible"
    [ -z "$SERIAL" ] && SERIAL="No disponible"
    [ -z "$TEMP" ] && TEMP="No disponible"
    [ -z "$HEALTH" ] && HEALTH="No disponible"
    [ -z "$POWER_ON_TIME" ] && POWER_ON_TIME="No disponible"
    [ -z "$SIZE" ] && SIZE="No disponible"
    [ -z "$TOTAL_WRITTEN" ] && TOTAL_WRITTEN="No disponible"
    [ -z "$TYPE" ] && TYPE="No disponible"

    # Retornar resultados
    echo "$MODEL|$SERIAL|$TEMP|$HEALTH|$POWER_ON_TIME|$SIZE|$TOTAL_WRITTEN|$TYPE"
}

# Función para excluir dispositivos USB del panel pero no del tooltip
should_exclude_from_panel() {
    local MODEL=$1
    local DEVICE=$2

    # Verificar si el dispositivo tiene modelo Kingston o es USB
    if [[ "$MODEL" =~ [Kk]ingston.*[Dd]ata[Tt]raveler ]] || udevadm info --query=property --name="/dev/$DEVICE" | grep -q "ID_BUS=usb"; then
        return 0 # Excluir del panel pero permitir tooltip
    fi
    return 1 # No excluir
}

# Filtrar dispositivos conectados dinámicamente, incluyendo NVMe
DEVICES=$(lsblk -dno NAME,TYPE | awk '$2 == "disk" {print $1}'; ls /dev/nvme* | awk -F'/' '{print $3}' | sort -u)

# Preparar salida
PANEL_OUTPUT=""
TOOLTIP_OUTPUT=""

for DEVICE in $DEVICES; do
    if grep -iq "$DEVICE" "$TEMP_LOG"; then
        DISK_INFO=$(extract_disk_info_from_log "$DEVICE")
        IFS="|" read -r MODEL SERIAL TEMP HEALTH POWER_ON_TIME SIZE TOTAL_WRITTEN TYPE <<< "$DISK_INFO"

        # Verificar si se debe excluir del panel
        if should_exclude_from_panel "$MODEL" "$DEVICE"; then
            # Incluir en el tooltip aunque no aparezca en el panel
            TOOLTIP_OUTPUT+="┌ Información del Dispositivo USB ($DEVICE)
├ Modelo: $MODEL
├ Serial: $SERIAL
├ Salud: $HEALTH%
├ Temperatura: $TEMP°C
├ Tiempo encendido: $POWER_ON_TIME
├ Tamaño: $SIZE MB
├ Total escrito: $TOTAL_WRITTEN
└ Tipo: USB

"
            continue # Saltar del panel
        fi

        # Agregar información al panel y al tooltip
        PANEL_OUTPUT+="<span foreground='yellow'> $DEVICE:</span><span foreground='#35C5B9'> 󱁋  </span><span foreground='orange'>$HEALTH%  $TEMP°C </span>|"
        TOOLTIP_OUTPUT+="┌ Información del Disco ($DEVICE)
├ Modelo: $MODEL
├ Serial: $SERIAL
├ Salud: $HEALTH%
├ Temperatura: $TEMP°C
├ Tiempo encendido: $POWER_ON_TIME
├ Tamaño: $SIZE MB
├ Total escrito: $TOTAL_WRITTEN
└ Tipo: $TYPE

"
    fi
done

# Validar si hay datos para mostrar
if [ -z "$PANEL_OUTPUT" ]; then
    echo "<txt>Error: No se detectaron discos</txt>"
    echo "<tool>No se encontraron discos disponibles para analizar.</tool>"
else
    # Mostrar salida en el panel
    echo "<txt>${PANEL_OUTPUT::-1}</txt>"

    # Mostrar tooltip con detalles
    echo "<tool>"
    echo "<span font_family='Terminess Nerd Font' font_size='16000' weight='bold'>$TOOLTIP_OUTPUT</span>"
    echo "</tool>"
fi

# Limpiar archivo temporal
rm -f "$TEMP_LOG"

hdsentinel.sh
panel=disk health, and temp
tooltip=detail disk info, size, type, health etc
onclick=none

some script could fail, need to test more, enjoy

Post Reply

Return to “Eye Candy”