在后台运行 startx 无需切换到新的虚拟终端

zzy*_*zzy 6 terminal x-server console

startx能够在新的虚拟终端中创建新的 X 服务器。但是,即使我在后台运行它,即。sudo startx &,它仍然自动切换到新的虚拟终端。是否可以在保留旧的的同时创建一个新的虚拟终端?

另外,我怎么知道新终端的文件名?(以前,我可以用tty在新窗口中检入,但如何在旧窗口中实现相同的功能?)

Gil*_*il' 1

假设您正在使用 X.org,这似乎不可能。X 服务器支持一个名为but 的选项,-novtswitch该选项仅在 X 服务器退出时应用,而不是在启动时应用。鉴于Fedora bug #246267中的讨论,似乎这个选项在启动时也适用,但它被删除了,因为它导致 X 服务器在很多硬件上崩溃:X 服务器在启动时需要访问视频硬件。

\n\n

下一个最好的办法是允许短暂闪烁到另一个 vt,然后切换回来。在 Linux 上,您可以openvt在新的虚拟终端中运行命令并chvt更改回来。

\n\n

创建一个脚本~/.xinitrc.chvt,其中包含

\n\n
#!/bin/sh\necho "New X session running on vt$X_FGCONSOLE" >"$ORIGINAL_TTY"\nchvt "$ORIGINAL_FGCONSOLE"\nexec ~/.xinitrc\n
Run Code Online (Sandbox Code Playgroud)\n\n

并运行

\n\n
ORIGINAL_FGCONSOLE=$(fgconsole) ORIGINAL_TTY=$(tty) openvt -s -- sh -c \'export X_FGCONSOLE=$(fgconsole); startx ~/.xinitrc.chvt -- vt$X_FGCONSOLE\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

(需要单独的脚本,~/.xinitrc.chvt而不是因为会弄乱包含通配符的参数,并且由于 startx 的另一个怪癖,您需要传递绝对路径。或者,直接调用并自行设置。)sh -c \xe2\x80\xa6startxxinitXAUTHORITY

\n\n

根据您运行此脚本的位置,您可能没有运行权限fgconsole(\xe2\x80\x9c无法获取引用控制台\xe2\x80\x9d的文件描述符),因为它需要能够打开/dev/console,但如果其他用户(实际上是 root)拥有它,则无法打开它。否则我不知道如何找到如何返回原始控制台。如果您有 root 访问权限,一种解决方案是替换ORIGINAL_FGCONSOLE=$(fgconsole) \xe2\x80\xa6

\n\n
ORIGINAL_FGCONSOLE=$(sudo fgconsole)\n
Run Code Online (Sandbox Code Playgroud)\n\n

并通过运行并添加以下行来授予您的帐户以fgconsoleroot 身份运行的权限visudo

\n\n
zzy ALL = (root) NOPASSWD: /bin/fgconsole\n
Run Code Online (Sandbox Code Playgroud)\n\n

在适用于您帐户的任何其他行之后。除非程序中出现错误,否则这是安全的fgconsole

\n\n

\xc2\xb9如果您使用 Linux,那么您正在使用 X.org,如果您不使用 Linux,那么您使用 X.org 仍然是一个很好的改变。

\n