我正在编写和调试 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
.但目前看来这功能足够了。