如何设置新的 xdg-open 设置?

Oxw*_*ivi 34 xdg-open

我想用来xdg-open打开irc://链接,我如何制作所需的参数?

Alo*_*dal 22

我将使用magnet:URI 类型和传输(即 bittorent 的情况)来描述这一点,但相同的方法可以应用于任何方案或文件类型。

我也用 Debian Jessie 检查了这个,我实际上没有 Ubuntu 机器,但我相信它应该工作相同(至少对于xdg-open,请注意文件管理器可能选择使用不同的逻辑)。

  1. 找出 MIME 类型字符串。 对于文件 MIME 类型,您可以使用file命令找到它:

    $ file -i Broken_Blossoms.webm 
    Broken_Blossoms.webm: video/webm; charset=binary
    $
    
    Run Code Online (Sandbox Code Playgroud)

    对于上述文件,MIME 类型为video/webm.

    对于 URI 处理程序,类型为x-scheme-handler/<scheme>,其中 <scheme>冒号前的 URI 部分,例如“http”、“mailto”、“irc”或“magnet”。以下是有效 MIME 类型的示例:

    x-scheme-handler/http
    x-scheme-handler/irc
    x-scheme-handler/magnet
    x-scheme-handler/mailto
    
    Run Code Online (Sandbox Code Playgroud)
  2. 找出应用程序 .desktop 文件的名称。

    通常它与“官方”名称不同,而是它的小写版本,或者完全不同的名称。安装的 .desktop 文件位于 /usr/share/applications 下。由于它们是普通文本文件并包含“官方”名称,因此以下命令可以帮助您:

    $ grep "Transmission" -l -r /usr/share/applications
    /usr/share/applications/transmission-gtk.desktop
    $
    
    Run Code Online (Sandbox Code Playgroud)

    该命令实际上意味着“列出此目录下包含单词‘传输’的文件”。某些应用程序可能仅为用户安装,在这种情况下,路径将为 ~/.local/share/applications.

    如果您有可能根本没有文件的“奇怪”应用程序,您可以随时创建一个(并且可能将其发送给应用程序开发人员)。简单的方法是复制现有的字段,重写您理解的字段并删除您不知道的字段。有关详细信息,请参阅 规范

  3. 使用xdg-mime命令进行分配

    $ xdg-mime default transmission-gtk.desktop x-scheme-handler/magnet
    $
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,无论文件实际在哪里(/usr/share/applications、~/.local/share/applications...),您始终 只使用 name,而不是完整路径。

    通常该命令不会输出任何内容——没关系。如果您想在不打开它的情况下验证您刚刚执行的操作或查看当前分配给任何 MIME 类型的内容:

    $ xdg-mime query default x-scheme-handler/magnet
    transmission-gtk.desktop
    $
    
    Run Code Online (Sandbox Code Playgroud)

注 1:如果您想查看其他 MIME 类型,可以查看 /etc/mime.types。它不包含世界上所有的类型;例如 URI 处理程序,但它可以用于处理关联的“积极”形式。例如:

grep ^video/ | cut -d\t -f1 | xargs xdg-mime default vlc.desktop
Run Code Online (Sandbox Code Playgroud)

将所有已知的视频格式与 VLC 相关联。

注意 2: .desktop 文件通常包含他们声称能够使用MimeType字段处理的 MIME 类型列表。 xdg-mime 手册页说 .desktop 文件必须在上述命令生效之前声明 MIME 类型,但对我来说,即使该字段丢失,它似乎也能工作。(我的意思是,将应用关联并启动应用程序——如果它真的可以处理类型是另一个问题)。我不确定什么是缺点(也许将来xdg-mime会更加严格)。


Mar*_*mo- 19

xdg-open 基本上只是查看您拥有哪个桌面环境,然后运行 ​​gnome-open、gvfs-open、xfce-open 等。有关桌面环境的特定说明,请参见下文...

侏儒

Gnome 使用 gnome-open 程序,该程序使用 gconf 来存储所有内容。例如,在我的 Ubuntu 10.10 机器上运行 gnome-open irc://blah 会打开 xchat,因为 xchat 包含一个 gconf 设置补丁来添加 irc:// 处理程序。

gconf-editor 显示带有 xchat 配置的 irc

这显示了 gnome 如何做到这一点,在/desktop/gnome/url-handlers/. 见xchat-2.8.8/src/common/dbus/apps_xchat_url_handler.schemas,例如,

凯德

对于 KDE,您应该查看 /usr/share/kde4/services/ 中的 .protocol 文件,为您的新协议创建一个新的文件并将其放入 ~/.kde/share/kde4/services/,如果它非常有用那么考虑将其添加到包中作为其他用户的修复程序。

KDE 使用 kde-open 或 kfmclient 取决于可用的内容和您拥有的 KDE 版本。

XFCE

XFCE 使用一个叫做 exo-open 的程序,这个程序没有任何方法来配置它或添加 uri 处理程序。查看源代码显示,它使用桌面文件仅指定三种类型的程序。TerminalEmulator、WebBrowser 和 EmailClient。

使用 XFCE4(可能还有其他),可以配置 xdg-open 来定义自定义协议处理程序。在某些情况下,您必须创建/编辑以下文件:

~/.local/share/applications/protocolhandler.desktop ~/.local/share/applications/mimeapps.list

stackexchange.com 2上提供了一个为 ed2k 协议添加处理程序的示例。

  • *xdg-open 基本上只是查看您拥有的桌面环境,然后运行 ​​gnome-open、gvfs-open、xfce-open 等。* --- 我不这么认为。首先,手册页没有说,其次,xdg-open 在没有桌面环境的情况下也能完美运行。例如,我将它与 i3 窗口管理器一起使用。 (8认同)

And*_*ann 7

我想将postman链接与我手动安装的 Postman 应用程序(不是 chrome 扩展程序)相关联,以便我可以像这样从浏览器打开 postman 文档:

在此处输入图片说明

在此处输入图片说明

我想关联的链接如下所示:

postman://app/collections/import/39995-2b0394ab-b007-488d-9a0a...
Run Code Online (Sandbox Code Playgroud)

要进行关联,我执行了以下步骤:

  1. 手动安装应用程序(下载并解压 tar.gz) /home/andrzej.rehmann/software/postman/
  2. 在中创建桌面文件 /usr/share/applications/Postman.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Postman
Icon=/home/andrzej.rehmann/software/postman/app/resources/app/assets/icon.png
Exec="/home/andrzej.rehmann/software/postman/Postman" %u
Comment=Develop with pleasure!
Categories=Development;
Terminal=false
StartupWMClass=Postman
Run Code Online (Sandbox Code Playgroud)
  1. postman通过运行将xdg 链接与应用程序关联:

xdg-mime default Postman.desktop x-scheme-handler/postman


如果有人感兴趣,我已经修改了这个配置:https : //github.com/hoto/ansible-home-fedora/blob/fedora/roles/postman/tasks/postman_installer.yml