私が見つけたほとんどすべてのページは説明なしでログインした後、Xorgを自動的に起動します。たとえば、次のようになります~/.bash_profile
。
if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
exec xinit
fi
$XDG_VTNR
現在、TTY番号を取得する変数であると考えましたが、tty
同じ目的を果たすコマンドがすでに呼び出されています。
私の質問:
- 何ですか
$XDG_VTNR
?いつ、どこで設定しますか? - この変数の公式文書はどこにありますか?
tty
組み込みコマンドであり、$XDG_VTNR
Xorgが提供するのに、なぜ人々は組み込み$XDG_VTNR
コマンドの代わりにそれを使用することを選択しますかtty
?
答え1
何ですか
$XDG_VTNR
?いつ、どこで設定しますか?
これはPAMモジュールによって設定され、pam_systemd
systemdを使用するマシンにのみ設定されます。いいえsystemdに依存したくない場合は、スクリプトでそれに依存してください。
systemdを使用するシステムでは、$XDG_VTNR
グラフィックモード(経由など)とテキストモードセッション(経由)で設定が行われます。lightdm
gdm
/bin/login
この変数の公式文書はどこにありますか?
内部にpam_systemd(8)
マンページ。
tty
組み込みコマンドであり、$XDG_VTNR
Xorgが提供するのに、なぜ人々は組み込み$XDG_VTNR
コマンドの代わりにそれを使用することを選択しますかtty
?
1)tty
組み込みプログラムではなくスタンドアロンプログラムであり、$XDG_VTNR
Xorgでは提供していません。
2)それらはまったく異なるものであるからです。マニュアルページにはっきりと示されているように、tty(1)
GUIセッションの名前や実行中の仮想端末の名前ではなく、標準入力に接続されている端末の名前が表示されます[1]。考えてみてください:
$ script -q /dev/null
$ tty
/dev/pts/5
$ script -q /dev/null
$ tty
/dev/pts/6
$ tty </dev/zero
not a tty
[1] これXDG_VTNR
も信頼できる指標ではありません。
答え2
XDG_VTNR
あまり文書化されていない環境変数。 Systemdはそれを有効/設定します。systemd.exec
およびマニュアルページを参照してくださいpam_systemd
。一部のディスプレイマネージャもこれを有効/設定します。一部のX11起動スクリプトはこれを有効/設定します。
からsystemd/pam_systemd.c
:
if (vtnr > 0) {
char buf[DECIMAL_STR_MAX(vtnr)];
sprintf(buf, "%u", vtnr);
r = update_environment(handle, "XDG_VTNR", buf);
if (r != PAM_SUCCESS)
return r;
}
コンソールだけでなく、仮想端末(VT)からX11セッションを開始できます。このXDG_VTNR
変数はVT番号を指定します。
DISPLAY
グラフィックと非グラフィックログインの両方でコードスニペットを実行できるため、追加のテストが必要です。 X11セッション内で開始されたシェル(端末など)には同じ値が設定されているため、XDG_VTNR
X11を起動しようとすることを避ける必要があります。
このexec
コマンドはログインシェルをX11セッションに置き換えます。これは、X11セッションが終了するとログアウトすることを意味します。