DWM
dwm(Dynamic Window Manager)由suckless.org開源社區主導,是一款可以在linux上運行的動態窗口管理器(wm)。其他知名的如i3wm,awesome均是基於dwm改編。
軟件名稱 | 軟件平臺 | 上線時間 | 最近更新時間 | 軟件語言 | 開發商 | 軟件權授 | 軟件版本 | 軟件大小 |
---|---|---|---|---|---|---|---|---|
dwm | 類Unix平臺 | 2011年11月4日 | 2019年2月3日 | 英文 | suckless.org | MIT/X Consortium license | 6.2 | 66 KB |
1.產生背景
許多(開源)黑客爲獲得大量代碼而感到自豪,因爲他們相信自己編寫的代碼行越多,取得的進步就越大。他們取得的進步越多,他們就越熟練。這簡直是一種錯覺。
實際上,大多數黑客並不在乎代碼質量。因此,如果他們得到解決問題的工作,他們就會堅持下去。如果在整個生命週期中將這種軟件開發應用於相同的源代碼,那麼我們將剩下大量代碼,完全固定的代碼結構和有缺陷的系統設計。這是因爲在開發過程中缺乏概念上的清晰性和完整性。
代碼複雜性臃腫,難以使用且完全不一致的軟件的根源,是使用複雜的代碼,問題將以次優的方式解決,寶貴的資源被無休止地束縛着,性能減慢了,並且漏洞變得司空見慣。唯一的解決方案是廢棄整個項目並從頭開始重寫它。
壞消息:高質量的重寫很少發生,因爲黑客爲寫大量代碼而感到自豪。他們認爲他們瞭解代碼的複雜性,因此無需重寫它。他們將自己視爲策劃者,瞭解其他人永遠都希望掌握的內容。對於這些類型,複雜的軟件是理想的選擇。
巧妙的想法很簡單。巧妙的軟件很簡單。簡單性是Unix哲學的核心。您刪除的代碼行越多,您取得的進展就越多。隨着軟件中代碼行數的減少,您變得越熟練,軟件的吸引力就越小。[1]
2.發展歷程
3.主要功能
基礎功能鍵
Mod1Mask – 鍵盤左邊的Alt鍵
Mod4Mask – 鍵盤上的Win鍵
這個兩個功能鍵是dwm的靈魂所在。如果您想讓您的手指不離開鍵盤,那麼您應該嘗試着自己定義快捷鍵。而dwm默認綁定的一套快捷鍵是使用Mod1Mask,但是與很多IDE衝突。
不排除您覺得Mod1Mask更爲方便。因此您完全可以定義兩套快捷鍵。Mod4Mask用於啓動一些軟件,而Mod1Mask用於切換桌面。Mod4Mask用於啓動軟件,這個操作不會太頻繁;Mod1Mask用於切換桌面,這樣在使用dwm的過程中,您可以使用大拇指+數字鍵的組合很方便在不同的tag之間切換。
操作邏輯
dwm有3種模式:
- tiled layout
- floating layout
- monocle layout
tiled layout 是指軟件的窗體可以自由的調節大小,位置。
floating layout 中,dwm維護了一個棧,這個模式下開過多的窗口會導致dwm崩潰。
monocle layout 中,軟件被最大化顯示到一個tag中。
默認鍵位綁定
以下的Alt指鍵盤左邊的Alt
- Alt + 1~9 切換到tag 1~ 9
- Alt + Shift + c 關閉當前窗口
- Alt + Shift + 1~9 把當前窗口移動到tag 1~9
- Alt + Shift + 0 把當前窗口移動到所有tag
- Alt + Shift + q 銷燬此dwm進程
float layout:
- Alt + Enter 切換窗體棧的主次位置
- Alt + j/k 切換聚焦窗體
tiled layout:
- Alt + j/k 上下切換窗體
monocle layout:
-
Alt + j/k 上下切換窗體
-
Alt + p 啓動程序
- 您需要額外安裝dmenu。
-
Alt + Shift + Return 啓動終端st
*您需要額外安裝st。
三個白色終端的問題
如果您沒有這個問題請跳過。
如果您遇到了這個問題,請編輯/etc/X11/xinit/xinitrc,並註釋掉這三行,就像這樣:
#xclock -geometry 50x50-1+1 &
#xterm -geometry 80x50+494+51 &
#xterm -geometry 80x20+494-0 &
實現透明
您需要額外安裝窗口渲染器,並在後臺默認啓動。如:xcompmgr,picom。
解決IDEA不能正常顯示的問題
編輯文件~/.xinitrc。如果沒有,請創建它。
加入下面三行。注意,您需要先安裝wmname。這個軟件是suckless.org爲了解決Java應用程序在dwm下無法正常顯示的問題而創建的。您可以在您的包裹管理器中下載。或者在suckless.org官網下載源代碼,編譯安裝。[2]
export _JAVA_AWT_WM_NONREPARENTING=1
exec $1
wmname LG3D
設置右邊的狀態信息
一個簡單的設置如下圖:
您可以在~/.xinitrc中添加如下shell命令:
while true; do
# do some things
######################################################
#電池
left=$(cat /sys/class/power_supply/BAT1/capacity)%
status=$(cat /sys/class/power_supply/BAT1/status)
if [[ $status == D* ]];then
status='未充電'
else
status='充電中'
fi
xsetroot -name "$(date +"%F %R" )[$status]:$left"
sleep 2s
######################################################
# do some things end
done &
此腳本可以每隔2s動態的刷新時間和電池的狀態信息。
您也可以定義其他的狀態信息。