환경 변수 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 세션이 종료되면 로그아웃된다는 의미입니다.

관련 정보