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

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

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

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

答案1

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

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

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

#!/bin/sh
echo "New X session running on vt$X_FGCONSOLE" >"$ORIGINAL_TTY"
chvt "$ORIGINAL_FGCONSOLE"
exec ~/.xinitrc

然后运行

ORIGINAL_FGCONSOLE=$(fgconsole) ORIGINAL_TTY=$(tty) openvt -s -- sh -c 'export X_FGCONSOLE=$(fgconsole); startx ~/.xinitrc.chvt -- vt$X_FGCONSOLE'

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

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

ORIGINAL_FGCONSOLE=$(sudo fgconsole)

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

zzy ALL = (root) NOPASSWD: /bin/fgconsole

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

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

相关内容