Terminal

Openbox:下層的視窗不可訪問

  • June 3, 2020

我正在嘗試在 Openbox 中設置“終端作為桌面牆紙”,如此處所述

Openbox可以設置<layer>below</layer>,使視窗作為桌面背景執行,不會被狀態欄顯示,不受“最小化視窗”的影響。因此,我實際上沒有將無用的圖像顯示為牆紙,而是有一個終端。

我作為後台執行的實際終端是terminator,我剛剛創建了一個符號連結terminator-wallpaper-1aterminator-wallpaper-1b,它們只是終結器二進製文件的符號連結。只有名字不同,我才能分辨出來。

我有雙顯示器設置,我想在每台顯示器上都有終結者桌面。

openbox 視窗屬性由以下設置devilspie

(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)

然後,我在我的 openbox 配置中有這個,這樣每個桌面都會轉到相應的顯示器/桌面:

<application name="terminator-wallpaper-1a">
 <focus>yes</focus>
 <layer>below</layer>
 <desktop>1</desktop>
 <position>
   <y>0</y>
   <x>0</x>
   <monitor>1</monitor>
 </position>
 <skip_taskbar>yes</skip_taskbar>
 <maximized>true</maximized>
</application>

<application name="terminator-wallpaper-1b">
 <focus>yes</focus>
 <layer>below</layer>
 <desktop>1</desktop>
 <position>
   <y>0</y>
   <x>0</x>
   <monitor>2</monitor>
 </position>
 <skip_taskbar>yes</skip_taskbar>
 <maximized>true</maximized>
</application>

最後,這就是我開始整個事情的方式:

devilspie &
terminator-wallpaper-1a -b &
terminator-wallpaper-1b -b &

xdotool set_desktop 0

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

一切都很好,當我最小化所有其他視窗時,我實際上看到了我的終結者桌面。但實際上只有其中一個是可用的。即,專注或活躍。另一個我無法輸入。即使我用滑鼠點擊,游標仍然處於非活動狀態,因此視窗永遠不會成為焦點。

我怎樣才能解決這個問題 ?

解決方案:

在與使用者@intika 進行詳盡的故障排除後,我們發現了問題。將以下程式碼段添加到<mouse>openbox 配置文件中的部分修復了該問題:

<context name="Desktop">
 <mousebind button="Left" action="Press">
   <action name="Focus"/>
   <action name="Raise"/>
 </mousebind>
</context>

一次只能有一個視窗/應用程序獲得焦點。

在您的 openbox 配置中,兩個應用程序/桌面都有焦點,但從技術上講這是不可能的,因此 openbox 通過僅將焦​​點放在一個應用程序上來減輕您的配置(否則它不能這樣做)。

<application name="terminator-wallpaper-1a">
 <focus>yes</focus>
...
<application name="terminator-wallpaper-1b">
 <focus>yes</focus>

有很多方法可以解決這個問題,它們圍繞著實現一種將焦點切換到第一個或第二個螢幕桌面/應用程序/桌面的方法而發展

可能的解決方案1:

您可以嘗試將焦點值設置為 no 或一起刪除焦點線,然後通過滑鼠點擊來測試切換焦點

可能的解決方案2:

使用滑鼠位置設置焦點,這裡是openbox wiki,首先刪除兩個桌面應用程序的焦點條目,然後將以下內容添加到主要部分下的 openbox 配置中,<focus></focus>如鍊接文件中所述

<followMouse>yes</followMouse>
<!-- move focus to a window when you move the mouse into it -->

請注意,這也會影響您的其他視窗……

您也可以嘗試followMouse在應用程序部分下使用,但我認為這不是由 openbox 處理的

可能的解決方案2:

使用帶有鍵盤快捷鍵的 xdotool 或切換焦點,實際上您可以為鍵盤快捷鍵分配一個類似下面的命令,此解決方案還要求您通過刪除/編輯雙重來修復您的配置 <focus>yes</focus>

xdotool search --class 'Terminator-wallpaper-1b' windowactivate

與 xdotool 相同,wmctrl 也可以用於此問題:

#Lists currently open windows 
wmctrl -l 

#Set focus to windows with title containing STRING
wmctrl -a STRING

筆記:

<focus>yes</focus>
# if the window should try be given focus when it appears. if this is set
# to yes it doesn't guarantee the window will be given focus. some
# restrictions may apply, but Openbox will try to

筆記2:

還有許多其他可能的解決方案,您可以評論答案,我會相應地對其進行編輯;)

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