作者 | J. R. R. Tolkien
譯者 | lujun9972
摘要:如果你發現 Xfce 會話不能儲存視窗的位置,那麼啟用“登出時儲存”,然後登出再重新登入一次,可能就能永久修複這個問題了(如果你想要保持相同的會話,再次登入時恢復的話)。 下麵是詳細內容。
我用 Xfce 作桌面有些年頭了,但是每次重啟後進入之前儲存的會話時總會有問題出現。 登入後, 之前會話中儲存的應用都會啟動, 但是所有的工作區和視窗位置資料都會丟失, 導致所有應用都堆在預設工作區中,亂糟糟的。
多年來,很多人都報告過這個問題(Ubuntu、Xfce 以及 Red Hat 的 bug 追蹤系統中都有登記)。 雖然 Xfce4.10 中已經修複過了一個相關 bug, 但是我用的 Xfce4.12 依然有這個問題。 如果不是我的其中一個系統能夠正常的恢復各個視窗的位置,我幾乎都要放棄找出問題的原因了(事實上我之前已經放棄過很多次了)。
今天,我深入對比了兩個系統的不同點,最終解決了這個問題。 我現在就把結果寫出來, 以防有人也遇到相同的問題。
提前的一些說明:
reboot
。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[2] 譯者:lujun9972 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出