如何在 Awesome WM 中修復 Java 應用程序滑鼠指針偏移?
如何在 Awesome WM v3.5.2 到 3.5.5 中重現(到目前為止):
- 安裝 OpenJDK 或 Oracle Java 7。兩者都觀察到了這個錯誤。
- 使用預設配置啟動一個新的 Awesome WM 會話。
- 啟動jEdit或PyCharm。兩者都觀察到了這個錯誤。
- 移動滑鼠指針,觀察它是如何根據您將滑鼠懸停在程式碼、項目文件還是菜單上而變化的。這應該可以正常工作。
- 點擊並鬆開文件菜單,進入其中一個子菜單,觀察滑鼠指針正下方的項目是如何一直聚焦的。
- 反复按
Mod4
+Space
直到啟動浮動佈局(應用程序將幾乎全屏)或在同一標籤中打開另一個應用程序。在這一點上,我希望滑鼠的行為與“正常”應用程序一樣。相反,我觀察到以下內容:
- 使用滑鼠點擊和導航菜單時,滑鼠指針和焦點菜單項將相互垂直偏移,看起來與狀態欄的高度相同。
- 像以前一樣將滑鼠懸停在雜項上時,游標圖示將被設置為好像滑鼠指針在螢幕上更高。例如,將滑鼠懸停在文本的第一行上,您將看不到文本游標。
好像有些東西沒有檢測到視窗座標已經改變。
當您在同一個標籤中打開另一個應用程序時,會發生類似但更煩人的錯誤- 滑鼠行為就像視窗根本沒有移動一樣。
當您切換另一個已打開應用程序的標籤時, “虛擬滑鼠桌面”將移動到主螢幕的左上角。
由於在 OpenJDK 和 Oracle Java 中都觀察到了這些錯誤,並且在不同的 Java 應用程序中,這些錯誤似乎很可能出現在 Awesome WM 中。
根據我的經驗,您需要為視窗管理器的源添加特殊定義。
幾年前,我在 MATE 桌面的
marco
視窗管理器中遇到過這種情況。“修復”是讓 marco 偽裝成它的父項目 metacity,以利用 JDK 對 metacity 的內置修復。來自
src/core/display.c
:meta_prop_set_utf8_string_hint (the_display, the_display->leader_window, the_display->atom__NET_WM_NAME, "Metacity (Marco)");
此修復程序與 Web 瀏覽器世界中使用者代理字元串發生的事情有關,但它對我有用。
此外,arch wiki 甚至在關於模擬其他視窗管理器的部分中提到了 Awesome WM,它建議
wmname
:https ://wiki.archlinux.org/index.php/Java#Impersonate_another_window_manager
您可以使用來自suckless.org 的wmname 讓JVM 相信您正在執行不同的視窗管理器。這可能會解決出現在視窗管理器(如 Awesome、Dwm 或 Ratpoison)中的 Java GUI 渲染問題。
$ wmname LG3D
發出 wmname 命令後,您必須重新啟動有問題的應用程序。
這是有效的,因為 JVM 包含一個硬編碼的已知、非父視窗管理器列表。為了最大的諷刺,一些使用者更喜歡模仿 LG3D,這是 Sun 用 Java 編寫的非重父視窗管理器。