如何使用 xdg 注册自定义协议?

jul*_*ien 27 linux firefox google-chrome xdg

今天早上我一直在努力尝试将应用程序与自定义协议相关联,即emacsclient 和 org-protocol

我从 webbrowser bookmarklet 调用这个协议,我得到以下行为:

在 Chromium 中,
“启动应用程序”对话框出现,并调用 xdg-open org-protocol://... 最终触发一个新的 Chromium 框架。

在 firefox 中,
我尝试将 network.protocol-handler.app.org-protocol 设置为空字符串或我的 emacsclient 路径,无论如何我收到以下错误消息:
“Firefox 不知道如何打开此地址,因为协议(组织协议)不与任何程序相关联”,甚至没有显示任何外部应用程序选择对话框。

我没有使用任何桌面环境,所以我需要严格使用 xdg 来完成这项工作,但是,尽管阅读了共享的 MIME 信息规范等,我仍然无法理解工作配置。

use*_*686 22

XDG 方法:创建emacsclient.desktop处理x-scheme-handler/org-protocolMIME 类型的文件:

[Desktop Entry]
Name=Emacs Client
Exec=emacsclient %u
Icon=emacs-icon
Type=Application
Terminal=false
MimeType=x-scheme-handler/org-protocol;
Run Code Online (Sandbox Code Playgroud)

(请注意MimeType=上面的行,它用于org-protocol:URI。)

将文件放入~/.local/share/applications或 中/usr/local/share/applications

您可能需要打开文件~/.local/share/applications/mimeapps.list并添加如下一行:

x-scheme-handler/org-protocol=emacsclient.desktop
Run Code Online (Sandbox Code Playgroud)

在该[Default Applications]部分下添加。

  • 你也可以通过 `xdg-mime default emacsclient.desktop x-scheme-handler/org-protocol` 来完成最后一步,这可能是更官方的方式。 (9认同)

sso*_*low 12

@grawity几乎是正确的,但他忽略了两个细节:

  1. 安装.desktop文件后,您可能需要手动运行sudo update-desktop-database. (如果您.desktop使用安装文件,这可能会为您完成xdg-desktop-menu install emacsclient.desktop

    这就是让我的 Firefox 显示“什么应该处理这个协议?”所需要的。对话框,而不仅仅是显示错误页面。

  2. 在提出这个问题时,有一个错误xdg-open导致它盲目地将 URL 传递$BROWSER到“通用”(非 KDE、非 GNOME、非 Xfce 等)桌面上,并且产生的行为正是@朱利安正在经历。

    它应该在 xdg-open 的现代版本中得到修复,但是,如果您的桌面由于某种原因没有使用现代版本,这是我用来解决问题的 xdg-open 版本/usr/local/bin


小智 0

至少在 Fedora 13 和各种基于 Debian 的发行版中,如果xdg-open不在受支持的桌面环境中运行,则会在浏览器中打开所有没有file://方案的 URL。它尝试检测要使用哪个浏览器的方式取决于发行版。

由于xdg-open只是一个 shell 脚本,您可以轻松地根据您的需要进行调整。