awful.widget.textclock
私はAwesome WMで時間を表示するためにArch Linuxでウィジェットを使用しており、tzupdate
地理的位置に応じて定期的にシステム時間を自動的に更新するというプログラムを使用しています。
私は旅行をたくさん通っているので、これを自動化してほしいと思いました。しかし、テキストウォッチウィジェットは、Awesomeを再起動したり、再度ログインしたり、再起動しない限り、時間を変更しません。ウィジェットがタイムゾーンを更新するようにluaスクリプトに追加できるものはありますか?
tzupdate
うまくいきます。systemd
5分ごとにタイムゾーンを更新するタイマーがあります。このようにしてシステムタイムゾーンが正常に修正されました。出力にはtimedatectl
更新されたタイムゾーンがすぐに表示され、dateコマンドの出力には更新された正しい現地時間が正しく表示されます。
CtrlModRただし、上記のように、Awesomeは再起動()またはログアウトするまでこの領域の変更を知りません。
答え1
textclock.lua
以下は、実行時にタイムゾーンの変更に応答する更新されたウィジェットです。ファイルを交換しました/usr/share/awesome/lib/awful/widget/textclock.lua
。luatz
モジュールも取り付けました。このgithubリポジトリ機能が自動的に見つかるように、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)