WSL2 中的 Evince 不記得上次造訪的頁面

WSL2 中的 Evince 不記得上次造訪的頁面

我在 WSL2 上使用 Evince pdf 閱讀器,但它不記得上次造訪的頁面。每次我打開 pdf 文件時,它都會從小視窗中的第一頁開始,並顯示以下訊息:

chen@4-726:~/Documents/latex/notes/physics/tokamak$ Gdk-Message: 11:43:25.750: Unable to load hand2 from the cursor theme
Gdk-Message: 11:43:25.925: Unable to load hand2 from the cursor theme
Gdk-Message: 11:43:26.153: Unable to load hand2 from the cursor theme

我讀了一篇郵政說 evince 應該將閱讀歷史儲存在 中,但我在 WSL2 中~/.local/share/gvfs-metadata/home沒有看到資料夾。gvfs-metadata

然後另一則評論說:

如果 evince 是在沒有 gvfs 支援的情況下編譯的,它不會記住歷史記錄或上次開啟的頁面。

那麼我怎麼才能獲得 WSL2 的 gvfs 支援並讓 Evince 記住閱讀歷史呢?


附註我的系統訊息

我的所有系統似乎都有最新版本:

Device name 1-039-11
Processor AMD Ryzen 9 5900X 12-Core Processor 3.70 GHz
Installed RAM 32.0 GB
Device ID D3418E8A-2C8C-4EC2-A836-7ABF7E5D9D51
Product ID 00330-71450-76029-AAOEM
System type 64-bit operating system, x64-based processor
Pen and touch No pen or touch input is available for this display

Edition Windows 11 Pro
Version 21H2
Installed on ‎1/‎11/‎2022
OS build 22000.708
Experience Windows Feature Experience Pack 1000.22000.708.0

Linux 1-039-11 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

            .-/+oossssoo+/-.               chen@1-039-11 
        `:+ssssssssssssssssss+:`           ------------- 
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 22.04 LTS on Windows 10 x86_64 
    .ossssssssssssssssssdMMMNysssso.       Kernel: 5.10.102.1-microsoft-standard-WSL2 
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Uptime: 20 hours, 28 mins 
  +ssssssssshmydMMMMMMMNddddyssssssss+     Packages: 1922 (dpkg) 
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Shell: bash 5.1.16 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Theme: Adwaita [GTK3] 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Icons: Adwaita [GTK3] 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Terminal: terminator 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: AMD Ryzen 9 5900X (24) @ 3.700GHz 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   GPU: 3448:00:00.0 Microsoft Corporation Device 008e 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Memory: 529MiB / 15952MiB 
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
  +sssssssssdmydMMMMMMMMddddyssssssss+                             
   /ssssssssssshdmNNNNmyNMMMMhssssss/                              
    .ossssssssssssssssssdMMMNysssso.
      -+sssssssssssssssssyyyssss+-
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.


答案1

簡短回答:

假設您使用的是 Ubuntu:

sudo apt install gvfs
dbus-launch evince <file.pdf>

捲動到 PDF 中的某個位置,然後退出 Evince 並:

dbus-launch evince <file.pdf>

現在它應該打開到以前的位置。

更多詳情:

您說 Evince 使用 GVfs(Gnome 虛擬檔案系統)來儲存其書籤,這是完全正確的。

這在 WSL 上不起作用(預設)有幾個原因:

  • 大多數 WSL 發行版上預設不安裝 GVfs。

  • GVfs 需要使用者會話 D-Bus 實例。 D-Bus 的簡單定義是更複雜的頁面:

    應用程式之間相互溝通的簡單方法

    使得編寫「單一實例」應用程式或守護程式變得簡單可靠,並在需要服務時按需啟動應用程式和守護程式

    因此,Evince 使用 D-Bus 來啟動或附加到 GVfs 守護程式的單一實例,然後使用 GVfs 來儲存書籤。

  • 但該 D-Bus 實例通常由 Systemd(和/或 PAM)在登入時為您設定。

  • 而且 WSL 並不真正具有「登入」的概念(啟動 WSL 時通常不需要輸入密碼)。 WSL也不支援開箱即用的 Systemd

所有這些結合起來意味著(在預設的 WSL 安裝中)Evince 不會追蹤您的最後位置/書籤。

安裝 GVfs 是第一步。

然後,您有兩個選擇:

  • dbus-launch evince每次啟動時,如上例所示。

  • 或者,當您啟動 WSL 時,請使用:

    wsl ~ -e dbus-launch bash # Or your preferred shell
    

    這將在 D-Bus 使用者會話中啟動 Bash shell,然後簡單地evince <file.pdf>打開到最後一個位置。

ps -efH您可以透過在每個命令之間運行來查看正在發生的一些情況。您將看到這dbus-launch bash將啟動 D-Bus 進程,但除此之外就沒有什麼其他的了。然後運行evince也會啟動按需的GVfs進程。

相關內容