
請注意,這個問題與
因為這裡的問題不是關於如何
- 在目前工作區中開啟一個程式。我知道。
- 在不同的工作區中開啟程式。我知道。
- 防止視窗移動到某個工作區。我知道如何處理。
- 防止點擊圖示或使用任務切換器時切換工作區。
這個問題也與鉻無關。 Chromium 只是眾多行為不當的應用程式中最突出的應用程式之一。
問題是,當另一個應用程式試圖在沒有直接使用者互動的情況下將焦點切換到自身(如 Chromium 或其他應用程式)時,如何防止 Wayland 切換當前工作區。 這就像焦點竊取一樣,當它發生在當前工作空間上時,這已經夠煩人的了。
如果我選擇了具有 Compiz 的工作區,則無論其他應用程式在背景嘗試執行什麼操作,除非我選擇了其他工作區,否則不得更改此工作區。
是否有辦法告訴 Wayland 僅服從來自某些應用程式(如 Compiz 和 wmctrl)的切換命令?也許可以透過一些過濾器來實現這一點dbus
(即使我知道如何破解 CIFS 或 ZFS 等 Linux 核心模組的程式碼以滿足我的需要,但我真的還沒有領悟到dbus
Wayland 或 SystemD,抱歉)。 LD_PRELOAD
?一些(現有的)X0 協定防火牆?任何事物?
我目前的解決方法是運行
while sleep .01; do DISPLAY=:0 wmctrl -s 2; done
這樣,如果 chromium(或其他應用程式之一)切換工作區,Wayland 會立即切換回我正在處理的工作區。然而,由於這種來回切換而導致的這一分鐘長的穩定螢幕閃爍令人惱火。此外,有時由於閃爍,滑鼠焦點會遺失(或發生完全不同的情況,例如由於暴露的競爭條件而將某些東西掉落到錯誤的桌面上)。
請注意,鉻是最煩人的。大多數其他應用程式僅切換一次工作區。然而,Chromium 顯然會對啟動時開啟的每個視窗執行此操作。在我身邊打開數千個視窗的情況下,chrome 的整個啟動需要幾分鐘(我的機器有足夠的RAM 和CPU,所以這不是交換問題),並且在啟動時,它會穩步嘗試切換工作區,直到準備好。然而,問題還在於如何防止 FireFox、IDE 和其他視窗以這種方式竊取焦點。
請注意,這個問題與焦點竊取本身無關。它只是透過切換工作空間來竊取焦點,因為這與觀察到的正常焦點竊取完全不同。
因此,我不想阻止視窗跳轉、移動到另一個工作區或竊取目前工作區的焦點。所以應用程式仍然可以破壞我的視窗位置。
我想要的只是“鎖定”當前工作區,這樣在我選擇移動到另一個工作區之前,不允許其他任何內容更改它。
對此的一些想法:
Wayland 僅呈現較大畫布(包含所有工作空間)的特定部分(工作空間)。因此,更改工作區只是更改畫布顯示的原點。顯示器是相對於這個原點的區域。 (當然還有更多的事情發生,因為輸入焦點也必須移動。)
AFAICS 應該很容易防止原點移動(從而也防止焦點改變)。這正是我想要存檔的內容。也許這已經內建在 Wayland 的某個地方了。或者它可能會被駭客入侵程式碼,就像防火牆一樣,可以防止未經授權的應用程式更改來源。如果我能夠在 Wayland 中找到發生原點變更的正確位置,我就可以實現這一點。
但在深入研究這個問題(可能需要幾天)之前,我想知道是否有更好或標準的方法來存檔它。
最後一些注意事項:
我需要使用 Ubuntu 和 Wayland,因為普通 X11 不支援我的顯示設定/硬體/HWE 堆疊。 (它無法正確驅動我的一台顯示器。請注意,我很可能有能力找到此錯誤並修復它,但我沒有時間這樣做。)
因此,離開 Wayland 對我來說並沒有什麼幫助。當然我運行LTS,所以Ubuntu 22.04也設定了,所以改變作業系統也沒幫助。