Como fazer um textclock awesomewm refletir a mudança do fuso horário?

5

Estou usando o widget awful.widget.textclock para exibir a hora no Awesome WM no Arch Linux e estou usando um programa chamado tzupdate para atualizar automaticamente o horário do meu sistema de acordo com a geolocalização periodicamente.

Eu viajo com frequência, então achei que seria bom automatizar isso. No entanto, o widget de textclock não altera a hora a menos que eu reinicie Awesome (ou relog / restart). Existe algo que eu poderia adicionar no script lua para fazer o widget atualizar o fuso horário?

tzupdate está funcionando bem. Eu tenho isso em um temporizador de systemd que atualiza o fuso horário a cada cinco minutos. O fuso horário do sistema é alterado dessa maneira. A saída de timedatectl mostra imediatamente o fuso horário atualizado e a saída do comando date exibe corretamente a hora local atualizada correta.

No entanto, como mencionado acima, o Awesome não percebe essa mudança de fuso horário até que eu reinicie ( Ctrl Mod R ) ou faça logout.

    
por JKav77 07.08.2014 / 23:22

1 resposta

3

Abaixo está um widget textclock.lua atualizado que responde às alterações de fuso horário no tempo de execução. Eu substitui o arquivo /usr/share/awesome/lib/awful/widget/textclock.lua . Eu também instalei o módulo luatz do repositório do github e movi a pasta luatz para /usr/share/lua/5.2/luatz para que o% co_de A função% lua encontra-a automaticamente.

/usr/share/awesome/lib/awful/widget/textclock.lua:

local setmetatable = setmetatable
local os = os
local textbox = require("wibox.widget.textbox")
local capi = { timer = timer }
local luatz = require("luatz")
local tzcache = require("luatz.tzcache")

--- Text clock widget.
-- awful.widget.textclock
local textclock = { mt = {} }

--- Create a textclock widget. It draws the time it is in a textbox.
-- @param format The time format. Default is " %a %b %d, %H:%M ".
-- @param timeout How often update the time. Default is 60.
-- @return A textbox widget.
function textclock.new(format, timeout)
    local format = format or " %a %b %d, %H:%M "
    local timeout = timeout or 60

    local w = textbox()
    local timer = capi.timer { timeout = timeout }
    timer:connect_signal("timeout", function() 
        tzcache.clear_tz_cache()
        w:set_markup(os.date("!"..format, luatz.time_in())) 
    end)
    timer:start()
    timer:emit_signal("timeout")
    return w
end

function textclock.mt:__call(...)
    return textclock.new(...)
end

return setmetatable(textclock, textclock.mt)
    
por 15.08.2014 / 02:13