Simple way to create custom sensors for KDE System Monitor via text streams.
- Clone repo.
$ git clone https://github.com/KerJoe/ksystemstats-scripts.git
$ cd ksystemstats-scripts
- Create build directory and compile for release.
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ cmake --build .
- Install into
/usr/lib/qt/plugins/ksystemstats/
.
# cmake --install
- Restart ksystemstats for changes to take effect.
$ setsid ksystemstats --replace
Scripts should be added into ~/.local/share/ksystemstats-scripts/
(which is created after first launch of the plugin). Adding scripts into subfolders is also supported. Scripts are enabled by setting the executable flag (chmod +x script
) and disabled by removing it.
~/.local/share/ksystemstats-scripts/
├── example.sh
└── folder
└── example.py
You can update script list and restart modified ones by using touching the folder (touch ~/.local/share/ksystemstats-scripts/
).
NOTE: Some changes require refreshing the system sensor by, for example, changing the display style, adding/removing sensors or reopening the system monitor.
#!/usr/bin/env python
import random
while True:
req = input().strip().split("\t")
if req[0] == "?":
print("irandom")
elif req[0] == "irandom":
if (req[1] == "value"):
print(random.randint(0, 100))
elif (req[1] == "min"):
print(0)
elif (req[1] == "max"):
print(100)
elif (req[1] == "unit"):
print("%")
else:
print()
else:
print()
For extra examples see example.py
and example.sh
.
The plugin communicates with scripts via stdin and stdout by issuing commands with arguments separated by tabs and ending in a newline, e.g. "sensor_name\tvalue\n"
. All commands are optional.
The plugins starts by requesting a list of sensors using a "?"
command, the script should respond by a tab separated list of all available sensors.
> ?↵
< sensor_1⇥sensor_2⇥sensor_3↵
A current value of the sensor.
> sensor_1⇥value↵
< 63.8↵
A starting value of the sensor.
> sensor_1⇥value↵
< 50↵
A human readable name of the sensor.
> sensor_1⇥name↵
< Sensor number one↵
A name displayed when there's not enough space for the full name.
> sensor_1⇥short_name↵
< Sensor #1↵
A prefix before sensor name, e.g. "Unit 1 Sensor number one".
> sensor_1⇥prefix↵
< Unit 1↵
A sensor description.
> sensor_1⇥description↵
< The most sensitive sensible sensor↵
A minimum value the sensor value can take (values are not clipped, it is a hint for graphs).
> sensor_1⇥min↵
< -100↵
A maximum value the sensor value can take (values are not clipped, it is a hint for graphs).
> sensor_1⇥max↵
< 100↵
A name of the unit of the sensor value.
> sensor_1⇥unit↵
< B↵
Response | Meaning |
---|---|
- | No unit (123 123) |
B | Bytes (120.2 KiB) |
B/s | Bytes per second (120.2 KiB/s) |
Hz | Hertz (123.1 kHz) |
Timestamp | Amount of seconds since boot (Yesterday at 12:34) |
s | Seconds (123 123s) |
Time | Time (34:12:03) |
Ticks | Number of kernel ticks (0:20:31 (if CONFIG_HZ is 100)) |
C | Degrees celsius (123 123°C) |
b/s | Bits per second (120.2 Kbps) |
dBm | Decibel-milliwatts (123 123 dBm) |
% | Percent (123 123%) |
rate | Rate of change (123 123 s⁻¹) |
rpm | Revolutions per minute (123 123 RPM) |
V | Volts (123 123 V) |
W | Watts (123 123 W) |
Wh | Watt Hour (123 123 Wh) |
A | Ampere (123 123 A) |
A name of QVariant type of sensor value.
> sensor_1⇥variant_type
< double