xdg-mime query default inode/directory
正确地给了我:
nemo.desktop
正如我所期望的,并且希望如此。
但
xdg-open $HOME
给出错误:
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
...并打开 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
我遇到了完全相同的问题。我只需安装(仅此而已)
即可解决问题...gvfs-bin
sudo apt install gvfs-bin
我发现了这一点,因为在用户的日志文件中阿米亚斯内容如下:
gvfs-open /home/amias
但是我的系统上没有安装 gvfs-open。
安装后gvfs-bin
,就可以工作了!
要设置新的文件关联(例如使用 Nemo 关联文件夹),您可以执行以下操作:
gvfs-mime --set inode/directory nemo.desktop
-干杯
答案2
好的,从这篇文章来看,似乎已经为遇到类似问题的人发布了一个补丁: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=810587
在本文中,该人遇到了:
“正则表达式中未转义的左括号已被弃用,在正则表达式中传递;在 /usr/bin/run-mailcap 第 528 行的 m/%{ <-- HERE (.*?)}/ 中用 <-- HERE 标记。”
运行 nmh 时,它看起来与您的错误消息类似,只是程序不同。因此,我建议运行:
sudo apt-get upgrade;sudo apt-get dist-upgrade
因为受影响的软件包可能有可随补丁提供的升级版本。
我希望这有帮助。
注意:这将升级所有可以升级的软件包(无论如何这都是一件好事),所以如果有多个软件包想要升级,请不要感到惊讶。
答案3
xdg-open 是一个 shell 脚本,因此您可以使用 -x 对其进行调试。
bash -x /usr/bin/xdg-open $HOME
这给了我这样的输出
+ 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
这是来自 64 位 16.04 上的 xdg-open 的工作安装。
我已经向你展示了我的,现在你向我展示你的。
编辑:
查看您的输出,我可以看到 open_generic_xdg_mime 无法返回 mime 类型,这导致脚本无法选择正确的服务。一个简单的解决方法是创建一个名为 open_generic_xdg_mime 的脚本,并让其针对其输入运行“file -i”,这将为您提供 mime 类型,但您需要使用 cut 之类的方法稍微整理一下输出。如果您需要帮助,请告诉我。
答案4
问题在于gvfs-info
已被弃用而造成的。
635 号线xdg-mime用于gvfs-info
gnome。
bash gvfs-info "$1" 2> /dev/null | grep standard::content-type | cut -d' ' -f4
我尝试手动重新评估该行,结果如下:
gvfs-info ~/test.pdf|grep standard::content-type| cut -d' ' -f4
This tool has been deprecated, use 'gio info' instead.
See 'gio help info' for more info.
/usr/bin/gvfs-info: 10: [: ~/test.pdf: unexpected operator
/usr/bin/gvfs-info: 10: [: ~/test.pdf: unexpected operator
application/pdf
然后我尝试使用gio info
:
gio info ~/test.pdf|grep standard::content-type| cut -d' ' -f4
application/pdf
所以我暂时改变了信息_gnome()在xdg-mime用它来gio info
代替,然后,它就起作用了!
631 info_gnome()
632 {
633 if gvfs-info --help 2>/dev/null 1>&2; then
634 DEBUG 1 "Running gvfs-info \"$1\""
635 gnomevfs-info "$1" 2> /dev/null | grep standard::content-type | cut -d' ' -f4
636 elif gnomevfs-info --help 2>/dev/null 1>&2; then
637 DEBUG 1 "Running gnomevfs-info \"$1\""
638 gnomevfs-info --slow-mime "$1" 2> /dev/null | grep "^MIME" | cut -d ":" -f 2 | sed s/"^ "//
639 else
640 DEBUG 1 "Running gio info \"$1\""
641 gio info "$1" 2> /dev/null | grep standard::content-type | cut -d' ' -f4
642 fi
643 if [ $? -eq 0 ]; then
644 exit_success
645 else
646 exit_failure_operation_failed
647 fi
648 }