歡迎光臨
每天分享高質量文章

在 Xfce 會話中儲存視窗的位置 | Linux 中國

如果你發現 Xfce 會話不能儲存視窗的位置,那麼啟用“登出時儲存”,然後登出再重新登入一次,可能就能永久修複這個問題了(如果你想要保持相同的會話,再次登入時恢復的話)。
— J. R. R. Tolkien


編譯自 | https://www.eyrie.org/~eagle/journal/2017-12/001.html 
 作者 | J. R. R. Tolkien
 譯者 | lujun9972

摘要:如果你發現 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 這樣的,其中包含的內容類似下麵這樣的:

  1. Client9_ClientId=2a654109b-e4d0-40e4-a910-e58717faa80b

  2. Client9_Hostname=local/hostname

  3. Client9_CloneCommand=xterm

  4. Client9_RestartCommand=xterm,-xtsessionID2a654109b-e4d0-40e4-a910-e58717faa80b

  5. Client9_Program=xterm

  6. Client9_UserId=user

這個檔案記錄了所有正在執行的程式。如果你進入“設定 -> 會話和啟動”並清除會話快取, 就會刪掉這種檔案。 當你儲存當前會話時, 又會建立這種檔案。 這就是 Xfce 知道要啟動哪些應用的原因。 但是請註意,上面並沒有包含任何視窗位置的資訊。 (我還曾經以為可以根據會話 ID 來找到其他地方的一些相關資訊,但是並沒有)。

正常工作的系統在目錄中還有另一類檔案,名字類似 xfwm4-2d4c9d4cb-5f6b-41b4-b9d7-5cf7ac3d7e49.state 這樣的。 其中檔案內容類似下麵這樣:

  1. [CLIENT] 0x200000f

  2. [CLIENT_ID] 2a9e5b8ed-1851-4c11-82cf-e51710dcf733

  3. [CLIENT_LEADER] 0x200000f

  4. [RES_NAME] xterm

  5. [RES_CLASS] XTerm

  6. [WM_NAME] xterm

  7. [WM_COMMAND] (1) "xterm"

  8. [GEOMETRY] (860358171042)

  9. [GEOMETRY-MAXIMIZED] (860358171042)

  10. [SCREEN] 0

  11. [DESK] 2

  12. [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中國 榮譽推出

LCTT 譯者

lujun9972 ? ? ? ?
共計翻譯:51 篇
貢獻時間:40 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂