为新的 DISPLAY 打开额外的 X 会话

为新的 DISPLAY 打开额外的 X 会话

我正在编写和调试 X 的窗口管理器。

我希望能够在我的应用程序上运行 gdb。该应用程序需要 X 显示器。我希望并行进行两个会话:一个是我开发、运行 gdb 和应用程序的会话,另一个是我将应用程序重定向到的会话。

我尝试过多次VT。

  • 使用 gdm 登录我的开发会话
  • 使用 Ctrl+Alt+F3 转到另一个 VT(我使用的是 Ubuntu 20.04)
  • 开始一个新的 X 会话sudo X :2

最后一个命令会杀死其他所有内容,包括 tty2 中的开发会话和 tty1 中的 gdm 登录。我留下黑屏。

我也尝试过startx,但这会打开一个桌面环境(它看起来像 gnome)。我尝试将~/.xinitrc, 修改为unset XDG_RUNTIME_DIR && sleep 60, 但随后我在 60 秒内无法访问其他 tty。

unset XDG_RUNTIME_DIR && X :2并没有真正失败,而是立即返回。

如何在 TTY 中获得单独的 X 会话,以便可以从另一个 TTY 运行和调试我的应用程序?

答案1

奇怪的是,在我的 Ubuntu 20.04 上,我无法使用 启动第二个 X 服务器X :1 vt3 &,而不会使我的第一个服务器崩溃。

不过,我可以从 开始startx


我当前的解决方案:

~/.xinitrc

unset XDG_RUNTIME_DIR && xhost +local: && tail -f /dev/null

XDG_RUNTIME_DIR不混合文件,xhost允许其他 VT 中的程序输出到新 VT,tail等待而不执行任何操作。

在新的 VT (VT3) 中,我现在可以使用 .login 登录并启动 X 服务器startx

然后在我的第一个 VT (VT2) 中,我可以DISPLAY使用命令检查另一个 VT 的变量w,并使用我的应用程序运行 gdb:

DISPLAY=:1 gdb ./my_app

这绝对感觉像是一种解决方法。必须有一种方法可以启动新的 X 服务器而不杀死第一个服务器,使用X.但目前看来这功能足够了。

相关内容