GNOME_TERMINAL_SCREEN 环境变量是什么?
What is the GNOME_TERMINAL_SCREEN environment variable?
我最近在我的一台计算机上安装了 Ubuntu 20.4 LTS。此版本 Ubuntu 默认使用 gnome 桌面管理器 (3.36.3) 和 gnome-terminal (3.36.2)。
在我打开的每个终端 window 中,GNOME_TERMINAL_SCREEN 环境变量被定义为“/org/gnome/Terminal/screen/some-guid”,其中每个终端 window 的 GUID 都是唯一的。
有人知道这个变量的用途吗?有什么方法可以使用 Xlib 或 XCB 中的 GUID 来识别终端的 X window?
$GNOME_TERMINAL_SCREEN
环境变量包含 D-Bus 的对象路径。
它用于在启动进程时在 Gnome 终端中寻址选项卡,并在其终止时发出信号。
您可以通过运行以下命令查看其D-Bus界面的相关部分:
dbus-send --session --type=method_call --print-reply \
--dest=org.gnome.Terminal "$GNOME_TERMINAL_SCREEN" \
org.freedesktop.DBus.Introspectable.Introspect
输出(为了相关性而删减):
[...]
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<!-- GDBus 2.64.6 -->
<node>
[...]
<interface name="org.gnome.Terminal.Terminal0">
<method name="Exec">
<arg type="a{sv}" name="options" direction="in"/>
<arg type="aay" name="arguments" direction="in"/>
</method>
<signal name="ChildExited">
<arg type="i" name="exit_code"/>
</signal>
</interface>
</node>
如果您 运行 dbus-monitor
打开和关闭 Gnome 终端选项卡,您可以看到正在运行的 D-Bus 通信。
X Window 系统不知道 D-Bus 领域发生了什么,据我所知,Gnome 终端不会通过 D-Bus 公开任何 X 特定信息.
我找到了一种将进程绑定到 运行ning 的 Gnome 终端的 X window 的方法,但它不太理想。尽管如此,它可能足以满足您的目的。
当打开 Gnome 终端 window 时,我们将生成一个标识值,并将其存储在 Gnome 终端 window 的 X 属性 和环境变量中。
然后我们可以稍后从进程的环境中获取环境变量(如果需要,通过 /proc/<pid>/environ
),并扫描 windows 以查找在 X 属性 中具有我们值的变量。
由于在打开新的 Gnome 终端时 window 还不存在,我们不能自己设置 属性,但是 gnome-terminal
命令接受一个选项 --role
,并将其值存储在 Gnome 终端 window.
的 WM_WINDOW_ROLE
X 属性 中
purpose of the WM_WINDOW_ROLE
X property是为了唯一标识属于同一个客户端的windows。
如果没有 --role
,Gnome Terminal 会为其分配一个唯一值,但您可以自己执行此操作。
所以这是一个 start-gnome-terminal
包装器,您可以从通常启动的键绑定中调用它 gnome-terminal
:
#!/bin/sh
FINDWIN_ROLE=findwin-role-$(xxd -p -l 16 < /dev/urandom)
export FINDWIN_ROLE
exec gnome-terminal --role "$FINDWIN_ROLE" "$@"
稍后要通过 windows 查找 属性,您可以使用 wmctrl -l
和 xprop
。
我最近在我的一台计算机上安装了 Ubuntu 20.4 LTS。此版本 Ubuntu 默认使用 gnome 桌面管理器 (3.36.3) 和 gnome-terminal (3.36.2)。
在我打开的每个终端 window 中,GNOME_TERMINAL_SCREEN 环境变量被定义为“/org/gnome/Terminal/screen/some-guid”,其中每个终端 window 的 GUID 都是唯一的。
有人知道这个变量的用途吗?有什么方法可以使用 Xlib 或 XCB 中的 GUID 来识别终端的 X window?
$GNOME_TERMINAL_SCREEN
环境变量包含 D-Bus 的对象路径。
它用于在启动进程时在 Gnome 终端中寻址选项卡,并在其终止时发出信号。
您可以通过运行以下命令查看其D-Bus界面的相关部分:
dbus-send --session --type=method_call --print-reply \
--dest=org.gnome.Terminal "$GNOME_TERMINAL_SCREEN" \
org.freedesktop.DBus.Introspectable.Introspect
输出(为了相关性而删减):
[...]
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<!-- GDBus 2.64.6 -->
<node>
[...]
<interface name="org.gnome.Terminal.Terminal0">
<method name="Exec">
<arg type="a{sv}" name="options" direction="in"/>
<arg type="aay" name="arguments" direction="in"/>
</method>
<signal name="ChildExited">
<arg type="i" name="exit_code"/>
</signal>
</interface>
</node>
如果您 运行 dbus-monitor
打开和关闭 Gnome 终端选项卡,您可以看到正在运行的 D-Bus 通信。
X Window 系统不知道 D-Bus 领域发生了什么,据我所知,Gnome 终端不会通过 D-Bus 公开任何 X 特定信息.
我找到了一种将进程绑定到 运行ning 的 Gnome 终端的 X window 的方法,但它不太理想。尽管如此,它可能足以满足您的目的。
当打开 Gnome 终端 window 时,我们将生成一个标识值,并将其存储在 Gnome 终端 window 的 X 属性 和环境变量中。
然后我们可以稍后从进程的环境中获取环境变量(如果需要,通过 /proc/<pid>/environ
),并扫描 windows 以查找在 X 属性 中具有我们值的变量。
由于在打开新的 Gnome 终端时 window 还不存在,我们不能自己设置 属性,但是 gnome-terminal
命令接受一个选项 --role
,并将其值存储在 Gnome 终端 window.
的 WM_WINDOW_ROLE
X 属性 中
purpose of the WM_WINDOW_ROLE
X property是为了唯一标识属于同一个客户端的windows。
如果没有 --role
,Gnome Terminal 会为其分配一个唯一值,但您可以自己执行此操作。
所以这是一个 start-gnome-terminal
包装器,您可以从通常启动的键绑定中调用它 gnome-terminal
:
#!/bin/sh
FINDWIN_ROLE=findwin-role-$(xxd -p -l 16 < /dev/urandom)
export FINDWIN_ROLE
exec gnome-terminal --role "$FINDWIN_ROLE" "$@"
稍后要通过 windows 查找 属性,您可以使用 wmctrl -l
和 xprop
。