是否有一种惯用的方式在linux中打开图形终端?

是否有一种惯用的方式在linux中打开图形终端?,linux,bash,x11,Linux,Bash,X11,我有一些bash脚本可以打开图形终端(Gnome终端、LXTerminal、Konsole等) 然而,我想知道是否有一种惯用的方式来打开终端?类似于用于文件类型的XDG标准?否则,我将使用打开终端的特定方式硬编码引用,例如: lxterminal -e "ls" 一个更简洁的方法是使用一个“openTerminal”函数,它将命令作为参数之一运行 Debian使用虚拟软件包实现这一点,如中所述 为X Window系统提供终端仿真器的软件包,如果符合下列条件,则应在其“提供”控制字段中声明它们提

我有一些bash脚本可以打开图形终端(Gnome终端、LXTerminal、Konsole等)

然而,我想知道是否有一种惯用的方式来打开终端?类似于用于文件类型的XDG标准?否则,我将使用打开终端的特定方式硬编码引用,例如:

lxterminal -e "ls"
一个更简洁的方法是使用一个“openTerminal”函数,它将命令作为参数之一运行

Debian使用虚拟软件包实现这一点,如中所述

为X Window系统提供终端仿真器的软件包,如果符合下列条件,则应在其“提供”控制字段中声明它们提供了虚拟软件包
X-terminal-emulator
。他们还应将自己注册为
/usr/bin/x-terminal-emulator
,优先级为20。对于
/usr/share/man/man1/x-terminal-emulator.1.gz
,该备选方案应有一个指向相应手册页的从属备选方案

要成为x终端仿真器,程序必须:

  • 能够模拟DEC VT100终端或兼容终端

  • 支持命令行选项-e command,它创建一个新的终端窗口[106]并运行指定的命令,将命令行的其余部分全部解释为直接传递给exec的命令,方式与xterm相同

  • 支持命令行选项-T title,它使用窗口标题创建一个新的终端窗口

也就是说,该策略描述了自20世纪90年代中期以来与xterm的最低兼容性

它的成功有限:

  • 一些打包程序滥用优先级字段,使用远高于20的值
  • -e
    选项与您提到的某些终端的兼容性较差
除了Debian(和派生发行版,如Ubuntu),这种方法没有被广泛使用

我记得以前回答过这个问题,但现在看不到。下面是我的Debian/测试中的一个列表,注意到具有
40
优先级的每个包都不遵循以下策略:

$ sudo update-alternatives --config x-terminal-emulator

  Selection    Path                             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/xterm-dev                60        auto mode
  1            /usr/bin/evilvte                  20        manual mode
  2            /usr/bin/gnome-terminal.wrapper   40        manual mode
  3            /usr/bin/koi8rxterm               20        manual mode
  4            /usr/bin/konsole                  40        manual mode
  5            /usr/bin/lxterm                   30        manual mode
  6            /usr/bin/lxterminal               40        manual mode
  7            /usr/bin/mate-terminal.wrapper    30        manual mode
  8            /usr/bin/mlterm                   20        manual mode
  9            /usr/bin/mrxvt-full               10        manual mode
  10           /usr/bin/pterm                    20        manual mode
  11           /usr/bin/stterm                   15        manual mode
  12           /usr/bin/terminology              40        manual mode
  13           /usr/bin/urxvt                    20        manual mode
  14           /usr/bin/uxterm                   20        manual mode
  15           /usr/bin/xfce4-terminal.wrapper   40        manual mode
  16           /usr/bin/xterm                    20        manual mode
  17           /usr/bin/xterm-dev                60        manual mode

Press <enter> to keep the current choice[*], or type selection number: 
$sudo更新替代方案--配置x-terminal-emulator
选择路径优先级状态
------------------------------------------------------------
*0/usr/bin/xterm dev 60自动模式
1/usr/bin/evilvte 20手动模式
2/usr/bin/gnome-terminal.wrapper 40手动模式
3/usr/bin/koi8rxterm 20手动模式
4/usr/bin/konsole 40手动模式
5/usr/bin/lxterm 30手动模式
6/usr/bin/LX终端40手动模式
7/usr/bin/mate-terminal.30手动模式
8/usr/bin/mlterm 20手动模式
9/usr/bin/mrxvt全10手动模式
10/usr/bin/pterm 20手动模式
11/usr/bin/stterm 15手动模式
12/usr/bin/40手动模式
13/usr/bin/urxvt 20手动模式
14/usr/bin/uxterm 20手动模式
15/usr/bin/xfce4-terminal.wrapper 40手动模式
16/usr/bin/xterm 20手动模式
17/usr/bin/xterm dev 60手动模式
按可保留当前选项[*],或类型选择编号:

(当然,“xterm dev”包是一个本地开发包,没有发布)。

我认为规范的解决方案是允许用户通过配置文件或环境变量配置终端命令,并默认为
xterm
之类的内容。