在 Linux 上启动默认终端

Starting the default terminal on Linux

请告诉我,是否可以通过某种方式(方法)调用由 default 安装的 Linux Terminal

现在,我 运行 xfce4-terminal 终端中的进程,指定此终端及其参数:

QProcess up;
QString cArg;
 
cArg="/tmp/cp.py -y " + ye;
up.start("xfce4-terminal", QStringList()<< "--geometry=120x40" << "--command" << "python3 "+ cArg << "-H");
up.waitForFinished();
up.close();

不,Linux 内核中没有通用的方法来查明系统默认安装了哪个(或是否安装了)终端仿真器。

尽管(相当普遍的)freedesktop.org 规范描述了如何将 MIME 类型与默认应用程序相关联,但据我所知,没有针对没有打开关联文件的默认应用程序的规范.每个具有“默认终端仿真器”概念的桌面环境都有自己的配置方式。

Debian 拥有“更新选项”系统,允许基于别名配置“默认”应用程序,并且它有一个创建别名的软件包 x-terminal-emulator,可用于配置默认终端仿真器.

以下是在您的程序中选择命令的合理策略:

  • 让用户配置命令。如果已配置,请使用最高优先级。
  • 使用XDG_CURRENT_DESKTOP环境变量,并为每个桌面环境实施逻辑以读取其配置以找出配置的默认模拟器。可用时将其用作第二高优先级。
  • 收集常用终端仿真器列表。将诸如 x-terminal-emulator 之类的别名放在列表中具有更高优先级。
  • 此列表以用户配置开始并以您的硬编码列表结束,检查每个命令并查看它是否可执行并选择第一个。如果用户配置了命令,但它不可执行,我推荐一个可选的错误消息。

您可以使用 i3 的 sensible-terminal 脚本。

https://github.com/i3/i3/blob/next/i3-sensible-terminal

虽然它是为 i3 制作的,但如果您阅读源代码,您会发现它非常简单并且不依赖于它,所以请随意在您想要的任何桌面环境中使用它。

不过,如果您不使用 i3,则可能需要删除最后一行(这并不重要,因为您不太可能根本没有安装终端)。

解释

它按顺序得到:

  • 您可能已在 non-standard $TERMINAL 环境变量中定义的终端
  • x-terminal-emulator 这是仅适用于 Debian 的类似实用程序
  • 硬编码终端列表,即mate-terminal gnome-terminal terminator xfce4-terminal urxvt rxvt termit Eterm aterm uxterm xterm roxterm termite lxterminal terminology st qterminal lilyterm tilix terminix konsole kitty guake tilda alacritty hyper