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

來源:互聯網
上載者:User

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

摘要:如果你發現 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,-xtsessionID,2a654109b-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](860,35,817,1042)
  9. [GEOMETRY-MAXIMIZED](860,35,817,1042)
  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中國 榮譽推出

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.