Arch-Linux

如何讓 awesomewm textclock 反映時區變化?

  • August 15, 2014

我正在使用該awful.widget.textclock小元件在 Arch Linux 上的 Awesome WM 中顯示時間,並且我正在使用一個名為的程序tzupdate來定期根據地理位置自動更新我的系統時間。

我經常旅行,所以我認為自動化這個會很好。但是,除非我重新啟動 Awesome(或重新登錄/重新啟動),否則 textclock 小元件不會更改時間。我可以在 lua 腳本中添加一些東西來使小元件刷新時區嗎?

tzupdate工作正常。我有一個systemd計時器,每五分鐘更新一次時區。這樣就成功更改了系統的時區。immediate的輸出timedatectl顯示更新的時區,date 命令的輸出正確顯示正確的更新本地時間。

但是,如上所述,在我重新啟動 ( Ctrl``Mod``R) 或註銷之前,Awesome 無法注意到此時區更改。

下面是一個更新的textclock.lua小元件,它在執行時響應時區更改。我替換了文件/usr/share/awesome/lib/awful/widget/textclock.lua。我還從這個 github repoluatz安裝了模組並將文件夾移動到,以便函式自動找到它。luatz``/usr/share/lua/5.2/luatz``lua 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)

引用自:https://unix.stackexchange.com/questions/149099