내가 찾은 거의 모든 페이지는 설명 없이 로그인한 후 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 세션이 종료되면 로그아웃된다는 의미입니다.