環境変数XDG_VTNRとは何ですか?

環境変数XDG_VTNRとは何ですか?

私が見つけたほとんどすべてのページは説明なしでログインした後、Xorgを自動的に起動します。たとえば、次のようになります~/.bash_profile

if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
  exec xinit
fi

$XDG_VTNR現在、TTY番号を取得する変数であると考えましたが、tty同じ目的を果たすコマンドがすでに呼び出されています。

私の質問:

  1. 何ですか$XDG_VTNR?いつ、どこで設定しますか?
  2. この変数の公式文書はどこにありますか?
  3. tty組み込みコマンドであり、$XDG_VTNRXorgが提供するのに、なぜ人々は組み込み$XDG_VTNRコマンドの代わりにそれを使用することを選択しますかtty

答え1

何ですか$XDG_VTNR?いつ、どこで設定しますか?

これはPAMモジュールによって設定され、pam_systemdsystemdを使用するマシンにのみ設定されます。いいえsystemdに依存したくない場合は、スクリプトでそれに依存してください。

systemdを使用するシステムでは、$XDG_VTNRグラフィックモード(経由など)とテキストモードセッション(経由)で設定が行われます。lightdmgdm/bin/login

この変数の公式文書はどこにありますか?

内部にpam_systemd(8)マンページ。

tty組み込みコマンドであり、$XDG_VTNRXorgが提供するのに、なぜ人々は組み込み$XDG_VTNRコマンドの代わりにそれを使用することを選択しますかtty

1)tty組み込みプログラムではなくスタンドアロンプ​​ログラムであり、$XDG_VTNRXorgでは提供していません。

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_VTNRX11を起動しようとすることを避ける必要があります。

このexecコマンドはログインシェルをX11セッションに置き換えます。これは、X11セッションが終了するとログアウトすることを意味します。

関連情報