X11

視窗管理器(或 X11)如何處理工作列?

  • March 15, 2022

我正在使用openbox和plank。每當我打開(並最大化)應用程序時,視窗將自動避免與木板區域發生碰撞。

我的問題是,是否可以將視窗指定為“工作列”?例如,我可以將記事本設置為佔螢幕寬度的 25%,而我打開的其他任何內容(包括其他記事本實例)會自動最大化到其餘 75% 的區域嗎?

工作列客戶端通常使用_NET_WM_STRUT屬性來告訴符合EWMH的視窗管理器它希望自己獨占某些螢幕真實狀態。

_NET_WM_STRUT, left, right, top, bottom, CARDINAL[4]/32

此屬性等效於 _NET_WM_STRUT_PARTIAL 屬性,其中所有起始值為 0,所有結束值為邏輯螢幕的高度或寬度。

_NET_WM_STRUT_PARTIAL, left, right, top, bottom, left_start_y, left_end_y, right_start_y, right_end_y, top_start_x, top_end_x, bottom_start_x, bottom_end_x, CARDINAL[12]/32

該屬性包含 4 個基數,指定螢幕每個邊框處保留區域的寬度,另外還有 8 個基數,指定對應於四個支柱中的每一個的開始和結束。

然後,要為給定視窗(以下稱為dock)保留 300 像素的寬度,請執行

xprop -f _NET_WM_STRUT 32c -set _NET_WM_STRUT '300, 0, 0, 0'

並點擊該視窗;現在普通視窗應該被限製到剩餘空間,即使最大化。

這不會自動將停靠的視窗定位到其保留空間。不過,您可以使用 Xdotool 自動執行該過程:

xlogo  #Dock window example
xprop -id "$(xdotool search xlogo)" -f _NET_WM_STRUT 32c -set _NET_WM_STRUT '300, 0, 0, 0'
xdotool search xlogo windowmove 0 0 windowsize 300 100%

Icewm 是一個巧妙地抽象了這個任務的視窗管理器。見man icewm-winoptions。所有你需要的是

==> ~/.icewm/winoptions <==
xlogo.layer: Dock
xlogo.geometry: 300x700+0+0

這樣每個新的 Xlogo 視窗都會成為一個停靠欄,並在生成時正確定位。

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