Intro

I was recently playing around with creating a local Kubernetes cluster using k0s. The cluster was meant to run in a Proxmox LXC container running Debian 13, on my Beelink S12 Pro mini PC.

I noticed that the mini PC fans were louder even when the LXC container was idle. There was probably a slightly higher CPU load due to the cluster kubelet process doing things.

I opened the Proxmox Web UI expecting to find the temperature sensors and fan levels, but there were none.

Fortunately I was able to find how to add sensors to Proxmox on the internet, but there were a few non-intuitive steps.

Rough guide

  1. Run sudo apt install proxmox-default-headers build-essential lm-sensors i2c-tools on the Proxmox host node (in my case it’s the Beelink S12).

This installs the sensors-detect and sensors tools. It also installs the necessary bits to build a custom kernel module to get more sensors data from the mini PC motherboard.

  1. Clone https://github.com/frankcrawford/it87 and follow the instructions given there. This gives access to the S12’s motherboard sensors, including the fan speed.

Roughly:

make clean
make
sudo make install
sudo modprobe it87
  1. Run sudo sensors-detect and click yes for each prompt. Make sure it writes to /etc/modules at the end.

You should see output like:

$ sensors-detect
# See the collapsed section below
# sensors-detect version 3.6.2
# System: AZW MINI S [Default string]
# Kernel: 6.17.4-2-pve x86_64
# Processor: Intel(R) N100 (6/190/0)

This program will help you determine which kernel modules you need
to load to use lm_sensors most effectively. It is generally safe
and recommended to accept the default answers to all questions,
unless you know what you're doing.

Some south bridges, CPUs or memory controllers contain embedded sensors.
Do you want to scan for them? This is totally safe. (YES/no): y
Module cpuid loaded successfully.
Silicon Integrated Systems SIS5595...                       No
VIA VT82C686 Integrated Sensors...                          No
VIA VT8231 Integrated Sensors...                            No
AMD K8 thermal sensors...                                   No
AMD Family 10h thermal sensors...                           No
AMD Family 11h thermal sensors...                           No
AMD Family 12h and 14h thermal sensors...                   No
AMD Family 15h thermal sensors...                           No
AMD Family 16h thermal sensors...                           No
AMD Family 17h thermal sensors...                           No
AMD Family 15h power sensors...                             No
AMD Family 16h power sensors...                             No
Hygon Family 18h thermal sensors...                         No
AMD Family 19h thermal sensors...                           No
Intel digital thermal sensor...                             Success!
    (driver `coretemp')
Intel AMB FB-DIMM thermal sensor...                         No
Intel 5500/5520/X58 thermal sensor...                       No
VIA C7 thermal sensor...                                    No
VIA Nano thermal sensor...                                  No

Some Super I/O chips contain embedded sensors. We have to write to
standard I/O ports to probe them. This is usually safe.
Do you want to scan for Super I/O sensors? (YES/no): y
Probing for Super-I/O at 0x2e/0x2f
Trying family `National Semiconductor/ITE'...               No
Trying family `SMSC'...                                     No
Trying family `VIA/Winbond/Nuvoton/Fintek'...               No
Trying family `ITE'...                                      Yes
Found `ITE IT8613E Super IO Sensors'                        Success!
    (address 0xa30, driver `to-be-written')
Probing for Super-I/O at 0x4e/0x4f
Trying family `National Semiconductor/ITE'...               No
Trying family `SMSC'...                                     No
Trying family `VIA/Winbond/Nuvoton/Fintek'...               No
Trying family `ITE'...                                      No

Some systems (mainly servers) implement IPMI, a set of common interfaces
through which system health data may be retrieved, amongst other things.
We first try to get the information from SMBIOS. If we don't find it
there, we have to read from arbitrary I/O ports to probe for such
interfaces. This is normally safe. Do you want to scan for IPMI
interfaces? (YES/no): y
Probing for `IPMI BMC KCS' at 0xca0...                      No
Probing for `IPMI BMC SMIC' at 0xca8...                     No

Some hardware monitoring chips are accessible through the ISA I/O ports.
We have to write to arbitrary I/O ports to probe them. This is usually
safe though. Yes, you do have ISA I/O ports even if you do not have any
ISA slots! Do you want to scan the ISA I/O ports? (yes/NO): y
Probing for `National Semiconductor LM78' at 0x290...       No
Probing for `National Semiconductor LM79' at 0x290...       No
Probing for `Winbond W83781D' at 0x290...                   No
Probing for `Winbond W83782D' at 0x290...                   No

Lastly, we can probe the I2C/SMBus adapters for connected hardware
monitoring devices. This is the most risky part, and while it works
reasonably well on most systems, it has been reported to cause trouble
on some systems.
Do you want to probe the I2C/SMBus adapters now? (YES/no): y
Found unknown SMBus adapter 8086:54a3 at 0000:00:1f.4.
Sorry, no supported PCI bus adapters found.

Next adapter: Synopsys DesignWare I2C adapter (i2c-0)
Do you want to scan it? (YES/no/selectively): y
Adapter doesn't support all probing functions.
Some addresses won't be probed.

Next adapter: Synopsys DesignWare I2C adapter (i2c-1)
Do you want to scan it? (YES/no/selectively): y
Adapter doesn't support all probing functions.
Some addresses won't be probed.

Next adapter: Synopsys DesignWare I2C adapter (i2c-2)
Do you want to scan it? (YES/no/selectively): y
Adapter doesn't support all probing functions.
Some addresses won't be probed.

Next adapter: Synopsys DesignWare I2C adapter (i2c-3)
Do you want to scan it? (YES/no/selectively): y
Adapter doesn't support all probing functions.
Some addresses won't be probed.

Next adapter: SMBus I801 adapter at 0000:00:1f.4 (i2c-4)
Do you want to scan it? (yes/NO/selectively): y
Client found at address 0x50
Handled by driver `ee1004' (already loaded), chip type `ee1004'
    (note: this is probably NOT a sensor chip!)

Next adapter: i915 gmbus dpa (i2c-5)
Do you want to scan it? (yes/NO/selectively): y

Next adapter: i915 gmbus dpb (i2c-6)
Do you want to scan it? (yes/NO/selectively): y

Next adapter: i915 gmbus dpc (i2c-7)
Do you want to scan it? (yes/NO/selectively): y

Next adapter: i915 gmbus tc1 (i2c-8)
Do you want to scan it? (yes/NO/selectively): y

Next adapter: i915 gmbus tc2 (i2c-9)
Do you want to scan it? (yes/NO/selectively): y

Next adapter: i915 gmbus tc3 (i2c-10)
Do you want to scan it? (yes/NO/selectively): y

Next adapter: i915 gmbus tc4 (i2c-11)
Do you want to scan it? (yes/NO/selectively): y

Next adapter: i915 gmbus tc5 (i2c-12)
Do you want to scan it? (yes/NO/selectively): y

Next adapter: i915 gmbus tc6 (i2c-13)
Do you want to scan it? (yes/NO/selectively): y


Now follows a summary of the probes I have just done.
Just press ENTER to continue:
Driver `to-be-written':
  * ISA bus, address 0xa30
    Chip `ITE IT8613E Super IO Sensors' (confidence: 9)

Driver `coretemp':
  * Chip `Intel digital thermal sensor' (confidence: 9)

Note: there is no driver for ITE IT8613E Super IO Sensors yet.
Check https://hwmon.wiki.kernel.org/device_support_status for updates.

To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
coretemp
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!

Do you want to add these lines automatically to /etc/modules? (yes/NO) y

Unloading cpuid... OK
  1. Additionally, add the following to /etc/modules or run sudo modprobe <kernel module> for each one. Using modprobe won’t persist across reboots though.
drivetemp # for hdd / ssd temps
it87 # for additional motherboard sensors
# i2c_i801 # this was meant to show more sensors, but I couldn't get it to work
  1. Confirm you see some sensible values by running sudo sensors.

  2. Follow the guide from https://github.com/Meliox/PVE-mods to add the sensors info to Proxmox’s web UI.

Quoting the main steps here:

apt-get install lm-sensors
sensors-detect
wget https://raw.githubusercontent.com/Meliox/PVE-mods/refs/heads/main/pve-mod-gui-sensors.sh
bash pve-mod-gui-sensors.sh install
  1. Clear the browser cache to ensure the new Web UI javascript assets are loaded.

  2. Check that the sensors values are there.

Here’s how it looked for me:

A screenshot of the proxmox UI showing sensor data

Proxmox sensor data

One interesting tidbit is that running sensors in the terminal shows a few more sensors, compared to what’s shown in the Proxmox UI.

Another is that I couldn’t get the RAM temperature to be shown. It might be related to one of the detect sensors that doesn’t have a handler (the Found unknown SMBus adapter 8086:54a3 at 0000:00:1f.4 output).

Outro

I was able to confirm that the fan speed went from around 3000 rpm to ~3200 when the k0s LXC container was running, which resulted in a noticeable wheeze sound. Even though the container CPU usage was hovering only around 2%.

Curiosity satisfied. I might look into modifying the fan curve in the BIOS to start spinning the fan only at a higher temperature.