My LCDd extensions is a simple bash script and it integrates well with lcdproc. Nevertheless it displays things I missed in lcdproc:
- ip-address
- hostname
- hard disk(s) temperatures
- CPU utilization
- CPU temperature (alias physical id 0)
Prerequirements #
-
Make sure, that LCDd is running. Your tools:
vim /etc/lcdd.conf systemctl start lcdd systemctl status lcdd systemctl enable lcdd
If you see a
permission denied
error, then a restart helps for an unknown reason. -
(optional) Setup
hddtemp
and enable it's service. This will reduce the amount of temperature readings. -
(optional) Make sure, that you have netcat installed. It is expected to have a binary, called
nc
somewhere in your path. Some distributions deliverncat
in which case a Symlink will do as well (or change the script)
The Program #
Copy the following bash script and remember its name:
#!/bin/bash
FIFO=/tmp/LCD
sleep 5
mkfifo $FIFO
nc localhost 13666 <> /tmp/LCD 1>/dev/null 2>/dev/null &
trap "kill $!; rm -f $FIFO; exit;" EXIT HUP INT TERM ABRT
cat <<EOF > $FIFO
hello
client_set name test
screen_add screen0
widget_add screen0 line1 string
widget_add screen0 line2 string
screen_add screen1
widget_add screen1 line1 string
widget_add screen1 line2 string
EOF
while [[ true ]]; do
CPUstat=$(cat /proc/stat | grep 'cpu ' | awk '{printf "%.1f%",(($2+$4)*100/($2+$4+$5))}')
CPUtemp=$(sensors | grep 'Physical id 0' | awk '{print $4}')
HDDstat=$(ncat 127.0.0.1 7634 2>/dev/null | sed 's/|//m' | sed 's/||/ \n/g' | grep -v '*' | awk -F'|' '{printf "%s:%s ",$1,$3,$4}' | sed 's/\/dev\///g')
# TODO: ncat works, nc or netcat does not, why?
# logger $(ncat 127.0.0.1 7634)
cat <<EOF > $FIFO
widget_set screen0 line1 1 1 "CPU: $CPUtemp $CPUstat"
widget_set screen0 line2 1 2 "$HDDstat"
widget_set screen1 line1 1 1 "`hostname -i | cut -d' ' -f2`"
widget_set screen1 line2 1 2 "`hostname -f | cut -d' ' -f2`"
EOF
sleep 1
done
In this example I have copied the script to /usr/local/bin
and if you
had chosen an other path do not forget to change it in the following
starter script as well. The following systemd.service
must be copied
to /etc/systemd/system/
and activated with systemctl start maxilcd
.
/etc/systemd/system/maxilcd.service
[Unit]
Description=lcdservice
Requires=lcdd.service
[Service]
ExecStart=/bin/bash -c /usr/local/bin/maxilcd
Type=simple
User=nobody
Group=nobody
[Install]
WantedBy=multi-user.target
If that works enable it as well using
systemctl enable maxilcd