Arch-Linux
如何讓 awesomewm textclock 反映時區變化?
我正在使用該
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)