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.
33 lines
1.1 KiB
Bash
Executable File
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
|