在 Xfce 會話中保存窗口的位置
![](https://linuxstory.org/wp-content/uploads/2024/06/121844t0t5qepgp49xg499-800x400.png)
摘要:如果你發現 Xfce 會話不能保存窗口的位置,那麼啟用「登出時保存」,然後登出再重新登錄一次,可能就能永久修復這個問題了(如果你想要保持相同的會話,再次登錄時恢復的話)。 下面是詳細內容。
我用 Xfce 作桌面有些年頭了,但是每次重啟後進入之前保存的會話時總會有問題出現。 登錄後, 之前會話中保存的應用都會啟動, 但是所有的工作區和窗口位置數據都會丟失, 導致所有應用都堆在默認工作區中,亂糟糟的。
多年來,很多人都報告過這個問題(Ubuntu、Xfce 以及 Red Hat 的 bug 追蹤系統中都有登記)。 雖然 Xfce4.10 中已經修復過了一個相關 bug, 但是我用的 Xfce4.12 依然有這個問題。 如果不是我的其中一個系統能夠正常的恢復各個窗口的位置,我幾乎都要放棄找出問題的原因了(事實上我之前已經放棄過很多次了)。
今天,我深入對比了兩個系統的不同點,最終解決了這個問題。 我現在就把結果寫出來, 以防有人也遇到相同的問題。
提前的一些說明:
- 由於這個筆記本只有我在用,因此我幾乎不登出我的 Xfce 會話。 我一般只是休眠然後喚醒,除非由於要對內核打補丁才進行重啟, 或者由於某些改動損毀了休眠鏡像導致系統從休眠中喚醒時卡住了而不得不重啟。 另外,我也很少使用 Xfce 工具欄上的重啟按鈕重啟;一般我只是運行一下
reboot
。 - 我會使用 xterm 和 Emacs, 這些不太複雜的 X 應用無法記住他們自己的窗口位置。
Xfce 將會話信息保存到主用戶目錄中的 .cache/sessions
目錄中。在經過仔細檢查後發現,在正常的系統中有兩類文件存儲在該目錄中,而在非正常的系統中,只有一類文件存在該目錄下。
其中一類文件的名字類似 xfce4-session-hostname:0
這樣的,其中包含的內容類似下面這樣的:
Client9_ClientId=2a654109b-e4d0-40e4-a910-e58717faa80b
Client9_Hostname=local/hostname
Client9_CloneCommand=xterm
Client9_RestartCommand=xterm,-xtsessionID,2a654109b-e4d0-40e4-a910-e58717faa80b
Client9_Program=xterm
Client9_UserId=user
這個文件記錄了所有正在運行的程序。如果你進入「設置 -> 會話和啟動」並清除會話緩存, 就會刪掉這種文件。 當你保存當前會話時, 又會創建這種文件。 這就是 Xfce 知道要啟動哪些應用的原因。 但是請注意,上面並沒有包含任何窗口位置的信息。 (我還曾經以為可以根據會話 ID 來找到其他地方的一些相關信息,但是並沒有)。
正常工作的系統在目錄中還有另一類文件,名字類似 xfwm4-2d4c9d4cb-5f6b-41b4-b9d7-5cf7ac3d7e49.state
這樣的。 其中文件內容類似下面這樣:
[CLIENT] 0x200000f
[CLIENT_ID] 2a9e5b8ed-1851-4c11-82cf-e51710dcf733
[CLIENT_LEADER] 0x200000f
[RES_NAME] xterm
[RES_CLASS] XTerm
[WM_NAME] xterm
[WM_COMMAND] (1) "xterm"
[GEOMETRY] (860,35,817,1042)
[GEOMETRY-MAXIMIZED] (860,35,817,1042)
[SCREEN] 0
[DESK] 2
[FLAGS] 0x0
注意這裡的 GEOMETRY
和 DESK
記錄的正是我們想要的窗口位置以及工作區號。因此不能保存窗口位置的原因就是因為缺少這個文件。
繼續深入下去,我發現當你明確地手工保存會話時,之後保存第一個文件而不會保存第二個文件。 但是當登出保存會話時則會保存第二個文件。 因此, 我進入「設置 -> 會話和啟動」中,在「通用」標籤頁中啟用登出時自動保存會話, 然後登出後再進來, 然後, 第二個文件就出現了。 再然後我又關閉了登出時自動保存會話。(因為我一般在排好屏幕後就保存一個會話, 但是我不希望做出的改變也會影響到這個保存的會話, 如有必要我會明確地手工進行保存),現在我的窗口位置能夠正常的恢復了。
這也解釋了為什麼有的人會有問題而有的人沒有問題: 有的人可能一直都是用登出按鈕重啟,而有些人則是手工重啟(或者僅僅是由於系統崩潰了才重啟)。
順帶一提,這類問題, 以及為解決問題而付出的努力,正是我贊同為軟體存儲的狀態文件編寫 man 頁或其他類似文檔的原因。 為用戶編寫文檔,不僅能幫助別人深入挖掘產生奇怪問題的原因, 也能讓軟體作者注意到軟體中那些奇怪的東西, 比如將會話狀態存儲到兩個獨立的文件中去。
via: https://www.eyrie.org/~eagle/journal/2017-12/001.html
作者:J. R. R. Tolkien 譯者:lujun9972 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive