web-dev-qa-db-ja.com

PDFでリンクをクリックすると、何千ものxdg-openプロセスが生成されます

私はPDF Webページへのリンクがあり、以前は機能していました(xdg-openを介してFirefoxでリンクを開きます)。しかし、ここでクリックすると、文字通り数千xdg-openプロセスが開始され、plasma-desktopが100%cpuで実行されます。

これのトラブルシューティングを開始する方法がわかりません。この問題の原因は何ですか?

問題の例PDFは ここ です。

これが何が起こるかのスクリーンショットです。何千ものxdg-openインスタンスによるタスクバーの破損に注意してください Here is a screenshot of what happens. Note the corrupted taskbar due to thousands of xdg-open instances

2
Supernormal

犯人はDolphinの不適切な設定だったようです。HTMLファイルのデフォルトの「名前を付けて開く」アクションはxdg-openでしたが、これにより無限ループが発生したと思います。デフォルトのプログラムを代わりにFirefoxに変更すると、期待どおりに動作します。

「システム設定/デフォルトプログラム」でFirefoxを選択すれば十分だと思ったでしょうが、どうやらそうではありませんでした。

0
Supernormal

同じ問題が発生しましたが、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を見つけました.htmlQDesktopServices::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)
3
Rob W

はい、xdg-openを優先アプリケーションにしないでください。 xdg-open isの仕事は、好ましいアプリケーションを見つけるためです。無限の再帰が起こります。

言い換えれば、xdg-openはmime/apps設定システムの「クライアント」です。実際に何がis優先アプリケーションであるかをどこかに指定する必要があり、それはおそらくそれ自体xdg-openにすることはできません。

Xdg-openをtext/htmlの優先アプリとして設定しましたか、それともディストリビューションが行いましたか?

1
David Faure