Openbox

在 Openbox 中配置 ToggleShowDesktop 只作用於指定層

  • December 7, 2019

我有一個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_TYPEOpenbox 將為屬性設置為“桌面”的視窗提供您正在尋找的功能(您可以使用它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 中的鍵綁定。

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