在 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
请告诉我,是否可以通过某种方式(方法)调用由 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