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 进程。

相关内容