Many times I have found myself watching the various ‘debug’ commands like top/ps/mount/df or various log files like /var/log/messages or /var/log/automount.log when I thought something went wrong … or just takes little too long. I needed to open several terminal xterm(1) sessions (which is quite fast as I open them with [WIN]+[SPACE] and then [ENTER] but still …) and check what went wrong.
These actions tired my so I created a thing called Global Dashboard with all information I would ever need for such debugging.
You may want to check other articles in the FreeBSD Desktop series on the FreeBSD Desktop – Global Page where you will find links to all episodes of the series along with table of contents for each episode’s contents.
From all the commands that FreeBSD contains I have chosen these 12 ones:
Make sure you have doas(1) installed and configured. The most basic way to do it is below. You will have to be in wheel group to make it work properly.
# pkg install doas
# echo 'permit nopass :wheel as root' > /usr/local/etc/doas.conf
# chmod 400 /usr/local/etc/doas.conf
Let me show you how it looks.
Here is the typical empty desktop with Global Dashboard disabled.
… and here is the Global Dashboard enabled.
For the sake of comfort I will use [Scroll Lock] key with xbindkeys to toggle between this ‘debug’ session on and off as I already use [Pause Break] key to Pause Any Application described in the Part 16 – Configuration – Pause Any Application episode of FreeBSD Desktop series.
Conky
We will have to use older (1.9) version of Conky as the current one (1.10/1.11) are broken for anything serious.
We will use portdowngrade tool for that job.
First, lets install needed packages.
# pkg install portdowngrade conky xbindkeys
Assuming that you have up to date FreeBSD Ports tree in the /usr/ports directory – we see that current Conky version in the Ports is 1.11.
% cd /usr/ports/sysutils/conky
% cat distinfo
TIMESTAMP = 1550919299
SHA256 (brndnmtthws-conky-v1.11.3_GH0.tar.gz) = 0140e749537d4d05bf33fbac436e54756faa26021e16f2bca418e9eeea724eb4
SIZE (brndnmtthws-conky-v1.11.3_GH0.tar.gz) = 2390099
We will now downgrade the Conky port to usable 1.9 version with portdowngrade utility. I already tried various Conky Port versions and the one that you are looking for is r419144 revision.
# cd /usr/ports/sysutils
# mv conky conky-1.11
# portdowngrade sysutils/conky | grep -C 17 r419144
------------------------------------------------------------------------
r422880 | madpilot | 2016-09-28 18:55:38 +0200 (Wed, 28 Sep 2016) | 13 lines
- Update conky and conky-awesome to 1.10.4
- Take maintainership [1]
- Options adapted to new version
- Removed LUA option since it's a mandatoory requirement now
- Use project own install target
- Fix installation of lua helper libraries
- Project moved to github
- in conky-awesome, properly use OPTIONS_EXCLUDE
PR: 212629
Submitted by: me
Approved by: ntarmos@ceid.upatras.gr (former maintainer) [1]
------------------------------------------------------------------------
r419144 | pawel | 2016-07-26 20:57:23 +0200 (Tue, 26 Jul 2016) | 2 lines
Fix typo
------------------------------------------------------------------------
r419142 | pawel | 2016-07-26 20:40:20 +0200 (Tue, 26 Jul 2016) | 8 lines
- Add explicit IMPLIES between dependencies and simplify option handling [1]
- Convert to USES=localbase
- Switch some options helpers from LIB_DEPENDS to USE=xorg and USE=gnome
PR: 210414 [1] (based on)
Submitted by: elferdo@gmail.com
Approved by: maintainer timeout
------------------------------------------------------------------------
r418767 | mat | 2016-07-19 13:04:13 +0200 (Tue, 19 Jul 2016) | 11 lines
We will now fetch the Conky port from r419144 revision – working 1.9 version.
# portdowngrade sysutils/conky r419144
A conky/files
A conky/Makefile
A conky/files/patch-configure
A conky/files/patch-lua-cairo.pkg
A conky/files/patch-src-conky.c
A conky/files/patch-src-freebsd.c
A conky/files/patch-src-freebsd.h
A conky/files/patch-src-fs.c
A conky/pkg-descr
A conky/distinfo
Checked out revision 419144.
You should be done-- now cd into conky and you can run
# make deinstall install clean
Please note that portdowngrade no longer modifies the ports tree; the
checked out port is at
/usr/ports/sysutils/conky
Done. Let’s verify that its the version we need.
% pwd
/usr/ports/sysutils
% cat conky-1.11/distinfo
TIMESTAMP = 1550919299
SHA256 (brndnmtthws-conky-v1.11.3_GH0.tar.gz) = 0140e749537d4d05bf33fbac436e54756faa26021e16f2bca418e9eeea724eb4
SIZE (brndnmtthws-conky-v1.11.3_GH0.tar.gz) = 2390099
% cat conky/distinfo
SHA256 (conky-1.9.0.tar.bz2) = baf1b550f135fbfb53e5e286a33aadc03a667d63bf6c4d52ba7637366295bb6f
SIZE (conky-1.9.0.tar.bz2) = 626555
Yup. We will now build a Conky 1.9 package (may be handy later).
# pwd
/usr/ports/sysutils
# cd conky
# pwd
/usr/ports/sysutils/conky
# make package
===> conky-1.9.0_6 depends on file: /usr/local/sbin/pkg - found
=> conky-1.9.0.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch https://downloads.sourceforge.net/project/conky/conky/1.9.0/conky-1.9.0.tar.bz2
conky-1.9.0.tar.bz2 100% of 611 kB 216 kBps 00m03s
===> Fetching all distfiles required by conky-1.9.0_6 for building
===> Extracting for conky-1.9.0_6
=> SHA256 Checksum OK for conky-1.9.0.tar.bz2.
===> Patching for conky-1.9.0_6
===> Applying FreeBSD patches for conky-1.9.0_6
===> conky-1.9.0_6 depends on executable: gmake - found
===> conky-1.9.0_6 depends on package: libiconv>=1.14_11 - found
===> conky-1.9.0_6 depends on package: pkgconf>=1.3.0_1 - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/x11.pc - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/xext.pc - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/xdamage.pc - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/xfixes.pc - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/xft.pc - found
===> Configuring for conky-1.9.0_6
===> FreeBSD 10 autotools fix applied to /usr/ports/obj/usr/ports/sysutils/conky/work/conky-1.9.0/config.rpath
(...)
====> Compressing man pages (compress-man)
===> Building package for conky-1.9.0_6
===> Cleaning for conky-1.9.0_6
… but where is our package, its not in the /usr/ports/sysutils/conky directory. Its not in the /usr/ports/distfiles dir either.
As I use WRKDIRPREFIX=${PORTSDIR}/obj option in the /etc/make.conf file it should be somewhere in the /usr/ports/obj then.
% grep WRKDIRPREFIX /etc/make.conf
WRKDIRPREFIX=${PORTSDIR}/obj
Let’s find(1) it.
% find /usr/ports/obj -name conky\*txz
/usr/ports/obj/usr/ports/sysutils/conky/work/pkg/conky-1.9.0_6.txz
There. I will move it to /root directory to keep it.
# mv /usr/ports/obj/usr/ports/sysutils/conky/work/pkg/conky-1.9.0_6.txz /root
We will not clean up after the port/package building.
# make -C /usr/ports/sysutils/conky clean distclean
===> Cleaning for conky-1.9.0_6
#
We will now delete installed Conky 1.11 version and install our working 1.9 version.
# pkg delete conky
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):
Installed packages to be REMOVED:
conky-1.11.3
Number of packages to be removed: 1
Proceed with deinstalling packages? [y/N]: y
[1/1] Deinstalling conky-1.11.3...
[1/1] Deleting files for conky-1.11.3: 100%
# pkg add /root/conky-1.9.0_6.txz
Installing conky-1.9.0_6...
Extracting conky-1.9.0_6: 100%
Last check for the Conky version.
% conky --version
Conky 1.9.0 compiled Tue Mar 19 12:55:55 CET 2019 for FreeBSD 11.2-RELEASE-p9 (amd64)
Compiled in features:
System config file: /usr/local/etc/conky/conky.conf
Package library path: /usr/local/lib/conky
X11:
* Xdamage extension
* XDBE (double buffer extension)
* Xft
* ARGB visual
Music detection:
General:
* math
* config-output
Great. We have needed Conky version.
By the way – did you thought how much work will it take to make the same on Debian or CentOS without the FreeBSD Ports infrastructure?
Xbindkeys
The only needed configuration in the ~/.xbindkeysrc is this one below – it may be different for your keyboard so make sure to ‘catch’ needed key event.
% cat ~/.xbindkeysrc
# SCROLL LOCK | Scroll Lock
"~/scripts/desktop-debug.sh"
m:0x0 + c:78
If you need more information about how Xbindkeys work then read the FreeBSD Desktop – Part 9 – Key Components – Keyboard/Mouse Shortcuts episode.
Scripts and Configs
This is the ~/scripts/desktop-debug.sh script.
#! /bin/sh
pgrep -q conky
case ${?} in
(0) killall -9 conky ;;
(1) ~/scripts/__openbox_restart_conky.sh ;;
esac
… and the ~/scripts/__openbox_restart_conky.sh script.
#! /bin/sh
VERSION=1.9
PROFILE=T420s
killall -9 conky
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.1 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.2 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.3 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.4 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.5 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.6 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.7 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.8 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.9 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.a &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.b &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.c &
I use have several laptops so I need to distinguish which config files are used on which laptop, that is why I use PROFILE field – which is set to ThinkPad T420s in that example.
Here are the commands defined in these ~/.conkyrc.1.9.T420s.LOG.* files.
% grep exec ~/.conkyrc.1.9.T420s.LOG.*
.conkyrc.1.9.T420s.LOG.1:${color #eeeeee}${exec mount -p | awk '{print $1, $2, $3}' | column -t}
.conkyrc.1.9.T420s.LOG.2:${color #eeeeee}${exec tail -n 16 /var/log/automount.log}
.conkyrc.1.9.T420s.LOG.3:${color #eeeeee}${exec grep -v -E 'pulseaudio|message repeated|null_update_chw|route failed:|send_packet: |gen6_gt_|feeder_|cdce0: (Su|Re)' /var/log/messages | tail -16}
.conkyrc.1.9.T420s.LOG.4:${color #eeeeee}${exec vmstat -i}
.conkyrc.1.9.T420s.LOG.5:${color #eeeeee}${exec doas usbconfig}
.conkyrc.1.9.T420s.LOG.6:${color #eeeeee}${exec ps axwww -o %cpu,rss,command | head -1; ps axwww -o %cpu,rss,command | grep -v conky | grep -v '%CPU' | sort -n -r | head -15 }
.conkyrc.1.9.T420s.LOG.7:${color #eeeeee}${exec sockstat -l -4 | cut -c 1-50}
.conkyrc.1.9.T420s.LOG.8:${color #eeeeee}${exec top -m io -o total -b -s 1 -d 2 | grep -A 15 'PID USERNAME' | tail -n 16}
.conkyrc.1.9.T420s.LOG.9:${color #eeeeee}${exec gstat -p -I 345678}
.conkyrc.1.9.T420s.LOG.a:${color #eeeeee}${exec df -g | awk '{print $5,$6}' | column -t}
.conkyrc.1.9.T420s.LOG.b:${color #eeeeee}${exec pciconf -l}
.conkyrc.1.9.T420s.LOG.c:${color #eeeeee}${exec ifconfig -l -u | sed s/lo0//g | while read I; do ifconfig ${I}; done}
… and here is the diagram showing where these commands are placed.
I will use twelve (12) Conky configuration files for this purpose, each with one of the commands from above list.
a df(1) | b pciconf(8) | c ifconfig(8)
---------------+--------------------------+---------------------
7 sockstat(1) | 8 top(1) | 9 gstat(8)
---------------+--------------------------+---------------------
4 vmstat(8) | 5 usbconfig(8) | 6 ps(1)
---------------+--------------------------+---------------------
1 mount(8) | 2 /var/log/automount.log | 3 /var/log/messages
Next are the full Conky configuration files.
~/.conkyrc.1.9.T420s.LOG.1
alignment bottom_left
background yes
gap_x 3
gap_y 3
minimum_size 279 193
maximum_width 280
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.1
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /sbin/mount -p
${color #eeeeee}${exec mount -p | awk '{print $1, $2, $3}' | column -t}
~/.conkyrc.1.9.T420s.LOG.2
alignment bottom_left
background yes
gap_x 288
gap_y 3
minimum_size 513 193
maximum_width 514
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.2
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /var/log/automount.log
${color #eeeeee}${exec tail -n 16 /var/log/automount.log}
~/.conkyrc.1.9.T420s.LOG.3
alignment bottom_left
background yes
gap_x 807
gap_y 3
minimum_size 789 193
maximum_width 790
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.3
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /var/log/messages
${color #eeeeee}${exec grep -v -E 'pulseaudio|message repeated|null_update_chw|route failed:|send_packet: |gen6_gt_|feeder_|cdce0: (Su|Re)' /var/log/messages | tail -16}
~/.conkyrc.1.9.T420s.LOG.4
alignment bottom_left
background yes
gap_x 3
gap_y 201
minimum_size 279 193
maximum_width 280
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.4
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/bin/vmstat -i
${color #eeeeee}${exec vmstat -i}
~/.conkyrc.1.9.T420s.LOG.5
alignment bottom_left
background yes
gap_x 288
gap_y 201
minimum_size 513 193
maximum_width 514
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.5
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/sbin/usbconfig
${color #eeeeee}${exec doas usbconfig}
~/.conkyrc.1.9.T420s.LOG.6
alignment bottom_left
background yes
gap_x 807
gap_y 201
minimum_size 789 193
maximum_width 790
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.6
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /bin/ps axwww -o %cpu,rss,command
${color #eeeeee}${exec ps axwww -o %cpu,rss,command | head -1; ps axwww -o %cpu,rss,command | grep -v conky | grep -v '%CPU' | sort -n -r | head -15 }
~/.conkyrc.1.9.T420s.LOG.7
alignment bottom_left
background yes
gap_x 3
gap_y 399
minimum_size 279 193
maximum_width 280
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.7
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/bin/sockstat -l -4
${color #eeeeee}${exec sockstat -l -4 | cut -c 1-50}
~/.conkyrc.1.9.T420s.LOG.8
alignment bottom_left
background yes
gap_x 288
gap_y 399
minimum_size 513 193
maximum_width 514
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.8
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/bin/top -m io -o total
${color #eeeeee}${exec top -m io -o total -b -s 1 -d 2 | grep -A 15 'PID USERNAME' | tail -n 16}
~/.conkyrc.1.9.T420s.LOG.9
alignment bottom_left
background yes
gap_x 807
gap_y 399
minimum_size 789 193
maximum_width 790
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.9
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/sbin/gstat -p -I 300000
${color #eeeeee}${exec gstat -p -I 345678}
~/.conkyrc.1.9.T420s.LOG.a
alignment bottom_left
background yes
gap_x 3
gap_y 597
minimum_size 279 272
maximum_width 280
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.7
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /bin/df -g
${color #eeeeee}${exec df -g | awk '{print $5,$6}' | column -t}
~/.conkyrc.1.9.T420s.LOG.b
alignment bottom_left
background yes
gap_x 288
gap_y 597
minimum_size 513 272
maximum_width 514
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.8
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/sbin/pciconf -l
${color #eeeeee}${exec pciconf -l}
~/.conkyrc.1.9.T420s.LOG.c
alignment bottom_left
background yes
gap_x 807
gap_y 597
minimum_size 789 272
maximum_width 790
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.9
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /sbin/ifconfig wlan0/em0/tun0
${color #eeeeee}${exec ifconfig -l -u | sed s/lo0//g | while read I; do ifconfig ${I}; done}
Thats a quite a lot configuration files but I think that this configuration done once will serve many many times in the future
These Conky configuration files are suited for the 1600×900 resolution, you will have to modify values of the gap_x/gap_y/minimum_size/maximum_width parameters to make it fit into other resolution.
Initially I wanted to write a script/generator for that, but lets face it – I will not be able to properly cover each possible resolution
UPDATE 2 – Latest Conky 1.11 Also Works
When I wrote this article I wrote that older Conky 1.9 version is needed (The conky-1.9.0_6 exactly which could be retrieved using portdowngrade sysutils/conky r419144 command).
Conky 1.10 introduced many bugs along with entirely new configuration format.
Latest Conky 1.11 (its conky-1.11.4_1 package on my box to be exact) works like a charm with Conky 1.9 configuration. It still has bug of NOT passing the mouse clicks to the desktop so of you want to make a left/middle/right click on the desktop aim on the place other then the Conky Dashboard space.
You can of course still follow the original article and fetch/build Conky with 1.9 version and have working left/middle/right mouse clicks on the desktop.
EOF
Continue reading...
These actions tired my so I created a thing called Global Dashboard with all information I would ever need for such debugging.
You may want to check other articles in the FreeBSD Desktop series on the FreeBSD Desktop – Global Page where you will find links to all episodes of the series along with table of contents for each episode’s contents.
From all the commands that FreeBSD contains I have chosen these 12 ones:
- mount -p
- /var/log/automount.log
- /var/log/messages
- vmstat -i
- usbconfig
- ps axwww -o %cpu,rss,command
- sockstat -l -4
- top -m io -o total
- gstat -p
- df -g
- pciconf -l
- ifconfig
Make sure you have doas(1) installed and configured. The most basic way to do it is below. You will have to be in wheel group to make it work properly.
# pkg install doas
# echo 'permit nopass :wheel as root' > /usr/local/etc/doas.conf
# chmod 400 /usr/local/etc/doas.conf
Let me show you how it looks.
Here is the typical empty desktop with Global Dashboard disabled.

… and here is the Global Dashboard enabled.

For the sake of comfort I will use [Scroll Lock] key with xbindkeys to toggle between this ‘debug’ session on and off as I already use [Pause Break] key to Pause Any Application described in the Part 16 – Configuration – Pause Any Application episode of FreeBSD Desktop series.

Conky
We will have to use older (1.9) version of Conky as the current one (1.10/1.11) are broken for anything serious.
We will use portdowngrade tool for that job.
First, lets install needed packages.
# pkg install portdowngrade conky xbindkeys
Assuming that you have up to date FreeBSD Ports tree in the /usr/ports directory – we see that current Conky version in the Ports is 1.11.
% cd /usr/ports/sysutils/conky
% cat distinfo
TIMESTAMP = 1550919299
SHA256 (brndnmtthws-conky-v1.11.3_GH0.tar.gz) = 0140e749537d4d05bf33fbac436e54756faa26021e16f2bca418e9eeea724eb4
SIZE (brndnmtthws-conky-v1.11.3_GH0.tar.gz) = 2390099
We will now downgrade the Conky port to usable 1.9 version with portdowngrade utility. I already tried various Conky Port versions and the one that you are looking for is r419144 revision.
# cd /usr/ports/sysutils
# mv conky conky-1.11
# portdowngrade sysutils/conky | grep -C 17 r419144
------------------------------------------------------------------------
r422880 | madpilot | 2016-09-28 18:55:38 +0200 (Wed, 28 Sep 2016) | 13 lines
- Update conky and conky-awesome to 1.10.4
- Take maintainership [1]
- Options adapted to new version
- Removed LUA option since it's a mandatoory requirement now
- Use project own install target
- Fix installation of lua helper libraries
- Project moved to github
- in conky-awesome, properly use OPTIONS_EXCLUDE
PR: 212629
Submitted by: me
Approved by: ntarmos@ceid.upatras.gr (former maintainer) [1]
------------------------------------------------------------------------
r419144 | pawel | 2016-07-26 20:57:23 +0200 (Tue, 26 Jul 2016) | 2 lines
Fix typo
------------------------------------------------------------------------
r419142 | pawel | 2016-07-26 20:40:20 +0200 (Tue, 26 Jul 2016) | 8 lines
- Add explicit IMPLIES between dependencies and simplify option handling [1]
- Convert to USES=localbase
- Switch some options helpers from LIB_DEPENDS to USE=xorg and USE=gnome
PR: 210414 [1] (based on)
Submitted by: elferdo@gmail.com
Approved by: maintainer timeout
------------------------------------------------------------------------
r418767 | mat | 2016-07-19 13:04:13 +0200 (Tue, 19 Jul 2016) | 11 lines
We will now fetch the Conky port from r419144 revision – working 1.9 version.
# portdowngrade sysutils/conky r419144
A conky/files
A conky/Makefile
A conky/files/patch-configure
A conky/files/patch-lua-cairo.pkg
A conky/files/patch-src-conky.c
A conky/files/patch-src-freebsd.c
A conky/files/patch-src-freebsd.h
A conky/files/patch-src-fs.c
A conky/pkg-descr
A conky/distinfo
Checked out revision 419144.
You should be done-- now cd into conky and you can run
# make deinstall install clean
Please note that portdowngrade no longer modifies the ports tree; the
checked out port is at
/usr/ports/sysutils/conky
Done. Let’s verify that its the version we need.
% pwd
/usr/ports/sysutils
% cat conky-1.11/distinfo
TIMESTAMP = 1550919299
SHA256 (brndnmtthws-conky-v1.11.3_GH0.tar.gz) = 0140e749537d4d05bf33fbac436e54756faa26021e16f2bca418e9eeea724eb4
SIZE (brndnmtthws-conky-v1.11.3_GH0.tar.gz) = 2390099
% cat conky/distinfo
SHA256 (conky-1.9.0.tar.bz2) = baf1b550f135fbfb53e5e286a33aadc03a667d63bf6c4d52ba7637366295bb6f
SIZE (conky-1.9.0.tar.bz2) = 626555
Yup. We will now build a Conky 1.9 package (may be handy later).
# pwd
/usr/ports/sysutils
# cd conky
# pwd
/usr/ports/sysutils/conky
# make package
===> conky-1.9.0_6 depends on file: /usr/local/sbin/pkg - found
=> conky-1.9.0.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch https://downloads.sourceforge.net/project/conky/conky/1.9.0/conky-1.9.0.tar.bz2
conky-1.9.0.tar.bz2 100% of 611 kB 216 kBps 00m03s
===> Fetching all distfiles required by conky-1.9.0_6 for building
===> Extracting for conky-1.9.0_6
=> SHA256 Checksum OK for conky-1.9.0.tar.bz2.
===> Patching for conky-1.9.0_6
===> Applying FreeBSD patches for conky-1.9.0_6
===> conky-1.9.0_6 depends on executable: gmake - found
===> conky-1.9.0_6 depends on package: libiconv>=1.14_11 - found
===> conky-1.9.0_6 depends on package: pkgconf>=1.3.0_1 - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/x11.pc - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/xext.pc - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/xdamage.pc - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/xfixes.pc - found
===> conky-1.9.0_6 depends on file: /usr/local/libdata/pkgconfig/xft.pc - found
===> Configuring for conky-1.9.0_6
===> FreeBSD 10 autotools fix applied to /usr/ports/obj/usr/ports/sysutils/conky/work/conky-1.9.0/config.rpath
(...)
====> Compressing man pages (compress-man)
===> Building package for conky-1.9.0_6
===> Cleaning for conky-1.9.0_6
… but where is our package, its not in the /usr/ports/sysutils/conky directory. Its not in the /usr/ports/distfiles dir either.
As I use WRKDIRPREFIX=${PORTSDIR}/obj option in the /etc/make.conf file it should be somewhere in the /usr/ports/obj then.
% grep WRKDIRPREFIX /etc/make.conf
WRKDIRPREFIX=${PORTSDIR}/obj
Let’s find(1) it.
% find /usr/ports/obj -name conky\*txz
/usr/ports/obj/usr/ports/sysutils/conky/work/pkg/conky-1.9.0_6.txz
There. I will move it to /root directory to keep it.
# mv /usr/ports/obj/usr/ports/sysutils/conky/work/pkg/conky-1.9.0_6.txz /root
We will not clean up after the port/package building.
# make -C /usr/ports/sysutils/conky clean distclean
===> Cleaning for conky-1.9.0_6
#
We will now delete installed Conky 1.11 version and install our working 1.9 version.
# pkg delete conky
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):
Installed packages to be REMOVED:
conky-1.11.3
Number of packages to be removed: 1
Proceed with deinstalling packages? [y/N]: y
[1/1] Deinstalling conky-1.11.3...
[1/1] Deleting files for conky-1.11.3: 100%
# pkg add /root/conky-1.9.0_6.txz
Installing conky-1.9.0_6...
Extracting conky-1.9.0_6: 100%
Last check for the Conky version.
% conky --version
Conky 1.9.0 compiled Tue Mar 19 12:55:55 CET 2019 for FreeBSD 11.2-RELEASE-p9 (amd64)
Compiled in features:
System config file: /usr/local/etc/conky/conky.conf
Package library path: /usr/local/lib/conky
X11:
* Xdamage extension
* XDBE (double buffer extension)
* Xft
* ARGB visual
Music detection:
General:
* math
* config-output
Great. We have needed Conky version.
By the way – did you thought how much work will it take to make the same on Debian or CentOS without the FreeBSD Ports infrastructure?

Xbindkeys
The only needed configuration in the ~/.xbindkeysrc is this one below – it may be different for your keyboard so make sure to ‘catch’ needed key event.
% cat ~/.xbindkeysrc
# SCROLL LOCK | Scroll Lock
"~/scripts/desktop-debug.sh"
m:0x0 + c:78
If you need more information about how Xbindkeys work then read the FreeBSD Desktop – Part 9 – Key Components – Keyboard/Mouse Shortcuts episode.
Scripts and Configs
This is the ~/scripts/desktop-debug.sh script.
#! /bin/sh
pgrep -q conky
case ${?} in
(0) killall -9 conky ;;
(1) ~/scripts/__openbox_restart_conky.sh ;;
esac
… and the ~/scripts/__openbox_restart_conky.sh script.
#! /bin/sh
VERSION=1.9
PROFILE=T420s
killall -9 conky
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.1 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.2 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.3 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.4 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.5 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.6 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.7 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.8 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.9 &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.a &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.b &
nice -n 20 conky -c ~/.conkyrc.${VERSION}.${PROFILE}.LOG.c &
I use have several laptops so I need to distinguish which config files are used on which laptop, that is why I use PROFILE field – which is set to ThinkPad T420s in that example.
Here are the commands defined in these ~/.conkyrc.1.9.T420s.LOG.* files.
% grep exec ~/.conkyrc.1.9.T420s.LOG.*
.conkyrc.1.9.T420s.LOG.1:${color #eeeeee}${exec mount -p | awk '{print $1, $2, $3}' | column -t}
.conkyrc.1.9.T420s.LOG.2:${color #eeeeee}${exec tail -n 16 /var/log/automount.log}
.conkyrc.1.9.T420s.LOG.3:${color #eeeeee}${exec grep -v -E 'pulseaudio|message repeated|null_update_chw|route failed:|send_packet: |gen6_gt_|feeder_|cdce0: (Su|Re)' /var/log/messages | tail -16}
.conkyrc.1.9.T420s.LOG.4:${color #eeeeee}${exec vmstat -i}
.conkyrc.1.9.T420s.LOG.5:${color #eeeeee}${exec doas usbconfig}
.conkyrc.1.9.T420s.LOG.6:${color #eeeeee}${exec ps axwww -o %cpu,rss,command | head -1; ps axwww -o %cpu,rss,command | grep -v conky | grep -v '%CPU' | sort -n -r | head -15 }
.conkyrc.1.9.T420s.LOG.7:${color #eeeeee}${exec sockstat -l -4 | cut -c 1-50}
.conkyrc.1.9.T420s.LOG.8:${color #eeeeee}${exec top -m io -o total -b -s 1 -d 2 | grep -A 15 'PID USERNAME' | tail -n 16}
.conkyrc.1.9.T420s.LOG.9:${color #eeeeee}${exec gstat -p -I 345678}
.conkyrc.1.9.T420s.LOG.a:${color #eeeeee}${exec df -g | awk '{print $5,$6}' | column -t}
.conkyrc.1.9.T420s.LOG.b:${color #eeeeee}${exec pciconf -l}
.conkyrc.1.9.T420s.LOG.c:${color #eeeeee}${exec ifconfig -l -u | sed s/lo0//g | while read I; do ifconfig ${I}; done}
… and here is the diagram showing where these commands are placed.
I will use twelve (12) Conky configuration files for this purpose, each with one of the commands from above list.
a df(1) | b pciconf(8) | c ifconfig(8)
---------------+--------------------------+---------------------
7 sockstat(1) | 8 top(1) | 9 gstat(8)
---------------+--------------------------+---------------------
4 vmstat(8) | 5 usbconfig(8) | 6 ps(1)
---------------+--------------------------+---------------------
1 mount(8) | 2 /var/log/automount.log | 3 /var/log/messages
Next are the full Conky configuration files.
~/.conkyrc.1.9.T420s.LOG.1
alignment bottom_left
background yes
gap_x 3
gap_y 3
minimum_size 279 193
maximum_width 280
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.1
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /sbin/mount -p
${color #eeeeee}${exec mount -p | awk '{print $1, $2, $3}' | column -t}
~/.conkyrc.1.9.T420s.LOG.2
alignment bottom_left
background yes
gap_x 288
gap_y 3
minimum_size 513 193
maximum_width 514
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.2
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /var/log/automount.log
${color #eeeeee}${exec tail -n 16 /var/log/automount.log}
~/.conkyrc.1.9.T420s.LOG.3
alignment bottom_left
background yes
gap_x 807
gap_y 3
minimum_size 789 193
maximum_width 790
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.3
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /var/log/messages
${color #eeeeee}${exec grep -v -E 'pulseaudio|message repeated|null_update_chw|route failed:|send_packet: |gen6_gt_|feeder_|cdce0: (Su|Re)' /var/log/messages | tail -16}
~/.conkyrc.1.9.T420s.LOG.4
alignment bottom_left
background yes
gap_x 3
gap_y 201
minimum_size 279 193
maximum_width 280
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.4
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/bin/vmstat -i
${color #eeeeee}${exec vmstat -i}
~/.conkyrc.1.9.T420s.LOG.5
alignment bottom_left
background yes
gap_x 288
gap_y 201
minimum_size 513 193
maximum_width 514
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.5
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/sbin/usbconfig
${color #eeeeee}${exec doas usbconfig}
~/.conkyrc.1.9.T420s.LOG.6
alignment bottom_left
background yes
gap_x 807
gap_y 201
minimum_size 789 193
maximum_width 790
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.6
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /bin/ps axwww -o %cpu,rss,command
${color #eeeeee}${exec ps axwww -o %cpu,rss,command | head -1; ps axwww -o %cpu,rss,command | grep -v conky | grep -v '%CPU' | sort -n -r | head -15 }
~/.conkyrc.1.9.T420s.LOG.7
alignment bottom_left
background yes
gap_x 3
gap_y 399
minimum_size 279 193
maximum_width 280
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.7
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/bin/sockstat -l -4
${color #eeeeee}${exec sockstat -l -4 | cut -c 1-50}
~/.conkyrc.1.9.T420s.LOG.8
alignment bottom_left
background yes
gap_x 288
gap_y 399
minimum_size 513 193
maximum_width 514
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.8
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/bin/top -m io -o total
${color #eeeeee}${exec top -m io -o total -b -s 1 -d 2 | grep -A 15 'PID USERNAME' | tail -n 16}
~/.conkyrc.1.9.T420s.LOG.9
alignment bottom_left
background yes
gap_x 807
gap_y 399
minimum_size 789 193
maximum_width 790
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.9
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/sbin/gstat -p -I 300000
${color #eeeeee}${exec gstat -p -I 345678}
~/.conkyrc.1.9.T420s.LOG.a
alignment bottom_left
background yes
gap_x 3
gap_y 597
minimum_size 279 272
maximum_width 280
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.7
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /bin/df -g
${color #eeeeee}${exec df -g | awk '{print $5,$6}' | column -t}
~/.conkyrc.1.9.T420s.LOG.b
alignment bottom_left
background yes
gap_x 288
gap_y 597
minimum_size 513 272
maximum_width 514
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.8
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /usr/sbin/pciconf -l
${color #eeeeee}${exec pciconf -l}
~/.conkyrc.1.9.T420s.LOG.c
alignment bottom_left
background yes
gap_x 807
gap_y 597
minimum_size 789 272
maximum_width 790
double_buffer yes
draw_outline no
draw_shades no
default_outline_color 444444
default_shade_color 444444
own_window yes
own_window_class conky
own_window_colour 222222
own_window_type override
own_window_transparent no
update_interval 2.9
use_xft yes
xftfont ubuntu mono-10
border_inner_margin 0
border_outer_margin 0
border_width 2
TEXT
${color #ee0000}% /sbin/ifconfig wlan0/em0/tun0
${color #eeeeee}${exec ifconfig -l -u | sed s/lo0//g | while read I; do ifconfig ${I}; done}
Thats a quite a lot configuration files but I think that this configuration done once will serve many many times in the future

These Conky configuration files are suited for the 1600×900 resolution, you will have to modify values of the gap_x/gap_y/minimum_size/maximum_width parameters to make it fit into other resolution.
Initially I wanted to write a script/generator for that, but lets face it – I will not be able to properly cover each possible resolution

UPDATE 2 – Latest Conky 1.11 Also Works
When I wrote this article I wrote that older Conky 1.9 version is needed (The conky-1.9.0_6 exactly which could be retrieved using portdowngrade sysutils/conky r419144 command).
Conky 1.10 introduced many bugs along with entirely new configuration format.
Latest Conky 1.11 (its conky-1.11.4_1 package on my box to be exact) works like a charm with Conky 1.9 configuration. It still has bug of NOT passing the mouse clicks to the desktop so of you want to make a left/middle/right click on the desktop aim on the place other then the Conky Dashboard space.
You can of course still follow the original article and fetch/build Conky with 1.9 version and have working left/middle/right mouse clicks on the desktop.
EOF
Continue reading...