0

I am attempting to convert an older conky widget to the new syntax of 1.10+, but I can't for the life of me figure out why it won't run. I've ran through everything to make sure it was converted correctly but it still won't run the widget I want. Here is the code:

conky.config = {
-- Conky settings
    background = false,
    update_interval = 1,

    cpu_avg_samples = 2,
    net_avg_samples = 2,

    override_utf8_locale = true,

    double_buffer = true,
    no_buffers = true,

    text_buffer_size = 2048,
        --imlib_cache_size = 0,

    temperature_unit = 'celsius',

-- With class override, gets images to display properly (black bg)
  own_window_argb_visual = true,
    own_window_argb_value = 0,

-- Window specifications
  own_window_class = override,
    own_window = true,
-- XFCE4 = desktop, sinon 'normal'
    own_window_type = 'normal',
    own_window_transparent = true,

-- XFCE4 - undecorate not working
    own_window_hints = 'sticky,skip_taskbar,skip_pager,below',

    border_inner_margin = 0,
    border_outer_margin = 0,

    minimum_width = 520,
    minimum_height = 600,
    maximum_width = 520,

    alignment = 'top_right',
    gap_x = 20,
    gap_y = 112,

-- Graphics settings #
    draw_shades = false,
    draw_outline = false,
    draw_borders = false,
    draw_graph_borders = false,

-- useless
    default_shade_color = 'red',
    default_outline_color = 'green',

-- Text settings #
    use_xft = true,
    override_utf8_locale = true,
    font = 'Play:normal:size=8',
    xftalpha = 0.9,
    uppercase = false,

-- TEXT color
    default_color = '333333',

    color0 = 'a992e6',
    color1 = '323232',

    lua_load = './rings-v2_gen.lua',
    lua_draw_hook_pre = 'conky_main',

    diskio_avg_samples = 2,
};

conky.text = [[
${voffset 12}${color1}${goto 106}${freq_g cpu0} Ghz${alignr 330}${hwmon 1 temp 1} °C
${voffset 16}${color1}${goto 106}${freq_g cpu0} Ghz${alignr 330}${acpitemp} °C

${voffset -3}${goto 120}${color1}CPU 1${alignr 330}${color1}${cpu cpu1}%
${voffset -3}${goto 120}${color1}CPU 2${alignr 330}${color1}${cpu cpu2}%
${voffset -3}${goto 120}${color1}CPU 3${alignr 330}${color1}${cpu cpu3}%
${voffset -3}${goto 120}${color1}CPU 4${alignr 330}${color1}${cpu cpu4}%
${voffset -3}${goto 120}${color1}CPU 5${alignr 330}${color1}${cpu cpu5}%
${voffset -3}${goto 120}${color1}CPU 6${alignr 330}${color1}${cpu cpu6}%
${goto 49}${voffset 12}${color1}${top name 1}${alignr 306}${top cpu 1}%
${goto 50}${color1}${top name 2}${alignr 306}${top cpu 2}%
${goto 50}${color1}${top name 3}${alignr 306}${top cpu 3}%
${font Michroma:size=10}${color0}${goto 80}${voffset 4}CPU

${voffset -130}${goto 378}${font}${color1}${top_io name 1}${alignr 30}${top_io io_write 1}%
${goto 378}${voffset -1}${color1}${top_io name 2}${alignr 30}${top_io io_write 2}%
${goto 378}${voffset -1}${color1}${top_io name 3}${alignr 30}${top_io io_write 3}%
${goto 370}${voffset 4}${color1}disk writes${alignr 30}${diskio_write}%
${goto 370}${color1}disk reads${alignr 30}${diskio_read}%
${font Michroma:size=10}${color0}${goto 418}${voffset 1}IO WAIT

${font Michroma:size=10}${color0}${goto 394}${voffset 59}MEMORY
${font}${goto 324}${voffset -4}${color1}${top_mem name 1}${alignr 40}${top_mem mem 1}%
${goto 324}${color1}${top_mem name 2}${alignr 40}${top_mem mem 2}%
${goto 324}${color1}${top_mem name 3}${alignr 40}${top_mem mem 3}%
${voffset 8}${goto 348}${color1}SWAP${alignr 40}${color1}${swap} / ${color1}${swapmax}
${voffset 1}${goto 348}${color1}RAM ${alignr 40}${color1}${mem} / ${color1}${memmax}

${goto 70}${voffset -81}/${color1}${alignr 310}${fs_used /} / ${fs_size /}
${goto 70}${voffset -1}/boot/efi${color1}${alignr 310}${fs_used /boot/efi} / ${fs_size /boot/efi}
${goto 70}${voffset -1}/mnt/nvme0n1p3${color1}${alignr 310}${fs_used /mnt/nvme0n1p3} / ${fs_size /mnt/nvme0n1p3}
${font Michroma:size=10}${color0}${goto 68}${voffset 8}FILESYSTEM

${font Michroma:size=10}${color0}${voffset 26}${goto 324}INTERNET INFO
${font}${color1}${alignr 54}${voffset -8}WiFi     ${color1}${wireless_essid wlan0}
${goto 298}${voffset 2}Up${goto 370}${color1}${totalup wlan0} / ${color1}${upspeed wlan0}
${goto 298}${color1}Down${goto 370}${color1}${totaldown wlan0} / ${color1}${downspeed wlan0}
${goto 300}${voffset 4}Local IP${goto 370}${addr wlan0}
${goto 300}${voffset 0}Public IP${goto 370}${execi 3600 wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'}
${voffset -24}

${font Michroma:size=10}${alignr 300}${voffset -50}${color0}${time %a} ${color0}${time %x}
${font Michroma:size=18}${alignr 318}${color1}${voffset -4}${time %H}:${time %M}

${font Michroma:bold:size=11}${color0}${voffset 90}${alignc}${execi 3600 awk -F '=' '/PRETTY_NAME/ { print $2 }' /etc/os-release | tr -d '"'}
]];

As well as the rings-v2_gen.lua file which the widget calls

--[[
Ring Meters by londonali1010 (2009)
Modified by La-Manoue (2016)
Automation template by popi (2017)

This script draws percentage meters as rings. It is fully customisable; all options are described in the script.

IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement near the end of the script uses a delay to make sure that this doesn't happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num > 5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num > 3; conversely if you update Conky every 0.5s, you should use update_num > 10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.

To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
    lua_load ~/conky/rings-v2_local.lua
    lua_draw_hook_pre ring_stats
    
Changelog:
+ v2.1.1 -- addedd IO_WAIT ring
+ v2.1.0 -- templated for automation, 
+ v2.0.0 -- Changed some values for ArchLinux
+ v1.2.2 -- Added color change for near-limits values / modified placement
+ v1.2.1 -- Fixed minor bug that caused script to crash if conky_parse() returns a nil value (20.10.2009)
+ v1.2 -- Added option for the ending angle of the rings (07.10.2009)
+ v1.1 -- Added options for the starting angle of the rings, and added the "max" variable, to allow for variables that output a numerical value rather than a percentage (29.09.2009)
+ v1.0 -- Original release (28.09.2009)

]]

normal="0xbb07d7"
warn="0xff7200"
crit="0xff000d"

-- seulement quand fond nécessaire
corner_r=35
bg_colour=0x3b3b3b
bg_alpha=0.2

-- blue     | 0xbb07d7
-- red      | 0xff1d2b
-- green    | 0x1dff22
-- pink     | 0xff1d9f
-- orange   | 0xff8523
-- skyblue  | 0x008cff
-- darkgray | 0x323232

settings_table_io = {
    {
        name='top_io io_perc 1',
        arg='',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.8,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=370, y=98,
        radius=55,
        thickness=12,
        start_angle=120,
        end_angle=360
    },
    {
        name='top_io io_perc 2',
        arg='',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.6,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=370, y=98,
        radius=42,
        thickness=11,
        start_angle=120,
        end_angle=360
    },
    {
        name='top_io io_perc 3',
        arg='',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.4,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=370, y=98,
        radius=30,
        thickness=10,
        start_angle=120,
        end_angle=360
    }
}

settings_table = {
    {
        name='hwmon',
        arg='1 temp 1',
        max=110,
        bg_colour=0x3b3b3b,
        bg_alpha=0.8,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=200, y=120,
        radius=97,
        thickness=4,
        start_angle=0,
        end_angle=240
    },

    {
        name='cpu',
        arg='cpu1',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.7,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=200, y=120,
        radius=88,
        thickness=10,
        start_angle=0,
        end_angle=240
    },
    {
        name='cpu',
        arg='cpu2',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.633333333333,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=200, y=120,
        radius=77,
        thickness=9.5,
        start_angle=0,
        end_angle=240
    },
    {
        name='cpu',
        arg='cpu3',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.566666666667,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=200, y=120,
        radius=66.5,
        thickness=9.0,
        start_angle=0,
        end_angle=240
    },
    {
        name='cpu',
        arg='cpu4',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.5,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=200, y=120,
        radius=56.5,
        thickness=8.5,
        start_angle=0,
        end_angle=240
    },
    {
        name='cpu',
        arg='cpu5',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.433333333333,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=200, y=120,
        radius=47.0,
        thickness=8.0,
        start_angle=0,
        end_angle=240
    },
    {
        name='cpu',
        arg='cpu6',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.366666666667,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=200, y=120,
        radius=38.0,
        thickness=7.5,
        start_angle=0,
        end_angle=240
    },
    {
        name='memperc',
        arg='',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.8,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=340, y=234,
        radius=60,
        thickness=15,
        start_angle=180,
        end_angle=420
    },
    {
        name='swapperc',
        arg='',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.4,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=340, y=234,
        radius=45,
        thickness=12,
        start_angle=180,
        end_angle=420
    },

    {
        name='fs_used_perc',
        arg='/',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.8,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=220, y=280,
        radius=40,
        thickness=10,
        start_angle=0,
        end_angle=240
    },
    {
        name='fs_used_perc',
        arg='/boot/efi',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.6,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=220, y=280,
        radius=29,
        thickness=9,
        start_angle=0,
        end_angle=240
    },
    {
        name='fs_used_perc',
        arg='/mnt/nvme0n1p3',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.4,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=220, y=280,
        radius=19,
        thickness=8,
        start_angle=0,
        end_angle=240
    },

    {
        name='downspeedf',
        arg='wlan0',
        max=125000,
        bg_colour=0x3b3b3b,
        bg_alpha=0.8,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=290, y=345,
        radius=30,
        thickness=12,
        start_angle=180,
        end_angle=420
    },
    {
        name='upspeedf',
        arg='wlan0',
        max=125000,
        bg_colour=0x3b3b3b,
        bg_alpha=0.6,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=290, y=345,
        radius=17,
        thickness=11,
        start_angle=180,
        end_angle=420
    },
    {
        name='time',
        arg='%H',
        max=24,
        bg_colour=0x3b3b3b,
        bg_alpha=0.4,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=230, y=406,
        radius=10,
        thickness=6,
        start_angle=0,
        end_angle=240
    },
    {
        name='time',
        arg='%M',
        max=60,
        bg_colour=0x3b3b3b,
        bg_alpha=0.6,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=230, y=406,
        radius=19,
        thickness=9,
        start_angle=0,
        end_angle=240
    },
    {
        name='time',
        arg='%S',
        max=60,
        bg_colour=0x3b3b3b,
        bg_alpha=0.8,
        fg_colour=0xbb07d7,
        fg_alpha=0.8,
        x=230, y=406,
        radius=31,
        thickness=12,
        start_angle=0,
        end_angle=240
    },
--{{ BATTERY }}
    {
        name='kernel', --just to avoid unknown viariable '$' in console
        arg='',
        max=100,
        bg_colour=0x3b3b3b,
        bg_alpha=0.6,
        fg_colour=0xbb07d7,
        fg_alpha=0.6,
        x=274, y=464,
        radius=5,
        thickness=13,
        start_angle=0,
        end_angle=360
    },
}

require 'cairo'

function rgb_to_r_g_b(colour,alpha)
    return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

function draw_ring(cr,t,pt)

    local w,h=conky_window.width,conky_window.height
    
    local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
    local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']

    local angle_0=sa*(2*math.pi/360)-math.pi/2
    local angle_f=ea*(2*math.pi/360)-math.pi/2
    local t_arc=t*(angle_f-angle_0)

    -- Draw background ring

    cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
    cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
    cairo_set_line_width(cr,ring_w)
    cairo_stroke(cr)
    
    -- Draw indicator ring

    cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
    cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
    cairo_stroke(cr)        
end

function conky_ring_stats()
    -- 20170715 IO_WAIT
    local function setup_rings_io(cr,pt)
        local str=''
        local value=0
        
        local warn_value=50
        local crit_value=70

        str=string.format('${%s %s}',pt['name'],pt['arg'])
        iowait=0
        ioused=tonumber(conky_parse(str))
        if ioused>0 then 
            iowait=100 - ioused
        end
        value=tonumber(iowait)

        if value == nil then value = 0 end
        pct=value/pt['max']
        draw_ring(cr,pct,pt)
    end

    local function setup_rings(cr,pt)
        local str=''
        local value=0
        
        str=string.format('${%s %s}',pt['name'],pt['arg'])
        str=conky_parse(str)
        
        value=tonumber(str)
        if value == nil then value = 0 end
        pct=value/pt['max']
        
        draw_ring(cr,pct,pt)
    end

    if conky_window==nil then return end
    local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
    
    local cr=cairo_create(cs)   
    
    local updates=conky_parse('${updates}')
    update_num=tonumber(updates)

    if update_num>5 then
        for i in pairs(settings_table) do
                display_temp=temp_watch()
        setup_rings(cr,settings_table[i])
        end
        -- IO_WAIT
        for i in pairs(settings_table_io) do
        setup_rings_io(cr,settings_table_io[i])
        end
    end
   cairo_surface_destroy(cs)
  cairo_destroy(cr)
end

-- Contrôle de l'espace disque
function disk_watch()

    warn_disk=93
    crit_disk=98
    -- poser une boucle plus tard... pas simple

    disk=tonumber(conky_parse("${fs_used_perc /}"))
    if disk<warn_disk then
        settings_table[10]['fg_colour']=normal
    elseif disk<crit_disk then
        settings_table[10]['fg_colour']=warn
    else
        settings_table[10]['fg_colour']=crit
    end

    disk=tonumber(conky_parse("${fs_used_perc /boot/efi}"))
    if disk<warn_disk then
        settings_table[11]['fg_colour']=normal
    elseif disk<crit_disk then
        settings_table[11]['fg_colour']=warn
    else
        settings_table[11]['fg_colour']=crit
    end

    disk=tonumber(conky_parse("${fs_used_perc /mnt/nvme0n1p3}"))
    if disk<warn_disk then
        settings_table[12]['fg_colour']=normal
    elseif disk<crit_disk then
        settings_table[12]['fg_colour']=warn
    else
        settings_table[12]['fg_colour']=crit
    end


end

-- Contrôle de la température
function temp_watch()

    warn_value=70
    crit_value=80

    temperature=tonumber(conky_parse("${hwmon 1 temp 1}"))

    if temperature<warn_value then
        settings_table[1]['fg_colour']=normal
    elseif temperature<crit_value then
        settings_table[1]['fg_colour']=warn
    else
        settings_table[1]['fg_colour']=crit
    end
end

-- Battery color control
function battery_watch()

    warn_value=30
    crit_value=10

    --{{ BATTERY_WATCH }}

    if battery>warn_value then
        settings_table[index]['fg_colour']=normal
    elseif battery>crit_value then
        settings_table[index]['fg_colour']=warn
    else
        settings_table[index]['fg_colour']=crit
    end
end

-- Contrôle de l'interface active
-- choice to not probe network interface once conky is running. 
-- just call again create_conky.py to update if gateway interface has changed
--function iface_watch()
--
--    iface=conky_parse("${if_existing /proc/net/route enp1s0f2}enp1s0f2${else}wlan0${endif}")
--
--    settings_table[11]['arg']=iface
--    settings_table[12]['arg']=iface
--end

function conky_draw_bg()
    if conky_window==nil then return end
    local w=conky_window.width
    local h=conky_window.height
    local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, w, h)
    cr=cairo_create(cs)
    
    cairo_move_to(cr,corner_r,0)
    cairo_line_to(cr,w-corner_r,0)
    cairo_curve_to(cr,w,0,w,0,w,corner_r)
    cairo_line_to(cr,w,h-corner_r)
    cairo_curve_to(cr,w,h,w,h,w-corner_r,h)
    cairo_line_to(cr,corner_r,h)
    cairo_curve_to(cr,0,h,0,h,0,h-corner_r)
    cairo_line_to(cr,0,corner_r)
    cairo_curve_to(cr,0,0,0,0,corner_r,0)
    cairo_close_path(cr)
    
    cairo_set_source_rgba(cr,rgb_to_r_g_b(bg_colour,bg_alpha))
    cairo_fill(cr)
end


function conky_main()
    temp_watch()
    disk_watch()
    --iface_watch()
    -- if a battery is found
    --{{ BATTERY_ACTIVATE }}
    conky_ring_stats()
-- quand fond nécessaire
--    conky_draw_bg()
end

What do I need to edit to make this run properly?

5
  • What messages does conky write when you start it from the command line? – meuh Jan 19 at 10:03
  • Here's the terminal output: conky: desktop window (1e00009) is subwindow of root window (1e0) conky: window type - normal conky: drawing to created window (0x6800002) conky: drawing to double buffer conky: forked to background, pid is 11772 – FireballFoxtrot Jan 19 at 13:50
  • I thought that background = false would stop conky from forking to the background. Note that you have to wait about 10 seconds before the rings appear. Try conky -o to run in a window in case the root window is special. – meuh Jan 19 at 14:27
  • Ok, I got it to run but I can't seem to figure out how to disable the window border and title bar. How do I make the window border completely transparent? – FireballFoxtrot Jan 20 at 1:38
  • That depends on the window manager, so it might provide configuration options. man conky says you can add undecorated to own_window_hints, or you can try a different own_window_type of override or desktop. – meuh Jan 20 at 7:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.