【问题标题】:How to programmatically determine default applications in linux如何以编程方式确定 linux 中的默认应用程序
【发布时间】:2012-01-06 20:44:16
【问题描述】:

在linux中,如何确定默认的文本编辑器、终端等?

是否因发行版而异?

【问题讨论】:

  • 好的,看起来系统使用了一个名为 defaults.list 的文件。因此,找出系统正在使用的 defaults.list 应该可以解决这个问题。如果有人有任何提示,请继续

标签: python linux shell default-programs


【解决方案1】:

我之前以一种相当丑陋的方式以编程方式访问了该列表,我确信这不是最好的方式。这些选项存储在一个名为 defaults.list 的文件中(我认为通常是这种情况)。该位置不太通用,我认为它在我的 ubuntu 系统上的 /usr/share/applications/ 中,尽管我认为它确实出现在其他地方。然后我将其视为文本文件。

【讨论】:

    【解决方案2】:

    解析顺序是$EDITOR -> editor -> 一些预定义的控制台编辑器列表。在 Debian/Ubuntu 上,sensible-editor(以及sensible-browsersensible-pager)将为您进行查找,包括查看正确的环境变量。类似的变量有$PAGER$SHELL$BROWSER。要查找文件关联,您可以使用xdg-open

    【讨论】:

      【解决方案3】:

      我认为默认 编辑器或终端的概念没有意义。对于编辑器,在定义时有使用$EDITOR 的约定。

      在 Debian 和相关系统(例如 Ubuntu、Mint)上,您有像 /usr/bin/editor/usr/bin/x-terminal-emulator 符号链接(通过 /etc/alternatives/ 中的符号链接)到某些系统默认值的路径。

      另见Dacav's answer

      【讨论】:

        【解决方案4】:

        每个用户的环境变量告诉你。

        • $EDITOR 为您提供作为文本编辑器启动的命令;
        • $BROWSER 为您提供浏览器
        • $PAGER 为您提供寻呼机(例如,或多或少)。

        但这对命令行软件有效,而桌面环境通常使用它们自己的(内部)变量。

        在python中你也可以使用os.getenv读取环境变量。

        【讨论】:

        • 所以我应该能够(在 shell 中)回显 $EDITOR 以查看它是什么?我刚试过,它只是给了我一个空白行
        • 确实是的。它的定义不是强制性的。我想如果它不存在,它会默认使用一些基于发行版的值。在这种情况下我不知道如何获得它。
        【解决方案5】:

        这适用于 ubuntu/gnome:

        >>> query_lines = subprocess.check_output(['update-alternatives',
                                                   '--query',
                                                   'gnome-text-editor']).split('\n')
        >>> bestlist = filter(lambda l: 'Best' in l, query_lines)
        >>> bestlist[0].split()[1]
        '/usr/bin/gedit'
        

        如果不在 gnome 上,你至少可以得到命令行编辑器:

        >>> query_lines = subprocess.check_output(['update-alternatives',
        ...                                        '--query',
        ...                                        'editor']).split('\n')
        >>> bestlist = filter(lambda l: 'Best' in l, query_lines)
        >>> bestlist[0].split()[1]
        '/bin/nano'
        

        【讨论】:

          【解决方案6】:

          从@bowler 的回答中得到提示,纯粹是 bash:

          editor=$(grep "text/plain" -r -i -I /usr/share/applications/defaults.list | awk -F';' '{print $1}' | awk -F'.desktop' '{print $1}' | awk -F'=' '{print $2}')
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-09
            • 1970-01-01
            • 2023-03-28
            • 2018-01-21
            • 2021-02-03
            • 1970-01-01
            相关资源
            最近更新 更多