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 …
startx
xinit
XAUTHORITY
根据您运行此脚本的位置,您可能没有运行权限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 仍然是一个很好的改变。