下列的这些说明我成功打开了一个新的空窗口,并验证了已经出现了一个新的 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
...
新的空窗口看起来就像一块空白的画布,我很确定它是表面wayland-1
。
wayland-1
现在我尝试在该画布中打开一个 gnome 终端
WAYLAND_DISPLAY=wayland-1 gnome-terminal
WAYLAND_SOCKET=wayland-1 gnome-terminal
然而在这两种情况下,它都不会在画布中打开wayland-1
,而是在画布外部打开。
如何在嵌套的 mutter(wayland) 窗口中打开 gnome-terminal?
编辑:我能够在嵌套画布中打开 Firefox:
MOZ_DBUS_REMOTE=1 GDK_BACKEND=wayland WAYLAND_DISPLAY=wayland-1 firefox
但是,用 替换firefox
不起作用gnome-terminal
——gnome-terminal
仍然在 外面打开wayland-1
。
答案1
以下对我有用(从相对基本的 X11 会话开始):
export $(dbus-launch)
mutter --nested --wayland
WAYLAND_DISPLAY=wayland-0 gnome-terminal
如果您正在运行其他 Wayland 服务器,则wayland-0
可能wayland-1
如此。
答案2
在某些发行版中,gnome-terminal 运行“服务器”进程(在 Ubuntu 上,这是通过包装器脚本完成的,该脚本启动 /usr/libexec/gnome-terminal-server - 其他终端,如 mate-terminal,使用 --server 选项自动启动),该脚本拦截打开新终端进程的请求,并将它们作为同一单个服务器进程内的新窗口启动。因此,当您尝试在新的嵌套会话中启动新终端时,请求仍会被拦截,并且运行在 wayland-0 中的 gnome-terminal-server 进程会将其作为新窗口打开,该窗口位于其运行的同一显示器中,而不是您请求的显示器中。
最好的解决方法是使用选项传递一个唯一的应用程序 ID --app-id
。例如:
WAYLAND_DISPLAY=wayland-1 gnome-terminal --app-id app.x
这app.x
是一个“反向 DNS 样式指示符”,因此对于我们的目的而言,只要它包含两个字母部分,以句点分隔,就可以了。应用程序 ID 的完整规则可在此处找到https://developer.gnome.org/documentation/tutorials/application-id.html。如果您运行两个嵌套的显示服务器,则需要两个单独的 app-id,如app.x
和app.y
。
一些发行版(例如 Ubuntu)有一个包装器,当你运行 gnome-terminal 时会运行它,而真正的 gnome-terminal 可执行文件称为gnome-terminal.real
。运行它将生成一个新进程,而不是子窗口,但是仅有的如果没有 gnome-terminal-server 进程正在运行(如果存在,它将使用它,并且您将获得您试图避免的相同行为)。
还有一个--no-factory
选项,但它不再在手册页中列出,因此不应该期望它将来会继续工作。