87 lines
2.1 KiB
Bash
Executable File
87 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
STATE_FILE="/tmp/waybar_temp_mode"
|
|
MODES=("cpu" "igpu" "dgpu")
|
|
|
|
# ¿Está activa la dGPU?
|
|
dgpu_is_active() {
|
|
# Comprueba el estado de energía de la NVIDIA
|
|
local status
|
|
status=$(cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status 2>/dev/null)
|
|
[[ "$status" == "active" ]]
|
|
}
|
|
|
|
get_dgpu_temp() {
|
|
if dgpu_is_active; then
|
|
# Usa nvidia-smi si la dGPU está activada
|
|
nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits 2>/dev/null \
|
|
|| echo "N/A"
|
|
else
|
|
echo "N/A"
|
|
fi
|
|
}
|
|
|
|
get_cpu_temp() {
|
|
sensors \
|
|
| awk '/^Tctl:/ {print $2; exit}' \
|
|
| sed 's/+//;s/°C//'
|
|
}
|
|
|
|
get_igpu_temp() {
|
|
sensors \
|
|
| awk '/amdgpu/ {found=1} found && /edge:/ {print $2; exit}' \
|
|
| sed 's/+//;s/°C//'
|
|
}
|
|
|
|
get_nvme_temp() {
|
|
sensors \
|
|
| awk '/nvme/ {found=1} found && /Composite:/ {print $2; exit}' \
|
|
| sed 's/+//;s/°C//'
|
|
}
|
|
|
|
get_board_temp() {
|
|
# Temperatura de placa/ambiente (acpitz temp1)
|
|
sensors \
|
|
| awk '/acpitz-acpi-0/ {flag=1} flag && /temp1:/ {print $2; exit}' \
|
|
| sed 's/+//;s/°C//'
|
|
}
|
|
|
|
# --- Leer/rotar modo ---
|
|
current_mode="cpu"
|
|
[[ -f "$STATE_FILE" ]] && current_mode=$(<"$STATE_FILE")
|
|
|
|
if [[ "$1" == "click" ]]; then
|
|
for i in "${!MODES[@]}"; do
|
|
if [[ "${MODES[$i]}" == "$current_mode" ]]; then
|
|
next=$(( (i + 1) % ${#MODES[@]} ))
|
|
echo "${MODES[$next]}" > "$STATE_FILE"
|
|
exit 0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# --- Obtener todas las temperaturas ---
|
|
cpu=$(get_cpu_temp) && cpu=${cpu:-N/A}
|
|
igpu=$(get_igpu_temp) && igpu=${igpu:-N/A}
|
|
dgpu=$(get_dgpu_temp) && dgpu=${dgpu:-N/A}
|
|
nvme=$(get_nvme_temp) && nvme=${nvme:-N/A}
|
|
board=$(get_board_temp) && board=${board:-N/A}
|
|
|
|
# --- Escoge qué mostrar según modo ---
|
|
case "$current_mode" in
|
|
cpu) icon="CPU"; temp="$cpu" ;;
|
|
igpu) icon="iGPU"; temp="$igpu" ;;
|
|
dgpu) icon="dGPU"; temp="$dgpu" ;;
|
|
esac
|
|
|
|
# --- Tooltip multilínea ---
|
|
tooltip=$(printf \
|
|
"CPU: %sº\niGPU: %sº\ndGPU: %sº\nNVMe: %sº\nBoard: %sº" \
|
|
"$cpu" "$igpu" "$dgpu" "$nvme" "$board")
|
|
|
|
tooltip_escaped=$(printf "%s" "$tooltip" | jq -Rs .)
|
|
|
|
# --- Salida JSON para Waybar ---
|
|
echo "{\"text\": \"$icon: ${temp}º\", \"tooltip\": ${tooltip_escaped}}"
|
|
|