新しい仮想端末に切り替えずにバックグラウンドで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(とは対照的に、別のスクリプトsh -c …が必要なのstartxは、ワイルドカードを含む引数が混乱し、startx の別の癖により絶対パスを渡す必要があるためです。または、直接呼び出して独自にxinit設定してください。)XAUTHORITY

このスクリプトを実行している場所によっては、実行権限がない可能性がありますfgconsole(「コンソールを参照するファイル記述子を取得できませんでした」)。これは、開く必要があるためです/dev/consoleが、他のユーザー(実際にはルート)が所有している場合は開くことができません。それ以外の場合は、元のコンソールに戻る方法を見つける方法がわかりません。ルートアクセスがある場合は、1つの解決策ORIGINAL_FGCONSOLE=$(fgconsole) …として、次のように置き換えることができます。

ORIGINAL_FGCONSOLE=$(sudo fgconsole)

そして、以下の行を追加して、アカウントfgconsoleにrootとして実行する権限を与えます。visudo

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

アカウントに適用される他の行の後。プログラムにバグがない限り安全ですfgconsole

¹ Linux を使用している場合は X.org を使用していることになりますが、Linux を使用していない場合でも X.org を使用している可能性は高いです。

関連情報