У меня есть PDF со ссылкой на веб-страницу, которая использовалась для работы (она откроет ссылку в firefox через xdg-open). Однако, когда я нажимаю сейчас, буквально тысячи запущенных процессов xdg запускаются, а рабочий стол плазмы работает со скоростью 100%.
Я не знаю, как начать устранение неполадок. Что может вызвать эту проблему?
Пример проблемы PDF здесь.
Вот скриншот, что происходит. Обратите внимание на поврежденную панель задач из-за тысяч экземпляров xdg-open здесь
Я только столкнулся с той же проблемой, но затем для открытия ссылки 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:test@example.com
# (opened a KDialog window that printed the email address, as I specified)
Да, не делайте xdg-open предпочтительным приложением. Потому что задача xdg-open - найти предпочтительное приложение. Появляется бесконечная рекурсия.
Другими словами, xdg-open является «клиентом» системы предпочтений mime / apps. Нужно указать где-то, что на самом деле является предпочтительным приложением, и это не может быть xdg-open.
Вы установили xdg-open как предпочтительное приложение для текста / html, или это было сделано с помощью вашего дистрибутива?