正如所讨论的这里,gtk-launch 可以直接启动应用程序,也可以在终端窗口中启动应用程序,具体取决于文件是否.desktop
指定应用程序在终端中运行。在我看来,这个终端不是x-terminal-emulator
来自替代系统的(当我更新替代系统时它不会改变)。
有没有办法指定gtk-launch
应使用哪个终端模拟器?
答案1
如果没有解决方法似乎不可能。
https://askubuntu.com/a/294430
Gtk-launch(gtk的一部分)x-terminal-emulator
完全不相关。在我的例子中,glib2 2.68.0(在 gtk-launch 之后)的终端选择逻辑硬编码在prepend_terminal_to_vector()在 gio/gdesktopappinfo.c 中。
# Most preferred
gnome-terminal -- APP ARG1 ARG2 ...
# Then
mate-terminal -x APP ARG1 ARG2 ...
xfce4-terminal -x APP ARG1 ARG2 ...
# After that
tilix -e APP ARG1 ARG2 ...
konsole -e APP ARG1 ARG2 ...
nxterm -e APP ARG1 ARG2 ...
color-xterm -e APP ARG1 ARG2 ...
rxvt -e APP ARG1 ARG2 ...
dtterm -e APP ARG1 ARG2 ...
# Last resort
xterm -e APP ARG1 ARG2 ...
我的机器上的一个肮脏的解决方法
我想调用alacritty -e ...
1. 创建一个虚拟的 gnome 终端 (α)
sudo install -vDm755 /dev/null /usr/local/bin/gnome-terminal
2a.如果你还没有gnome-terminal
安装,请将以下内容放入α
#!/bin/bash
[ x"$1" = x"--" ] || { exec /usr/bin/gnome-terminal "$@"; exit 0; }
shift
TITLE="$(basename "$1")"
if [ -n "$TITLE" ]; then
/usr/bin/alacritty -t "$TITLE" -e "$@"
else
/usr/bin/alacritty -e "$@"
fi
2b.如果已经gnome-terminal
安装,则将以下内容放入α中
#!/bin/bash
[ x"$1" = x"--" ] || exit 1
shift
TITLE="$(basename "$1")"
if [ -n "$TITLE" ]; then
/usr/bin/alacritty -t "$TITLE" -e "$@"
else
/usr/bin/alacritty -e "$@"
fi
答案2
从 GLib 2.75.0 开始,不再需要 gnome-terminal 解决方法。这犯罪使得可以使用xdg-terminal-exec
包装器选择您选择的终端。
xdg 终端执行
有一个提议了解 freedesktop.org 如何指定启动终端的接口。以及拟议的实施方案xdg 终端执行
但是,由于目前这只是一个提案,因此编写自定义xdg-terminal-exec
包装器应该是安全的。
例子
脚终端
ln -sf /usr/bin/foot $HOME/.local/bin/xdg-terminal-exec
活泼
xdg-terminal-exec
#!/usr/bin/env bash
exec alacritty -e "$@"