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 を使用している可能性は高いです。