我有一个 PDF,其中包含一个网页链接,以前它可以正常工作(它会通过 xdg-open 在 Firefox 中打开链接)。但是,现在当我单击它时,实际上会启动数千个 xdg-open 进程,并且 plasma-desktop 的 CPU 占用率达到 100%。
我不知道如何开始排除故障。什么原因导致此问题?
问题 PDF 的示例如下这里。
答案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 就足够了,但显然不是。