问题描述
我想使用xdg-open
打开irc://
链接,如何设置所需的参数?
最佳答案
xdg-open基本上只是看您拥有的桌面环境,然后运行gnome-open,gvfs-open,xfce-open等。有关桌面环境的特定说明,请参见下文。
Gnome
Gnome使用gnome-open程序,该程序使用gconf存储所有内容。例如,在装有运行gnome-open的Ubuntu 10.10的计算机上,irx://blah会打开xchat,因为xchat包含一个gconf设置补丁,用于添加irc://处理程序。
这显示了gnome如何使用/desktop/gnome/url-handlers/
中的gconf设置来做到这一点。请参见xchat-2.8.8/src/common/dbus/apps_xchat_url_handler.schemas
作为示例。
KDE
对于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协议添加处理程序的示例。
次佳答案
我将使用magnet:
URI类型和传输(即bittorent的情况)对此进行描述,但是可以将相同的方法应用于任何方案或文件类型。
我也用Debian Jessie进行了检查,实际上我没有Ubuntu机器,但我认为它应该可以正常工作(至少对于xdg-open,请注意文件管理器可能会选择使用不同的逻辑)。
-
找出MIME类型字符串。对于文件MIME类型,可以使用file命令找到它:
$ file -i Broken_Blossoms.webm
Broken_Blossoms.webm: video/webm; charset=binary
$
对于上述文件,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
-
找出应用程序.desktop文件的名称。
通常它与”official”名称不同,而是小写版本,或者名称完全不同。已安装的.desktop文件位于/usr /share /applications下。由于它们是普通的文本文件,并且包含”official”名称,因此以下命令可以为您提供帮助:
$ grep "Transmission" -l -r /usr/share/applications
/usr/share/applications/transmission-gtk.desktop
$
该命令有效地表示“列出此目录下包含单词’Transmission’的文件”。某些应用程序可能仅为用户安装,在这种情况下,路径为
~/.local/share/applications
。如果您有”strange”应用程序,可能根本没有该文件,则可以始终创建一个文件(并可能将其发送给应用程序开发人员)。一种简单的方法是复制一个现有字段,重写您了解的字段,然后删除您不了解的字段。有关详细信息,请参考specification。
-
使用xdg-mime命令进行分配:
$ xdg-mime default transmission-gtk.desktop x-scheme-handler/magnet
$
请注意,无论文件实际位于何处(/usr/share/applications、~/.local/share/applications …),您始终仅使用名称,而不使用完整路径。
通常,该命令不会输出任何内容-可以。如果要验证您刚才所做的事情,或者查看当前分配给任何MIME类型的内容而无需打开它:
$ xdg-mime query default x-scheme-handler/magnet
transmission-gtk.desktop
$
注意1:如果要检出其他MIME类型,可以查看/etc/mime.types。它不包含世界上所有的类型;例如URI处理程序,但它可以用于处理关联的”aggressive”形式。例如:
grep ^video/ | cut -d\t -f1 | xargs xdg-mime default vlc.desktop
将所有已知的视频格式与VLC相关联。
注意2:.desktop文件通常包含它们声称可以使用MimeType
字段处理的MIME类型的列表。 xdg-mime手册页指出,.desktop文件必须声明MIME类型,然后上述命令才能起作用,但是对我来说,即使缺少该字段,它也似乎可以起作用。 (我的意思是,将应用关联并启动应用程序-如果它确实可以处理类型则是另一个问题)。我不确定什么是缺点(也许将来xdg-mime的限制会更多)。
第三种答案
我想将postman
链接与手动安装的Postman应用程序(而不是chrome扩展名)相关联,以便可以从浏览器中打开Postman文档,如下所示:
我想要关联的链接如下所示:
postman://app/collections/import/39995-2b0394ab-b007-488d-9a0a...
要进行关联,我执行了以下步骤:
-
在
/home/andrzej.rehmann/software/postman/
中手动安装该应用程序(下载并解压缩tar.gz) -
在
/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
-
通过运行以下命令将
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