如何在凍結時啟用 Plasma/KDE 自動重啟?
我使用OpenSuse已經好幾年了。我最喜歡這個發行版的一件事是處理 Plasma/KDE 問題的方式:有時可能會發生面板短暫消失並打開一個消息框告訴我 Plasma 桌面已崩潰並已重新啟動,如果我願意,還建議將調試數據發送給開發團隊。
現在幾個月來,我已經切換到基於 Fedora 的發行版(Qubes OS,基於 Fedora 20)。預設情況下,此發行版似乎不提供此行為,因為:
- 我再也沒有看到這個消息框了,
- 但是我的桌面幾次完全凍結(螢幕和鍵盤凍結,聲音和滑鼠指針正常),不得不殘酷地關閉我的電腦,我的手指交叉著失去所有正在進行的工作將是這種殘酷的唯一副作用關閉。
十幾年前,當我還是學生的時候,我所在的大學也在使用 Fedora 進行動手練習。當時,面對類似的凍結,我找到了通過 SSH 遠端連接並殺死桌面管理器以便它自動重新啟動,解鎖圖形環境的解決方案。
可悲的是,由於 Qubes OS¹ 的特定設計,這種快速而骯髒的 SSH 解決方案在這裡不起作用。但是,我猜 OpenSuse 的消息框工具可能會以適當的方式做類似的事情:實現某種看門狗檢測 Plasma/KDE 何時沒有響應,然後殺死並重新啟動它。
所以我想知道的是:這個工具是 OpenSUSE² 的一個特定功能,還是我應該安裝一些軟體包或者我應該更改一些配置以在我目前的安裝中啟用這種行為?
桌面凍結尤其令人沮喪,甚至當我知道應用程序本身很可能仍然可以正常工作並且簡單地重新啟動 Plasma 程序會使一切恢復正常時…
¹:在 Qubes OS 中,網路連接在 Xen 域中是隔離的,而 KDE 在無網路的 Dom0 中。出於安全原因,Qubes OS 經過精心設計,可避免從網路訪問使用者界面…
²:過去(如果不是這樣的話)OpenSUSE 曾經有一個內部大量修改過的 KDE,這讓他們成為第一個提出穩定 KDE4 的發行版,所以我擔心這個工具只是這些糖果的一部分。 ..
**TL;DR:**這裡的問題顯然是由 OpenGL 和 KWin 之間的問題(很可能是一些模糊的競爭條件)引起的。
要解決此問題,必須禁用 OpenGL 並改用 XRender(在系統配置 > 桌面效果 > 高級 > 合成類型中,選擇“XRender”而不是預設的 OpenGL)。
一些桌面效果將不再可用,但至少系統將穩定並且不再凍結。
很長的故事:
該問題每隔幾週隨機發生一次,有時一天幾次,有時兩到三週沒有問題,因此很難分析(順便說一句,我換了另一個顯卡,從 radeon 切換到 Intel i915對問題沒有任何影響,因此它與顯卡及其驅動程序無關)。
我留下了一個在後台執行的腳本,並在無限循環中每三分鐘進行一次自動檢查,這樣他們就有希望在桌面凍結時捕捉到一些東西。
實際上,可以通過 qdbus 以程式方式檢測凍結,特別是當且僅當桌面被凍結時,此呼叫才會失敗:
qdbus org.kde.Kwin /App org.freedesktop.DBus.Peer.Ping
雖然通常它沒有輸出且返回程式碼為 0,但當桌面凍結時,此命令會失敗並返回程式碼 2 和“NoReply”錯誤消息。
有關資訊,我還檢查了 org.kde.plasma-desktop、org.kde.kuiserver 和 org.kde.kded 的狀態,當凍結髮生時它們看起來都很正常,因此 KWin 似乎是真正的罪魁禍首。
我嘗試了幾種方法來恢復桌面環境的完整性,但沒有成功。嘗試使用乾淨地重新啟動 KWin
kquitapp kwin
或kwin --replace
似乎沒有任何明顯的效果。我試圖殺死並重建完整的桌面環境,如下所示:kbuildsycoca4 kquitapp plasma-desktop kquitapp kwin kquitapp kuiserver sleep 2 killall plasma-desktop kwin kuiserver; sleep 2 killall -9 plasma-desktop kwin kuiserver; sleep 2 kstart kuiserver kstart kwin kstart plasma-desktop
桌面解凍了!…但僅適用於一幀:螢幕(在工作列中查看時鐘時可以看到)更新並立即再次凍結。
儘管如此,在找到了罪魁禍首之後,我在這裡發現了一個舊的“高、關鍵但無法解決,因為太晦澀”的問題。相同的症狀,相同的診斷步驟,最後建議的解決方法是:使用 XRender 而不是 OpenGL。
自從我應用此更改以來已經幾個月了,從那時起我沒有遇到任何凍結,所以我認為這個解決方法對於這個問題是正確的。