awesomewm textclock이 시간대 변경을 반영하도록 만드는 방법은 무엇입니까?

awesomewm textclock이 시간대 변경을 반영하도록 만드는 방법은 무엇입니까?

awful.widget.textclock저는 Awesome WM에서 시간을 표시하기 위해 Arch Linux에서 위젯을 사용하고 있고 , tzupdate지리적 위치에 따라 주기적으로 시스템 시간을 자동으로 업데이트한다는 프로그램을 사용하고 있습니다.

저는 여행을 많이 다니기 때문에 이것을 자동화하면 좋겠다고 생각했습니다. 하지만 텍스트 시계 위젯은 Awesome을 다시 시작하거나 다시 로그인하거나 다시 시작하지 않는 한 시간을 변경하지 않습니다. 위젯이 시간대를 새로 고치도록 하기 위해 lua 스크립트에 추가할 수 있는 것이 있습니까?

tzupdate잘 작동합니다. systemd5분마다 시간대를 업데이트하는 타이머가 있습니다 . 이러한 방식으로 시스템 시간대가 성공적으로 수정되었습니다. 출력에는 timedatectl업데이트된 시간대가 즉시 표시되고, date 명령의 출력에는 업데이트된 올바른 현지 시간이 올바르게 표시됩니다.

CtrlModR하지만 위에서 언급한 것처럼 Awesome은 다시 시작( )하거나 로그아웃할 때까지 이 영역 변경을 알 수 없습니다 .

답변1

textclock.lua다음은 런타임 시 시간대 변경에 응답하는 업데이트된 위젯입니다 . 파일을 교체했습니다 /usr/share/awesome/lib/awful/widget/textclock.lua. luatz모듈 도 설치했어요이 github 저장소기능이 자동으로 찾을 수 있도록 luatz폴더를 다음으로 이동하세요 ./usr/share/lua/5.2/luatzlua require

/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)

관련 정보