单击 PDF 中的链接会产生数千个 xdg-open 进程

单击 PDF 中的链接会产生数千个 xdg-open 进程

我有一个 PDF,其中包含一个网页链接,以前它可以正常工作(它会通过 xdg-open 在 Firefox 中打开链接)。但是,现在当我单击它时,实际上会启动数千个 xdg-open 进程,并且 plasma-desktop 的 CPU 占用率达到 100%。

我不知道如何开始排除故障。什么原因导致此问题?

问题 PDF 的示例如下这里

以下是发生情况的屏幕截图。请注意,由于数千个 xdg-open 实例导致任务栏损坏 以下是发生情况的屏幕截图。请注意,由于数千个 xdg-open 实例导致任务栏损坏

答案1

我刚刚遇到了同样的问题,不过是打开链接时遇到的mailto:。不过,调试问题的方法可能和你的类似。

首先,找到处理 mailto(或者在你的情况下是 http)方案的内容:

$ xdg-mime query default x-scheme-handler/mailto
kmailservice5.desktop

那么,是什么kmailservice5.desktop

$ locate kmailservice5.desktop
/usr/share/applications/kmailservice5.desktop

打开上述文件显示:

[Desktop Entry]
Type=Application
Exec=kmailservice5 %u
Icon=mail-message-new
MimeType=x-scheme-handler/mailto;

X-DocPath=kioslave5/mailto/index.html
NoDisplay=true

# KMailService is the handler for mailto URLs
Name=KMailService
...

我想知道kmailservice5是什么?

$ kmailservice5 --help
   xdg-open -- opens a file or URL in the user's preferred
   application

Synopsis

   xdg-open { file | URL }

   xdg-open { --help | --manual | --version }

Use 'man xdg-open' or 'xdg-open --manual' for additional info.

这与 的输出完全相同xdg-open --help!这很奇怪……我查了一下来源,kmailservice5发现http://api.kde.org/frameworks-api/frameworks5-apidocs/kio/html/kmailservice_8cpp_source.html.这是一个简单的应用程序,它调用QDesktopServices::openUrl https://doc.qt.io/qt-5/qdesktopservices.html#openUrl(在 KDE4 中,邮件应用程序是通过以下方式明确调用的KToolInvocation::invokeMailer;我对 KDE5 的部分升级可能是造成此损坏的原因)。

换句话说,mailto:... 打开 mailto: 的处理程序,后者打开 mailto: 的处理程序,等等。这个循环永远不会结束,结束这个循环的唯一方法是发出killall kde-open plasma-desktop


为了解决这个问题,我创建了一个robs-mailto.desktop包含以下内容的内容:

[Desktop Entry]
Type=Application
Exec=kdialog --msgbox "Rob's mailto handler: %u"
Icon=mail-message-new
MimeType=x-scheme-handler/mailto;

Name=RobsMailtoHandler

并注册如下:

$ xdg-mime default robs-mailto.desktop x-scheme-handler/mailto

并验证其是否已正确注册:

$ xdg-mime query default x-scheme-handler/mailto
robs-mailto.desktop

$ xdg-open mailto:[email protected]
# (opened a KDialog window that printed the email address, as I specified)

答案2

是的,不要让 xdg-open 成为首选应用程序。因为 xdg-open 的工作找出首选应用程序。无限递归随之而来。

换句话说,xdg-open 是 mime/apps 偏好系统的“客户端”。必须在某处指定实际首选应用程序,而不可能是 xdg-open 本身。

您是否将 xdg-open 设置为 text/html 的首选应用程序,还是由您的发行版完成的?

答案3

问题似乎出在 Dolphin 中的错误设置,其中 html 文件的默认“打开方式”操作是 xdg-open,我猜这导致了无限循环。将默认程序改为 Firefox 后,它就可以正常工作了。

我原本以为在“系统设置/默认程序”中选择 Firefox 就足够了,但显然不是。

相关内容