如何以编程方式确定linux中的默认应用程序

时间:2012-01-06 20:44:17

标签: python linux shell default-programs

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

它是否因发行版而异?

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

每用户环境变量告诉您​​。

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

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

同样在python中,您可以使用os.getenv读取环境变量。

答案 3 :(得分:1)

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

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

另见Dacav's answer

答案 4 :(得分:1)

这适用于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'

答案 5 :(得分:1)

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

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}')