Cra*_*cks 5 gnome-terminal mutter wayland 20.04
按照这些说明,我成功打开了一个新的空窗口,并验证了一个新的 Wayland 套接字已出现:
$ ls -alt /run/user/1000
...
-rw------- 1 craig craig 120 Oct 31 13:54 .mutter-Xwaylandauth.RN8CT0
srwxrwxr-x 1 craig craig 0 Oct 31 13:54 wayland-0
-rw-rw---- 1 craig craig 0 Oct 31 13:54 wayland-0.lock
...
$ mutter --nested --wayland &
(mutter:24172): mutter-WARNING **: 13:55:28.911: WL: unable to lock lockfile /run/user/1000/wayland-0.lock, maybe another compositor is running
$ ls -alt /run/user/1000
...
-rw------- 1 craig craig 120 Oct 31 13:55 .mutter-Xwaylandauth.M06TS0
srwxrwxr-x 1 craig craig 0 Oct 31 13:55 wayland-1
-rw-rw---- 1 craig craig 0 Oct 31 13:55 wayland-1.lock
drwxr-xr-x 3 root root 60 Oct 31 13:54 ..
-rw------- 1 craig craig 120 Oct 31 13:54 .mutter-Xwaylandauth.RN8CT0
srwxrwxr-x 1 craig craig 0 Oct 31 13:54 wayland-0
-rw-rw---- 1 craig craig 0 Oct 31 13:54 wayland-0.lock
...
Run Code Online (Sandbox Code Playgroud)
新的空窗口看起来像一块空画布,我很确定它是wayland-1
.
wayland-1
现在我尝试在该画布中打开一个 gnome 终端
WAYLAND_DISPLAY=wayland-1 gnome-terminal
WAYLAND_SOCKET=wayland-1 gnome-terminal
Run Code Online (Sandbox Code Playgroud)
然而,在这两种情况下,它都不会在画布中打开wayland-1
,而是在画布之外打开。
如何在嵌套的 mutter(wayland) 窗口中打开 gnome-terminal?
编辑:我能够在嵌套画布中打开 Firefox:
MOZ_DBUS_REMOTE=1 GDK_BACKEND=wayland WAYLAND_DISPLAY=wayland-1 firefox
Run Code Online (Sandbox Code Playgroud)
然而,替换firefox
为gnome-terminal
不起作用 -gnome-terminal
仍然在wayland-1
.
小智 1
以下内容对我有用(从相对简单的 X11 会话开始):
export $(dbus-launch)
mutter --nested --wayland
WAYLAND_DISPLAY=wayland-0 gnome-terminal
Run Code Online (Sandbox Code Playgroud)
如果您有其他 Wayland 服务器正在运行,wayland-0
可能是wayland-1
等等。
小智 0
在某些发行版上,gnome-terminal 运行一个“服务器”进程(在 Ubuntu 上,这是通过启动 /usr/libexec/gnome-terminal-server 的包装脚本来完成的 - 其他终端,如 mate-terminal 会自动使用 --server 选项启动) )它拦截打开新终端进程的请求,并将它们作为同一单个服务器进程中的新窗口启动。因此,当您尝试在新的嵌套会话中启动新终端时,请求仍然会被拦截,并且在 wayland-0 中运行的 gnome-terminal-server 进程会在其运行的同一显示器中将其作为新窗口打开中,而不是您要求的那个。
解决这个问题的最佳方法是使用该--app-id
选项传递唯一的应用程序 ID。喜欢:
WAYLAND_DISPLAY=wayland-1 gnome-terminal --app-id app.x
这app.x
是一个“反向 DNS 样式指示器”,因此就我们的目的而言,只要它包含两个字母部分,并用句点分隔,我们就可以开始。应用程序 ID 的完整规则可以在https://developer.gnome.org/documentation/tutorials/application-id.html中找到。如果您运行两个嵌套的显示服务器,则需要两个单独的应用程序 ID,例如app.x
和app.y
。
一些发行版(例如 Ubuntu)有一个包装器,当您运行 gnome-terminal 时运行,真正的 gnome-terminal 可执行文件称为gnome-terminal.real
. 运行将生成一个新进程,而不是子窗口,但前提是尚未运行 gnome-terminal-server 进程(如果存在,它将使用它,并且您将得到与您试图避免的相同行为) 。
还有一个--no-factory
选项,但它不再在手册页中列出,因此不应期望在将来继续工作。
归档时间: |
|
查看次数: |
2587 次 |
最近记录: |