X11
視窗管理器(或 X11)如何處理工作列?
我正在使用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 視窗都會成為一個停靠欄,並在生成時正確定位。