如何在没有任何环境的情况下正确且轻松地配置 `xdg-open`?

kra*_*mir 96 arch-linux configuration freedesktop mime-types files

我正在使用没有任何桌面环境的OpenBox 窗口管理器。

xdg-open行为怪异。它用firefox.

$ xdg-settings --list
Known properties:
  default-web-browser           Default web browser
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个简单的程序;类似于读取*.desktop文件/usr/share/applications/夹中的每个文件并自动设置 xdg 设置。

lza*_*zap 115

为什么不使用 xdg 本身的实用程序?

使 Thunar 成为默认的文件浏览器,即打开文件夹的默认应用程序。

$ xdg-mime default Thunar.desktop inode/directory
Run Code Online (Sandbox Code Playgroud)

使用 xpdf 作为默认 PDF 查看器:

$ xdg-mime default xpdf.desktop application/pdf
Run Code Online (Sandbox Code Playgroud)

这应该创建一个条目

[Default Applications]
application/pdf=xpdf.desktop
Run Code Online (Sandbox Code Playgroud)

在本地 MIME 数据库中~/.config/mimeapps.list

您的 PDF 文件现在应该用 xpdf 打开。

  • 似乎`defaults.list` 现在被称为`mimeapps.list`。请参阅 [the Arch Wiki](https://wiki.archlinux.org/index.php/Default_applications#XDG_standard) 以获取 `mimeapps.list` 的有效位置列表。 (8认同)
  • 最有用的答案,谢谢。最容易了解`defaults.list`,因此可以在需要时简单地手动编辑。 (3认同)
  • 要找出某个文件的 mimetype,请运行 `xdg-mime query filetype pathTofileYourInterestedIn` (2认同)

jas*_*yan 32

您可以在存储库中安装和使用perl-file-mimeinfoextra来管理 mimetypes。

打开所有.pdf文件的示例apvlv

/usr/bin/vendor_perl/mimeopen -d $file.pdf
Run Code Online (Sandbox Code Playgroud)

或在其他 Linux 发行版上,其中mimeopen不在/usr/bin/vendor_perl/但在以下$PATH目录之一中:

mimeopen -d $file.pdf
Run Code Online (Sandbox Code Playgroud)

然后,在提示下,输入应用程序:apvlv

  • 一旦我用 `mimeopen` 设置了默认值,`xdg-open` 就会按预期运行——在 `.pdf` 的情况下,它会用 `apvlv` 打开它们。 (3认同)
  • 有用。但它只打开文件。所以我的 `xdg-open` 未配置,使用 `xdg-open` 的应用程序无法正确打开文件。 (2认同)
  • 这在 Lubuntu 16.04 中对我不起作用。`sudo xdg-mime 默认 pluma.desktop text/plain` 给出 `touch:无法触摸“/home/user/.local/share/applications/mimeapps.list”:没有这样的文件或目录 /usr/bin/xdg-mime :807:/usr/bin/xdg-mime:无法创建/home/user/.local/share/applications/mimeapps.list.new:目录不存在`;`/usr/bin/vendor_perl/mimeopen -d $file.txt` 给出了 `bash: /usr/bin/vendor_perl/mimeopen: No such file or directory`。 (2认同)

ale*_*leb 10

您可以使用类似的方法xdg-mime为您的每个.desktop文件及其包含的 mimetypes生成适当的命令,然后执行您喜欢的命令。注意/usr/share/applications可能有子目录。

find /usr/share/applications ~/.local/share/applications -iname '*.desktop' -print0 | while IFS= read -r -d $'\0' d; do
  for m in $(grep MimeType "$d" | cut -d= -f2 | tr ";" " "); do
    echo xdg-mime default "'$d'" "'$m'"
  done
done
Run Code Online (Sandbox Code Playgroud)


enz*_*tib 8

在 Debian 上,您可以以 root 身份使用该命令

update-mime-database /usr/share/mime
Run Code Online (Sandbox Code Playgroud)

shared-mime-info安装了软件包。

  • 我试过了。它不起作用。我正在运行 Arch。 (2认同)

use*_*561 5

这就像@aleb's answer,但它适用于带有空格的桌面文件:

find /usr/share/applications ~/.local/share/applications -iname '*.desktop' -print0 | while IFS= read -r -d $'\0' d; do
  for m in $(grep MimeType "$d" | cut -d= -f2 | tr ";" " "); do
    echo xdg-mime default "'$d'" "'$m'"
  done
done
Run Code Online (Sandbox Code Playgroud)