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 仍然是一個很好的改變。