在 Openbox 中配置 ToggleShowDesktop 只作用於指定層
我有一個
ToggleShowDesktop
. 當我按下 時Menu
,所有視窗都會最小化,我會看到我的桌面桌面(如預期的那樣):<keybind key="Menu"> <action name="ToggleShowDesktop"/> </keybind>
現在的問題是,我不想看到我的桌面。我
terminator
用作我的牆紙,即當我開始時terminator
,它被放置在下面的圖層上:<application name="terminator"> <focus>yes</focus> <layer>below</layer> <desktop>1</desktop> <position> <y>0</y> <x>0</x> </position> <skip_taskbar>yes</skip_taskbar> <maximized>true</maximized> </application>
是否可以進行配置
ToggleShowDesktop
以使其“下”層不受影響?即我只想最小化普通視窗,而不是terminator
. 換句話說,我希望終結者表現得像普通桌面一樣 - 不受ToggleShowDesktop
.我正在
Debian Wheezy
使用LXDE
.(使用@Suchipi建議的方法):
我從最初的問題中遺漏了一些細節,現在這些細節似乎畢竟是相關的:
我的設置有 2 個顯示器和 4 個虛擬桌面。所以我有“8 張桌面”要填寫
terminator
。根據我之前閱讀的內容,我假設這 8 個視窗必須是可區分的,所以我創建了 8 個符號terminator
,.ie:/usr/bin/terminator-wallpaper-1a -> terminator /usr/bin/terminator-wallpaper-1b -> terminator /usr/bin/terminator-wallpaper-2a -> terminator ...
實際上創建了 8 個不同的應用程序(具有不同的名稱)。
同樣,在
.config/openbox/lxde-rc.xml
我沒有 1 個,而是 8 個定義中:<application name="terminator-wallpaper-1a"> <desktop>1</desktop> <position> <monitor>1</monitor> </position> ... </application> <application name="terminator-wallpaper-1b"> <desktop>1</desktop> <position> <monitor>2</monitor> </position> ... </application> <application name="terminator-wallpaper-2a"> <desktop>2</desktop> <position> <monitor>1</monitor> </position> ... </application>
最後,在
/.config/autostart
我有 8個*.desktop
文件中,登錄後會自動啟動:/.config/autostar/terminator-wallpaper-1a.desktop /.config/autostar/terminator-wallpaper-1b.desktop /.config/autostar/terminator-wallpaper-2a.desktop
在我看來,這似乎過於復雜和不優雅,但我沒有看到任何更好的方法來做到這一點。
現在,當我按照@Suchipi 的說明進行操作時,會發生以下情況:
1)
devilspie
工作正常的部分。事實證明,我只需要一個涵蓋我所有 8 個視窗matches
的定義(代替is
):$ cat .devilspie/terminator.ds (if (matches (application_name) "terminator-wallpaper") (begin (wintype "desktop") ) )
我可以看到
obxprop
它按預期工作。$ obxprop | egrep '(_OB_APP|_NET_WM_WINDOW_TYPE)' _OB_APP_TYPE(UTF8_STRING) = "normal" _OB_APP_TITLE(UTF8_STRING) = "None" _OB_APP_CLASS(UTF8_STRING) = "Terminator-wallpaper-1" _OB_APP_NAME(UTF8_STRING) = "terminator-wallpaper-1" _OB_APP_ROLE(UTF8_STRING) = _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DESKTOP
2)現在的部分
xdotool
更棘手:首先,使用100%
解析度不起作用,即視窗消失(我沒有看到它)。使用靜態時:xdotool search --class "Terminator-wallpaper-1a" windowunmap --sync windowmap windowsize %1 1920 1056
這適用於桌面1顯示器1。但是當我為其他桌面執行它時,它沒有效果,即:
xdotool search --class "Terminator-wallpaper-2a" windowunmap --sync windowmap windowsize %1 1920 1056
實際上,它也適用於其他桌面,但前提是我在
xdotool
我想要影響的特定桌面上執行命令。即我必須切換到桌面2
並執行xdotool search --class "Terminator-wallpaper-2a"
,然後它才能工作。另外,我想知道
windowsize %1
這裡是否扮演任何角色。2019 年 12 月 7 日更新:
所以,我現在正試圖在 Debian Buster (Openbox 3.6) 上設置相同的系統,但我遇到了一個新問題。我懷疑某些屬性在新版本的 openbox 中發生了變化。
一切似乎都和以前一樣,即:
terminator-wallpaper-1a --profile wallpaper -b & terminator-wallpaper-1b --profile wallpaper -b & xdotool search --class 'Terminator-wallpaper-1a' windowunmap --sync windowmap windowsize %1 1920 1180 xdotool search --class 'Terminator-wallpaper-1b' windowunmap --sync windowmap windowsize %1 1920 1180
我有兩個終端作為桌面。但問題是,這些終端中只有一個是真正可用的。另一個是“不聚焦”,即使我用滑鼠點擊它,我也無法聚焦。即,我可以看到終端,但我不能輸入它。
這個問題以前不存在,在舊的 Openbox 版本中
我該如何解決這個問題?
_OB_APP_TYPE
Openbox 將為屬性設置為“桌面”的視窗提供您正在尋找的功能(您可以使用它obxprop
來檢查視窗的屬性)。因此,我們需要將_OB_APP_TYPE
您的終結器視窗設置為“桌面”,這樣才會發生這種情況。通讀 openbox 原始碼,
client.c
我可以看到它_OB_APP_TYPE
繼承自_NET_WM_WINDOW_TYPE
. 所以我尋找了一個可以改變的應用程序_NET_WM_WINDOW_TYPE
。我找到的應用程序名為devilspie
.首先,安裝它:
sudo apt-get install devilspie
接下來,我們將為
devilspie
配置文件創建文件夾:mkdir ~/.devilspie
現在我們將添加一個配置文件,告訴
devilspie
查找名為的應用程序並將terminator
它們的視窗類型設置為desktop
. 將以下內容放入~/.devilspie/terminator.ds
:(if (is (application_name) "terminator") (begin (wintype "desktop") ) )
現在,如果您執行
devilspie
(或devilspie -a
影響現有視窗而不僅僅是新創建的視窗),您會注意到是否使用了已更改但尚未更改obxprop
的終結器。讓我們使用取消映射和重新映射視窗(在 X11 術語中,這意味著我們將停止繪製並開始繪製視窗),這應該會強制 openbox 注意到該值。_NET_WM_WINDOW_TYPE``_OB_APP_TYPE``xdotool
安裝 xdotool:
sudo apt-get install xdotool
然後我們執行以下腳本來找到
terminator
視窗,取消映射,等到它被取消映射,然後重新映射它。我們還調整了視窗的大小,因為當它被取消映射並重新映射時,它失去了最大化:xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768
替換
1024 768
為您的解析度。另請注意,xdotool
比 Debian 的 apt repo 中發現的更新版本支持使用100% 100%
而不是靜態解析度。您可以在xdotool 的 googlecode 頁面.deb
找到更新版本的軟體包。xdotool
終止符視窗將立即變為未裝飾,如果您現在使用
obxprop
,您將看到兩個值都已正確設置。如果您現在按ToggleShowDesktop
幾次綁定的鍵,終止符視窗將始終保持活動狀態。為了使這個持久化,您需要在登錄時執行這些命令。LXSession的LXDE Wiki 頁面顯示了幾種不同的方法(全域、每個使用者、每個配置文件等)。假設您希望這些設置僅適用於您的使用者並在 LXDE 配置文件(預設)下,您將需要編輯
~/.config/lxsession/LXDE/autostart
和添加我們執行的命令,請記住 xdotool 命令需要在終結器視窗呈現後執行,所以做類似的事情(sleep 1s & xdotool ...)
。如果您願意,您還可以將這些命令設置為 openbox 中的鍵綁定。