平鋪窗口合成器雜談
玩linux 有4-5年了,今天來(lái)簡(jiǎn)單梳理一下linux上我用過(guò)的一些平鋪窗口合成器,也順便說(shuō)一下最近先換的一個(gè)合成器--niri
和平鋪窗口綁定最多的標(biāo)簽就是 -- “效率提升”,“增加屏幕利用率”,我最初可能就是應(yīng)為這些標(biāo)簽被吸引來(lái)的。當(dāng)然可能還有vim的一部分原因(感覺(jué)vimer最終都會(huì)轉(zhuǎn)到平鋪窗口)。
那些年我用過(guò)的非平鋪的wm
可能很多人然最開(kāi)始的linux wm是ubunte的gnome.不過(guò)我最開(kāi)始用的是xfce,沒(méi)錯(cuò)kali的xfce 。 因?yàn)榇髮W(xué)學(xué)的是信息安全專業(yè),so,kali就是我入門(mén)的linux, 當(dāng)時(shí)也是莫名其妙的選了xfce(當(dāng)時(shí)也不懂什么wm)。
總之在用kali這一年左右,中間偶爾體驗(yàn)了一下deepin的dde和 ubuntu的gnome.最后感覺(jué)用不習(xí)慣(gnome是不習(xí)慣,dde則是存在一個(gè)休眠后無(wú)法點(diǎn)亮顯示器的bug)。
后面感覺(jué)debian系的系統(tǒng)裝包有些不方便,同時(shí)也是受到一點(diǎn)arch邪教的影響。最終換到arch的子分支 manjaro上,manjaro應(yīng)該是我用過(guò)最長(zhǎng)時(shí)間的發(fā)行版。用manjaro那時(shí)候?qū)嶋H上也不懂wm,只是manjaro默認(rèn)的好像就是kde環(huán)境(我碰巧下載的鏡像是kde的)。
用了一段時(shí)間的kde后. 在B站上看到平鋪wm, 當(dāng)時(shí)我已經(jīng)是vimer了,可以用hjkl切換窗口,讓我大受震撼,然后就開(kāi)始了我的平鋪之旅。
這些年我用過(guò)的x11平鋪wm
最開(kāi)始用平鋪,我想試試dwm(很瘋狂是把,不會(huì)c,去玩dwm),很快我就換到i3了,dwm不是人玩的,改個(gè)配置還得重新編譯再重啟(當(dāng)時(shí)還不知道有注銷這個(gè)東西,很神奇吧),然后用了快一年左右。當(dāng)時(shí)實(shí)習(xí)在公司用自己的電腦用的就是i3(說(shuō)實(shí)話最開(kāi)始用i3 我還不知道i3可以把多個(gè)窗口合并到一起,用標(biāo)簽切換)。
我從i3轉(zhuǎn)移到dwm是因?yàn)樵谖疑习嗟哪骋惶?,我更新了一下我的manjaro系統(tǒng),i3打不開(kāi)了,得虧我系統(tǒng)里面有我正在配置的yaocccc大佬改的dwm,然后臨時(shí)從i3切換到dwm。
當(dāng)時(shí)yaocccc大佬還更新得很頻繁,最開(kāi)始的時(shí)候c佬還沒(méi)開(kāi)發(fā)出overview功能,用的時(shí)候就感覺(jué)挺好的,再加上overview功能,簡(jiǎn)直是夢(mèng)中情wm,再加上后面開(kāi)發(fā)的最大化窗口功能,說(shuō)實(shí)話直到現(xiàn)在我都感覺(jué)dwm是最好的wm,還有很多功我現(xiàn)在都很需要,可惜我后面用的wm的作者沒(méi)有實(shí)現(xiàn)。
近些年我用的wayland平鋪wm
計(jì)劃總是趕不上變化,一年后,我畢業(yè)了,感覺(jué)每次背著我2-3斤的電腦外出太累了,想換個(gè)輕薄本。然后我買(mǎi)了個(gè)二手的紅米本。很遺憾它是一款hidpi的本子,當(dāng)我裝上系統(tǒng)之后我就發(fā)現(xiàn)dwm的窗口太小了,而且用xrand調(diào)分辨率之后字體會(huì)模糊,字體調(diào)大的話,我另外一塊1080P的顯示器字體也會(huì)很大。
我被迫從dwm再次換到kde,并且也是用上了wayland.那時(shí)差不多是wayland元年(我是這么定的,基本上是從這一年開(kāi)始wayland達(dá)到勉強(qiáng)可用的狀態(tài),并且xwayland的bug也沒(méi)多到不能容忍)。我以為差不多可以止步在kde了,當(dāng)時(shí)kde剛推出plasma6 ,非常大的升級(jí),從qt5升級(jí)到qt6 ,我之前用的kde配置基本上都失效了(很神奇,我還保存著幾年前kde的配置),然后我整了一套kde plasma6的配置。
起初用plasma6感覺(jué)還可以(我也在偶爾折騰dwm的hidpi和其他wm, 大體上的想法是--懶得折騰了),但是后面發(fā)現(xiàn)kde有個(gè)問(wèn)題,他的plasma-shell好像有點(diǎn)內(nèi)存泄漏,我一天不重啟plasma-shell的內(nèi)存就差不到有1G了(好懷念dwm??)。
然后我毅然決然換到hyprland, 清爽,絲滑,但是很快我發(fā)現(xiàn)hyprland沒(méi)有overview功能,也沒(méi)有隱藏窗口。當(dāng)時(shí)在github上發(fā)現(xiàn)了hycov這款插件可以實(shí)現(xiàn)overview功能,剛開(kāi)始用還好,后面hyprland升級(jí),hycov的作者放棄了支持。
主要還是hyprland此時(shí)正處在重大變化的節(jié)點(diǎn)(作者非常瘋狂的放棄wlroot,并且還有激進(jìn)的C++版本更新,幾乎每個(gè)月都會(huì)修改核心api)。最開(kāi)始o(jì)verview作者棄坑的時(shí)候,我嘗試接手了一下,修改了少數(shù)幾個(gè)地方,勉強(qiáng)能用,偶爾會(huì)有一些小bug。
但是頂不住hyprland激進(jìn)的更新策略,基本上隔2-3個(gè)月我就的在維護(hù)一下,差不多摸爬滾打有大半年,在加之hyprland偶爾的不能啟動(dòng)(一般發(fā)生在hyprland更新后,有的版本會(huì)因?yàn)閎ug啟動(dòng)失?。?,我決定放棄hyprland了。
我選的替代品是swayfx,sway的優(yōu)化版, 不過(guò)hyprland還是太絲滑了,swayfx和hyprland比還是差很多,所以在最近的幾個(gè)月,我基本上是在hyprland的sway之間切換著用。
當(dāng)然sway是wayland上i3的實(shí)現(xiàn),完全兼容i3的配置,hypralnd我也用hy3來(lái)模擬一些i3的操作邏輯。
niri
為什么要單獨(dú)起一個(gè)標(biāo)題來(lái)說(shuō)niri呢?
我感覺(jué)niri是一種全新的平鋪窗口合成邏輯,無(wú)論是x11下的dwm,i3,還是wayland下的hyprland,sway 或者是其他我沒(méi)有提到的窗口合成器,他們創(chuàng)建窗口的方式都是以屏幕為基礎(chǔ),第一個(gè)窗口可能是占滿整個(gè)屏幕,第二個(gè)窗口創(chuàng)建時(shí)則會(huì)修改第一個(gè)窗口的大小,把第一個(gè)窗口寬度/高度變小一點(diǎn),然后在生成一個(gè)新的窗口(i3系列的可能還有標(biāo)簽這個(gè)邏輯),而niri的邏輯則是,把屏幕想象成無(wú)限寬的(高度是固定的),物理屏幕是那個(gè)無(wú)限寬屏幕的一小段,然后可以通過(guò)滾動(dòng)那個(gè)無(wú)限寬的屏幕,來(lái)切換改變物理屏幕顯示的窗口。
由于niri的邏輯屏幕是無(wú)限寬的,所以niri的工作區(qū)不是左右分布,而是上下分布。對(duì)于多顯示器來(lái)說(shuō),niri并不會(huì)把兩個(gè)屏幕連在一起,兩個(gè)屏幕類似是兩個(gè)工作區(qū),副屏并不會(huì)作為主屏幕的延伸。
同時(shí)niri自己也實(shí)現(xiàn)了類似overview的功能,不過(guò)和上面提到的overview功能不同,niri是看到全局的工作區(qū),在overview里面,你可以看到每個(gè)工作區(qū)的那個(gè)窗口‘卷軸’。
目前來(lái)看niri唯一的缺點(diǎn)是還沒(méi)有實(shí)現(xiàn)窗口模糊的功能,對(duì)于透明的終端窗口,沒(méi)有模糊效果。
我用過(guò)的窗口合成器排名
dwm > niri > hyprland > sway > i3 > kde > xfce > gnome > dde

浙公網(wǎng)安備 33010602011771號(hào)