在背景執行 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 仍然是一個很好的改變。

相關內容