Seamod theme was built by SeaJey. Maxiwell modified the original theme for conky 1.10 configuration. I tweaked it further with some major changes.
- Disk Read/Write
- Lan/Ext IP's
Fixes:
border_outer_margin
can be adjusted without breaking the alignment of rings.- now runs on Ubuntu 16.04 / 18.04 LTS with Gnome 3.18 / 3.28 using
dock
ornormal
window type and hints.
Changes/enhancements:
- gracefully accommodates switching between wired and wireless. NET section shows info for wired (eth0) else wireless (wlan0) info is shown.
own_window_argb_value
conifg option for background and semi-transparency settings.conky_line
superseeds 'name' and 'arg' options to use more complex conkey objects and variables inseamod_rings.lua
- 'Free' text info moved to the bottom so changes avoid interfering with alignment of rings/gauges.
- Tweaked info per section, e.g. CPU temp, fan RPM, memory cache, etc.
- Added IO top info for disk / storage (matches top list for memory and processor).
- Added a few extra conky lua functions to calculate the min, max and average frequency of the cpu cores (requires
nproc
command), given this influences CPU temperature and fan speed.- Min to Max value added as 'Freq:' near the top under 'Temp:' and 'Fan:' values.
- One can use
${nproc}
,${freq_min}
,${freq_max}
, and${freq_avg}
elsewhere in the conky TEXT section.
- Added examples to closely pair/overlap CPU sibling hyperthreads.
- Adjusted
seamod_rings.lau
andconkyrc.lau
for UHD/4K with 125% font scaling.- Previous examples for HD resolution remain as well.
- Added global ring scaling vars to
seamod_rings.lau
for better singular control. - Added example scripts to feed last 5 warning or error messages from syslog or journald.
It's possible to install conky from the Ubuntu repo and add the seamod theme within your home dir (should work in Gnome 3 at least):
sudo apt-get install conky-all
mkdir -p ~/.conky/seamod
git clone --depth=1 https://github.com/JPvRiel/conky-seamod ~/.conky/seamod
cp ~/.conky/seamod/conky.desktop ~/.config/autostart/
ln -s ~/.conky/seamod/conkyrc.lua ~/.conkyrc
Start (ad-hoc in shell, useful for debugging):
conky -c ~/.conky/seamod/conkyrc.lua
Stop:
killall conky
Hints:
- Install location assumes
~/.conky/seamod
. If not, correct script references inconkyrc.lua
. - For auto-start,
conky.desktop
may need other tweaks for auto-start with other desktop environments. - Tested with conky v1.10.8
Hardware such as number of CPU cores, the place to get temperatures and even the way in which network devices are named varies, so some modifications will likely be needed depending on your display setup:
- Screen resolution, e.g. HD vs UHD
- DPI and font scaling factor, e.g. 100% vs 125%
AFAIK, Gnome 3.28 (for Ubuntu 18.04 LTS) display settings options does not offer per display fractional scaling yet.
Herewith, the most likely changes that are typically needed.
If the graphs are not nicely aligned with the text, it's likely the issue relates to complications with conky handling high DPI settings or display font scaling.
You may need to shift the position of the text offsets to align with rings that are rendered independently from the text and other built-in conky graph options. Also look at the example config files for HD vs UHD (with 125% font scaling).
- In
conkyrc.lua
, adjustvoffset
sections in the text section to help text fit nicely with gauges/rings. - In
seamod_rings.lua
, adjust gauges vars and table attributes for position, radius and thickness.
See:
- #944: conky graph does not support HiDPI screen display like Mac Retina
- #218: Conky looks different on autostart than with manual start using XFCE
Modify CPU rings in seamod_rings.lua
's gauge
table vars. You'll likely need to the number of 'cpu' ring items to match the output of the nproc
command.
Current examples are for an Intel i7-9750H (6 core, 12 thread). To adapt it:
- If you have less than 12, simply comment out or remove
cpu
items in the list.- You'll likely want to make rings thicker if you have less than 8.
- If you have more than 12, there's a bit of room left to extend it up to 16.
- Scaling down the ring thickness will be needed for more than 16 cpu items.
There are some variations on the ring concept depending on hyper threading and the number of cores:
- The original evenly spaced CPU ring concept is in seamod_rings_hd_simple.lua.
- My adaptations relate sibling hyper-thread 'cpus'. There are two styles to choose from:
- seamod_rings_hd_cpu_pairs.lua:
- Worked on my system with standard 1920x1080 HD resolution.
- Sibling hyperthreads rings are paired closely to look as if they're a single ring.
- This more clearly reflects a core with a pair of hyperthreads.
- seamod_rings_uhd_txt_125.lua:
- Similar to above, but scaled for UHD and font rendering at 125%.
- seamod_rings_hd_cpu_overlap.lua:
- Both sibling hyperthreads are drawning in the same ring contributing half of the opacity. Each has it's own red marker.
- This provides a nicer way to cram in a high hyper-threaded CPU count, e.g. 16+, in order to avoid too many skinny rings.
- It's also more technically accurate since a hyper-threaded instance of a core isn't a full additional CPU, but overlapped threads.
- seamod_rings_hd_cpu_pairs.lua:
The CPU topology can be inspected via sysfs, e.g.:
$ for c in /sys/devices/system/cpu/cpu*[0-9]/; do cat $c/topology/thread_siblings_list; done | sort -u
0,6
1,7
2,8
3,9
4,10
5,11
Change 'fs_used_perc' items to suite systems partitioning scheme. E.g. default has 'root', 'home' and 'var' separate.
N.B! Alignment between rings and the text is painfully brittle. So avoid changing the number of lines in the text section that algin next to rings. See limitations section below for why...
Best place to add own text or info is under # Extra info
. And to make room, you can remove some lines. This section is past where the rings are rendered.
To adjust ring/gauge sections:
- In
seamod_rings.lua
, the newer version allows for quicker adjustment via global vars, such as:gauge_max_outer_radius
: biggest outermost gauge/ring size.gauge_target_inner_radius
: desired innermost gauge/ring size.- etc.
- In the older/classic way, each item in the gauges table needs to be tweaked:
- Fiddle with
graph_radius
,graph_thickness
and if used,txt_radius
, so adjust ring sizing. - In
gauges
items, useconky_line
instead ofname
andarg
if advanced objects are needed.
- Fiddle with
After adjusting rings, you'll have to realign the text offsets in conkyrc.lua
:
- Look to tweak
voffset
andoffset
values in front of most items. - Note, 3 lines of info are accommodated next to rings and above the built-in graph sections - substitute as you deem fit, but keep the spacing at 3 lines to avoid misalignment between rings and text.
Modify network to monitor - sorry, this is messy!
- Find and replace names for
eth0
(typical for wired) andwlan0
(typical for wireless) if your own device names differ. - Recently, systemd has changed the way devices are named, i.e. based on firmware or BIOS (see RedHat doc Consistent Network Device Naming - Naming Schemes Hierarchy
- So it's going to be system specific and
eth0
orwlan0
defaults are no longer as useful.
- So it's going to be system specific and
- Needs to be done in both
seamod_rings.lua
andconkyrc.lua
E.g. fix.
sed -i -e 's/eth0/eth1/g' ~/.conky/seamod/conkyrc.lua ~/.conky/seamod/seamod_rings.lua
CPU and fan temperature uses the hwmon
conky variable. You'll need to find your hardware specific path and inputs somewhere in /sys/class/hwmon/*
. Sadly, some systems might not consistently use hwmon1 vs hwmon0 between boots.
To have an idea about what got mapped to which hwmon, e.g.:
$ for h in /sys/class/hwmon/hwmon?; do echo "$h = $(cat "$h/name")"; done
/sys/class/hwmon/hwmon0 = AC
/sys/class/hwmon/hwmon1 = acpitz
/sys/class/hwmon/hwmon2 = BAT0
/sys/class/hwmon/hwmon3 = pch_cannonlake
/sys/class/hwmon/hwmon4 = thinkpad
/sys/class/hwmon/hwmon5 = coretemp
/sys/class/hwmon/hwmon6 = iwlwifi
And, if like me, you also have coretemp (for Intel), then, e.g.:
$ for t in /sys/class/hwmon/hwmon5/temp*_label; do echo "$(basename $t): $(cat $t)"; done
temp1_label: Package id 0
temp2_label: Core 0
temp3_label: Core 1
temp4_label: Core 2
temp5_label: Core 3
temp6_label: Core 4
temp7_label: Core 5
Also fan speed probably found with the motherboard, e.g.:
$ cat /sys/class/hwmon/hwmon4/fan1_input
0
So in my case, I edited the conky config section to set the core temps as a grey prefix, and the overall package temp at the end:
${offset 180}${color1}${font Roboto:medium:size=10}Temp: ${font Roboto:regular:size=10}${alignr}${color4}[${hwmon 5 temp 2},${hwmon 5 temp 3},${hwmon 5 temp 4},${hwmon 5 temp 5},${hwmon 5 temp 6},${hwmon 5 temp 7}] ${alignr}${color2}${hwmon 5 temp 1} C
${offset 180}${color1}${font Roboto:medium:size=10}Fan: ${alignr}${font Roboto:regular:size=10}${color2}${hwmon 4 fan 1} RPM
If you choose more or less than 3 things, alignment with rings break... #sadpanda
- Entropy pool bar for crypto nerds may be arb and can be removed. Delete line with
entropy_bar
etc. - You might prefer not to see how often errors and warnings are spat out by syslog. Delete line with
{texecpi 60 ~/.conky/seamod/syslog-err-feed.sh}
While if_up
looks simpler, conky's if_up
object triggers a seemingly benign stream of SIOCGIFADDR: Cannot assign requested address
errors when used with the if_up_strictness = 'address'
config option.
${ip_up eth0}
is commented out and replaced with a more cumbersome (but reliable) option ${if_match "${addr eth0}" != "No Address"}
as the workaround.
Conky always displays on the rightmost screen's edge, given many desktops and graphics drivers setup the display as one large X screen and resolution.
- The
xinerama_head
option is supposed to help pin/dock the window to the first screen, but requires a very recent version of conkey (and Ubuntu 16.04 LTS only packaged v1.10.1 without the fix) - Example issue here and here.
It's admittedly tedious for users with differing hardware to have to tweak conkyrc.lua
and manually adjust spacing.
I assume that, for performance reasons, the original lua code to setup and render the rings was done statically and configured once-off, hence it's non-trivial handling platform differences. A major re-write would try to allow the number of rings to adjust according to:
- Number of cores the user has.
- Scale the core ring size according to current core frequency, .e.g.
- Take into account 100% at 800MHz frequency is not the same as 100% at 2800MHz frequency.
- Number of file-system partitions the user wants to monitor.
Leverage this info to scale the size of the CPU wring so that only 100% at max frequency produces a full ring
$ cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
800000
$ cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
3800000
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
3051671
Other considerations:
- CPU base frequency (not same as max/turbo boost), e.g. 2.8 GHz vs 3.8 GHz
- CPU cores versus threads
Depends on fully refactoring the lua code to define and draw rings dynamically upon every refresh.
A ring showing the memory use is quite static and boring. That's easily reflected by a simple flat bar or percentage stat. Graphing memory read and write access would be more interesting.
Similar to memory todo above, graphing the read and write per storage device in the ring would be interesting.
For storage, memory and network IO, often there's a low level of activity which means the rings or graph levels are under utilised. A logarithmic scale could help stretch out smaller values.
Currently, no GPU stats are utilisation is shown.
Click here to see the original theme and screenshots. Click here for repo with previous version