xdg-open 自 16.04 升级后停止工作

bea*_*uxq 9 mime-type xdg-open

xdg-mime query default inode/directory
Run Code Online (Sandbox Code Playgroud)

正确给我:

nemo.desktop
Run Code Online (Sandbox Code Playgroud)

就像我期望的那样,并希望它如此。

xdg-open $HOME
Run Code Online (Sandbox Code Playgroud)

给出一个错误:

xdg-mime: mimetype argument missing
Try 'xdg-mime --help' for more information.
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /usr/bin/run-mailcap line 528.
Warning: program returned non-zero exit code #66
Run Code Online (Sandbox Code Playgroud)

...并打开 Audacious。

我尝试编辑 run-mailcap 行以转义大括号,从而消除了该错误消息。但这并不能解决问题。我仍然得到“缺少 mimetype 参数”并且打开了错误的程序。

我尝试卸载 Audacious,但它打开了一个不同的错误程序(git-cola 和 chrome)。

我试过了sudo apt-get install --reinstall xdg-utils,它没有改变任何东西。

编辑:更多信息,上述行为发生在 Cinnamon 和 Gnome 中,但不在 Lubuntu LXDE 中。在 LXDE 中,查询给出 nemo.desktop,而 xdg-open 不会在终端中产生任何错误信息,但它会打开 PCManFM(不是 nemo)。

这是错误或如何解决的线索吗?

小智 1

好吧,从本文来看,似乎已经为其他有类似问题的人发布了补丁: https://bugs.debian.org/cgi-bin/bugreport.cgi ?bug=810587

在这篇文章中,这个人遇到了:

“正则表达式中未转义的左大括号已被弃用,在正则表达式中传递;在 /usr/bin/run-mailcap 第 528 行由 <-- HERE in m/%{ <-- HERE (.*?)}/ 标记。”

运行 nmh 时,除了不同的程序之外,这似乎与您的错误消息类似。所以我建议运行:

sudo apt-get upgrade;sudo apt-get dist-upgrade
Run Code Online (Sandbox Code Playgroud)

因为受影响的软件包可能有带有补丁的升级版本。

我希望这有帮助。

注意:这将升级所有可以升级的软件包(无论如何,这都是一件好事),因此如果多个软件包想要升级,请不要感到惊讶。


Ami*_*ias 1

xdg-open 是一个 shell 脚本,因此您可以使用 -x 对其进行调试

bash -x /usr/bin/xdg-open $HOME
Run Code Online (Sandbox Code Playgroud)

这给了我这样的输出

+ check_common_commands /home/amias
+ '[' 1 -gt 0 ']'
+ parm=/home/amias
+ shift
+ case "$parm" in
+ '[' 0 -gt 0 ']'
+ '[' -z '' ']'
+ unset XDG_UTILS_DEBUG_LEVEL
+ '[' 0 -lt 1 ']'
+ xdg_redirect_output=' > /dev/null 2> /dev/null'
+ '[' x/home/amias '!=' x ']'
+ url=
+ '[' 1 -gt 0 ']'
+ parm=/home/amias
+ shift
+ case "$parm" in
+ '[' -n '' ']'
+ url=/home/amias
+ '[' 0 -gt 0 ']'
+ '[' -z /home/amias ']'
+ detectDE
+ unset GREP_OPTIONS
+ '[' -n Unity ']'
+ case "${XDG_CURRENT_DESKTOP}" in
+ '[' x = x ']'
+ '[' x '!=' x ']'
+ '[' xthis-is-deprecated '!=' x ']'
+ DE=gnome
+ '[' xgnome = x ']'
+ '[' xgnome = x ']'
+ '[' xgnome = xgnome ']'
+ which gnome-default-applications-properties
+ DE=gnome3
+ '[' xgnome3 = x ']'
+ DEBUG 2 'Selected DE gnome3'
+ '[' -z '' ']'
+ return 0
+ case "${BROWSER}" in
+ case "$DE" in
+ open_gnome3 /home/amias
+ gvfs-open --help
+ gvfs-open /home/amias
+ '[' 0 -eq 0 ']'
+ exit_success
+ '[' 0 -gt 0 ']'
+ exit 0
Run Code Online (Sandbox Code Playgroud)

这是来自 64 位 16.04 上 xdg-open 的有效安装。

我已经给你看了我的,现在你给我看看你的。

编辑:

查看您的输出,我可以看到 open_generic_xdg_mime 无法返回 mime 类型,这会阻止脚本选择正确的服务。一个简单的解决方法是创建一个名为 open_generic_xdg_mime 的脚本,并使其针对其输入运行“file -i”,这将为您提供 mime 类型,但您需要使用 cut 之类的工具稍微整理一下输出。如果您需要帮助,请告诉我。