首頁 > 軟體

在 Xfce 對談中儲存視窗的位置

2020-06-16 16:57:41

摘要:如果你發現 Xfce 對談不能儲存視窗的位置,那麼啟用“登出時儲存”,然後登出再重新登入一次,可能就能永久修復這個問題了(如果你想要保持相同的對談,再次登入時恢復的話)。 下面是詳細內容。

我用 Xfce 作桌面有些年頭了,但是每次重新啟動後進入之前儲存的對談時總會有問題出現。 登入後, 之前對談中儲存的應用都會啟動, 但是所有的工作區和視窗位置資料都會丟失, 導致所有應用都堆在預設工作區中,亂糟糟的。

多年來,很多人都報告過這個問題(Ubuntu、Xfce 以及 Red Hat 的 bug 追蹤系統中都有登記)。 雖然 Xfce4.10 中已經修復過了一個相關 bug, 但是我用的 Xfce4.12 依然有這個問題。 如果不是我的其中一個系統能夠正常的恢復各個視窗的位置,我幾乎都要放棄找出問題的原因了(事實上我之前已經放棄過很多次了)。

今天,我深入對比了兩個系統的不同點,最終解決了這個問題。 我現在就把結果寫出來, 以防有人也遇到相同的問題。

提前的一些說明:

  1. 由於這個筆電只有我在用,因此我幾乎不登出我的 Xfce 對談。 我一般只是休眠然後喚醒,除非由於要對核心打修補程式才進行重新啟動, 或者由於某些改動損毀了休眠映象導致系統從休眠中喚醒時卡住了而不得不重新啟動。 另外,我也很少使用 Xfce 工具列上的重新啟動按鈕重新啟動;一般我只是執行一下 reboot
  2. 我會使用 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

注意這裡的 GEOMETRYDESK 記錄的正是我們想要的視窗位置以及工作區號。因此不能儲存視窗位置的原因就是因為缺少這個檔案。

繼續深入下去,我發現當你明確地手工儲存對談時,之後儲存第一個檔案而不會儲存第二個檔案。 但是當登出儲存對談時則會儲存第二個檔案。 因此, 我進入“設定 -> 對談和啟動”中,在“通用”分頁中啟用登出時自動儲存對談, 然後登出後再進來, 然後, 第二個檔案就出現了。 再然後我又關閉了登出時自動儲存對談。(因為我一般在排好螢幕後就儲存一個對談, 但是我不希望做出的改變也會影響到這個儲存的對談, 如有必要我會明確地手工進行儲存),現在我的視窗位置能夠正常的恢復了。

這也解釋了為什麼有的人會有問題而有的人沒有問題: 有的人可能一直都是用登出按鈕重新啟動,而有些人則是手工重新啟動(或者僅僅是由於系統崩潰了才重新啟動)。

順帶一提,這類問題, 以及為解決問題而付出的努力,正是我贊同為軟體儲存的狀態檔案編寫 man 頁或其他類似文件的原因。 為使用者編寫文件,不僅能幫助別人深入挖掘產生奇怪問題的原因, 也能讓軟體作者注意到軟體中那些奇怪的東西, 比如將對談狀態儲存到兩個獨立的檔案中去。


via: https://www.eyrie.org/~eagle/journal/2017-12/001.html

作者:J. R. R. Tolkien 譯者:lujun9972 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

本文永久更新連結地址http://www.linuxidc.com/Linux/2018-01/150168.htm


IT145.com E-mail:sddin#qq.com