tmux/system-info/system-info-WSL.sh
Kenneth Benzie (Benie) fa263fb95e Use powershell for system-info CPU temp on WSL
Replace the query of CPU temp from the OpenHardwareMonitor's JSON served
via the network on the Windows host with a call to powershell to instead
read the WMI objects that OpenHardwareMonitor also emits. This is more
robust since powershell.exe is always available and does not require
Windows Defender firewall rules to allow connections from WSL2's VM to
the Windows host.
2022-10-01 13:21:12 +01:00

33 lines
1.1 KiB
Bash
Executable File

#!/usr/bin/env bash
cache_dir=~/.cache/tmux
cache_file=$cache_dir/system-info
# Make sure the output directory exists.
if [ ! -d $cache_dir ]; then
mkdir -p $cache_dir
fi
if cat /proc/cpuinfo | grep -i intel > /dev/null; then
cpu_temp_sensor="/intelcpu/0/temperature/0"
elif cat /proc/cpuinfo | grep -i amd > /dev/null; then
cpu_temp_sensor="/amdcpu/0/temperature/0"
else
return 1
fi
while true; do
# Assumes OpenHardwareMonitor is running and emitting data to WMI so we can
# access it via the Windows hosts powershell.exe.
raw_cpu_temp=$(powershell.exe -NoProfile "(Get-WmiObject -Namespace \"root/OpenHardwareMonitor\" -Query 'select Value from Sensor WHERE Identifier LIKE \"$cpu_temp_sensor\"').Value" | sed 's/\r//')
cpu_temp=$(printf "%.1f°C" "$raw_cpu_temp")
cpu_load=`mpstat -P ALL -n 1 -u 1 -o JSON | \
jq '.sysstat.hosts[0].statistics[0]["cpu-load"][1:]|.[].idle' | \
awk '$idle ~ /[-.0-9]*/ { printf "%s", substr("█▇▆▅▄▃▂▁ ", int($idle / 11), 1) }'`
echo "$cpu_temp $cpu_load" > $cache_file
# echo -e "HTTP/1.1 200 OK\n\n$cpu_temp $cpu_load" | nc -l -k -p 8080 -q 1;
sleep 2
done