web-dev-qa-db-ja.com

新しい仮想端末に切り替えずにバックグラウンドでstartxを実行する

startxは、新しい仮想端末に新しいXサーバーを作成できます。ただし、バックグラウンドで実行しても、 Sudo startx &、それでも新しい仮想端末に自動的に切り替わります。古い仮想端末を維持したまま、新しい仮想端末を作成することはできますか?

また、新しい端末のファイル名を知るにはどうすればよいですか? (以前は、ttyを使用して新しいウィンドウでチェックインできますが、古いウィンドウで同じことをするにはどうすればよいですか?)

6
zzy

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'

startxはワイルドカードを含む引数を台無しにするため、~/.xinitrc.chvtではなく別のスクリプトsh -c …が必要です。また、startxの別の癖のために絶対パスを渡す必要があります。または、xinitを直接呼び出して、独自にXAUTHORITYを設定してください。)

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

ORIGINAL_FGCONSOLE=$(Sudo fgconsole)

fgconsoleを実行して次の行を追加することで、ルートにvisudoを実行する権限をアカウントに付与します

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

アカウントに適用される他の行の後。 fgconsoleプログラムのバグを除外しても安全です。

¹ Linuxを使用している場合はX.orgを使用しており、Linuxを使用していない場合でも、X.orgを使用していることには大きな変更があります。