在我的机器上(请参阅下面的详细信息)Evince 没有按预期打开文档,但这取决于所使用的方法。我指的两种方法是:
- (A) 通过将文档作为目标来启动 Evince(例如,单击文档并使用“打开方式”和“Evince”)或者
evince <target doc>
从终端运行); - (B) 首先启动 Evince,没有文档,然后在 Evince 窗口中单击“打开...”或者将文档拖动到已打开的 Evince 窗口顶部(这将打开另一个包含新文档的 Evince 窗口)。
方法 A(大多数情况下)不起作用。这会导致进程挂起,我可以pgrep
通过扩展坞中的图标看到该进程。htop
表明这些进程几乎不使用 CPU 和内存。我可以正常终止这些进程。但是,如果我单击扩展坞中这些 Evince 实例的图标,我的系统会立即完全冻结(我无法打开tty
),解决方案是通过电源按钮强制重新启动。
例外情况:方法 A 有时有效。我找到了(主要是但是或许不总是?我现在不确定)适用于一个小的(0.5 MB)PDF只有图像,没有文字。我发现它会有时还可以处理包含图像和文本的中等大小 (4 MB) PDF。在这种情况下,有时还会出现一个带有用于查看 PDF 的 UI 的窗口,但 PDF 不会出现。其他时候,进程会挂起或 PDF 会正常打开。我发现它无法在包含图像和文本的较大 PDF (6 MB) 上运行,而且我从未让它在仅包含文本而没有图像的小型 PDF (0.2 MB) 上运行。我还尝试了一个小(0.2 MB).ps 图像,但无法用方法 A 打开它。
方法 B(大部分)可以正常工作。
例外情况:如果挂起的进程已经在运行,方法 B 有时不起作用。也就是说,如果挂起的进程正在运行,我可以打开一个空的 Evince 窗口,但使用“打开...”或将文档拖到窗口上有时会打开该文档,有时则不会。
我的机器:
- Ubuntu 20.04.6,64 位
- 窗口系统:Wayland
- 64 GiB 内存
- 第 11 代英特尔处理器
- 一些板载显卡:Mesa Intel XE (TGL GT2)
- 2 TB SSD 空间,远未满
此外,我要补充一点,这并不总是一个问题。我以前可以完全正常使用 Evince。然而,在过去的某个时间点,这种行为开始出现,我只是避免使用 Evince,因为我无法确定可能发生了什么变化。
更多诊断:
我尝试strace
在挂起的 Evince 进程上运行。我读到这可能会有所帮助,但我不明白任何输出:
strace: Process 12102 attached
restart_syscall(<... resuming interrupted read ...>) = 1
write(5, "\1\0\0\0\0\0\0\0", 8) = 8
recvmsg(11, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="l\4\1\1\21\0\0\0\373\5\0\0\205\0\0\0\1\1o\0\30\0\0\0/org/a11"..., iov_len=2048}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) = 169
write(5, "\1\0\0\0\0\0\0\0", 8) = 8
recvmsg(11, {msg_namelen=0}, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily unavailable)
write(5, "\1\0\0\0\0\0\0\0", 8) = 8
poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}, {fd=11, events=POLLIN}], 3, 0) = 1 ([{fd=5, revents=POLLIN}])
read(5, "\3\0\0\0\0\0\0\0", 16) = 8
poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}, {fd=11, events=POLLIN}], 3, -1) = 1 ([{fd=11, revents=POLLIN}])
write(5, "\1\0\0\0\0\0\0\0", 8) = 8
recvmsg(11, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="l\4\1\1\21\0\0\0\375\5\0\0\205\0\0\0\1\1o\0\30\0\0\0/org/a11"..., iov_len=2048}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) = 169
write(5, "\1\0\0\0\0\0\0\0", 8) = 8
recvmsg(11, {msg_namelen=0}, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily unavailable)
write(5, "\1\0\0\0\0\0\0\0", 8) = 8
poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}, {fd=11, events=POLLIN}], 3, 0) = 1 ([{fd=5, revents=POLLIN}])
read(5, "\3\0\0\0\0\0\0\0", 16) = 8
poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}, {fd=11, events=POLLIN}], 3, -1
我等了几分钟,没有写入任何额外的输出。我也跑了,netstat
因为阅读这可能会有帮助,但我还是不明白输出。
$ netstat -p | grep 12102
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
unix 3 [ ] STREAM CONNECTED 150817 12102/evince
unix 3 [ ] STREAM CONNECTED 149214 12102/evince
unix 3 [ ] STREAM CONNECTED 149075 12102/evince
unix 3 [ ] STREAM CONNECTED 149074 12102/evince
unix 3 [ ] STREAM CONNECTED 149213 12102/evince
unix 3 [ ] STREAM CONNECTED 151902 12102/evince
我ls -l /proc/<proc id>/fd
再次跑步,因为我读到它会有所帮助。在挂起的进程 (12102) 上,然后在终止该进程并在同一 PDF(进程 15795)上使用方法 B 后:
<me>@<my computre>:~$ ls -l /proc/12102/fd
total 0
lr-x------ 1 <me> <me> 64 Okt 11 18:37 0 -> /dev/null
lrwx------ 1 <me> <me> 64 Okt 11 18:37 1 -> 'socket:[149074]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 10 -> 'socket:[149214]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 11 -> 'socket:[151902]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 12 -> 'anon_inode:[eventfd]'
lr-x------ 1 <me> <me> 64 Okt 11 18:37 13 -> anon_inode:inotify
lr-x------ 1 <me> <me> 64 Okt 11 18:37 14 -> '/home/<me>/.local/share/gvfs-metadata/home (deleted)'
lr-x------ 1 <me> <me> 64 Okt 11 18:37 15 -> '/home/<me>/.local/share/gvfs-metadata/home-a9b0a1cb.log (deleted)'
lr-x------ 1 <me> <me> 64 Okt 11 18:37 16 -> /home/<me>/Downloads/<my document>.pdf
lrwx------ 1 <me> <me> 64 Okt 11 18:37 2 -> 'socket:[149075]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 3 -> 'socket:[149213]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 4 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 5 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 6 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 7 -> '/memfd:wayland-cursor (deleted)'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 8 -> 'socket:[150817]'
lrwx------ 1 <me> <me> 64 Okt 11 18:37 9 -> 'anon_inode:[eventfd]'
<me>@<my computer>:~$ ls -l /proc/15795/fd
total 0
lr-x------ 1 <me> <me> 64 Okt 11 18:58 0 -> /dev/null
lrwx------ 1 <me> <me> 64 Okt 11 18:58 1 -> 'socket:[174829]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 10 -> 'socket:[177581]'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 102 -> '/home/<me>/.local/share/gvfs-metadata/root-5357d137.log (deleted)'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 11 -> 'socket:[174831]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 12 -> 'anon_inode:[eventfd]'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 13 -> anon_inode:inotify
lr-x------ 1 <me> <me> 64 Okt 11 18:58 14 -> '/home/<me>/.local/share/gvfs-metadata/home (deleted)'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 15 -> '/memfd:wayland-cursor (deleted)'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 16 -> '/home/<me>/.local/share/gvfs-metadata/home-41fe52fb.log (deleted)'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 17 -> /home/<me>/Downloads/<my document>.pdf
lrwx------ 1 <me> <me> 64 Okt 11 18:58 2 -> 'socket:[174829]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 3 -> 'socket:[177580]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 4 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 5 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 6 -> 'socket:[179272]'
lr-x------ 1 <me> <me> 64 Okt 11 18:58 60 -> '/home/<me>/.local/share/gvfs-metadata/root (deleted)'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 7 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 8 -> 'anon_inode:[eventfd]'
lrwx------ 1 <me> <me> 64 Okt 11 18:58 9 -> '/memfd:wayland-cursor (deleted)'
这对我来说看起来是一样的,只是后一个过程有两个“wayland 光标”行。
我将感谢您关于如何诊断此问题的所有建议。我通常会使用 Okular 处理 PDF,但我发现 Evince 更适合处理包含大图像的 PDF,并且我开始查看更多此类 PDF。另外,这个问题让我非常困惑,我想解决它。