X-Server

是否可以使用 xsetroot 和 dwm 以不同的時間間隔設置頂部和底部條?

  • January 3, 2015

我正在使用帶有雙重狀態更新檔的dwm。除了頂部的標準欄外,這還會在螢幕底部添加一個狀態欄。每個欄中的文本在 ~/.xinitrc 中設置(例如),如下所示:

xsetroot -name “top text;bottom text”

bash 中有沒有辦法以不同的間隔設置頂部文本和底部文本?例如,我有一個topbar顯示系統資訊的腳本,例如 uptime 命令的輸出,以及一個bottombar顯示天氣、電池狀態等資訊的腳本。

目標是讓頂部欄每秒更新一次,而底部欄每分鐘更新一次,因為它的資訊來自更昂貴的程序(例如查詢我的音樂播放器、檢查電池狀態等)。現在我的 ~/.xinitrc看起來像這樣:

while true; do
   bottomdisp=$(bottombar)
   for s in {1..60}
   do
       xsetroot -name "$(topbar);$bottomdisp";
   sleep 1;
   done
done &

xbindkeys
( ( sleep 5 && /usr/bin/xscreensaver -no-splash -display :0.0 ) & )

exec rundwm

不過,這會每秒更新一次。有沒有更簡單的方法來做到這一點?我能想到的想法是

  1. 也許是一種告訴 xsetroot 保留底欄中的內容的方法?作為最後的手段,我可​​能會調整dualstatus更新檔中的一些程式碼,以允許它在通過類似的東西時保留頂部/底部欄的目前狀態xsetroot -name ';bottom text',但這並不理想,因為我的 C 生鏽了,我仍然使用上面的命令有時清除酒吧。
  2. 使用 cronjob 更新底部欄中的文本記憶體,並每分鐘執行一次。即使頂部/底部欄會每秒顯示一次,但實際上只有頂部欄會每秒發生變化。

還有其他方法嗎?在我錯過的bash中是否有一種簡單的(r)方法可以做到這一點?

我建議讓 bash 跟踪您之前的底部字元串,並且每分鐘僅更新一次(噹噹前時間模 60 的秒數在此程式碼中等於 0 時)。

while true; do 
   (( 10#$(date +%s) % 60 )) || bottomdisp=$(date)
   xsetroot -name "$(topbar);$bottomdisp";
   sleep 1;
done  &

這種語法可以很容易地修改次要(或具有多個)間隔的頻率,例如,只需將 60 更改為 15 即可每分鐘更新 4 次。

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