나는 사용자가 텍스트 인터페이스를 통해 로그인할 때 zsh
쉘의 초기화 순서에 매우( )/어느 정도( ) 익숙합니다 .bash
그러나 사용자가 그래픽 인터페이스(예: Linux의 소위 "디스플레이 관리자" 또는 표준 OS X 로그인)를 통해 로그인하는 경우 "그래픽 로그인" IOW는 어떻습니까?
나는 "로그인 셸"에만 사용해야 하는 파일( .zprofile
, , )에 특히 관심이 있습니다 .zlogin
. .profile
이는 텍스트 인터페이스를 통해 로그인할 때 "세션당 한 번"에 해당합니다.
그래픽 인터페이스를 통해 로그인할 때 "로그인 셸"이 있는지 여부가 불분명합니다. 누군가를 기다려도 .zprofile
. 어떤 시점에서 그래픽 로그인 시퀀스의 일부로 가져온 경우 이러한 파일을 가져온 결과(예: 내보낸 환경 변수) 설정이 나머지 세션에 어떤 영향을 미치는지 명확하지 않습니다.
예를 들어, 이러한 설정은 로그인 시 자동으로 실행되는 응용 프로그램이 표시하는 환경에 영향을 줍니까? 아니면 사용자가 나중에 데스크탑 아이콘을 클릭하여 실행하는 애플리케이션을 통해?
.zshenv
.zshrc
아니면 / .bashrc
1 에서 발생하는 설정은 어떻습니까 ? 자동 실행 및/또는 클릭하여 실행 애플리케이션이 표시하는 환경에 영향을 미치나요?
마지막 두 질문 중 하나에 대한 대답이 "기본적으로는 아님"과 같은 경우 후속 질문은 다음과 같습니다. (최소한) / (및 아마도 ) .zprofile
에서 수행된 설정이 모든 " Autostart"와 "Single" 애플리케이션을 "시작"하면 어떤 환경이 보이나요?.profile
.zlogin
zsh
저는 쉘과 두 운영 체제(Linux 및 OSX)에 대한 bash
이러한 질문에 대한 답변에 관심이 있습니다 .
1/ 가 /에 의해 명시적으로 얻어지는 것이 아니라 .zshrc
"대화형" 쉘의 / 내장 초기화 시퀀스의 일부로 /가 얻어지는 것으로 가정합니다 ..bashrc
zsh
bash
.zprofile
.profile
답변1
셸 프로필은 셸이 호출될 때만 적용됩니다. 그들에게는 마법 같은 것이 없습니다. 모든 프로세스는 환경을 변경할 수 있습니다. 대부분의 사람들은 그냥 읽어보지만, 다른 프로그램을 실행하는 프로그램이라면 애초에 환경을 바꿔야 할 이유가 쉽게 생길 수 있습니다.
모든 것은 다음으로 시작된다내부에, 또는 시스템에 있는 pid 1이 무엇이든 상관없습니다. 디스플레이 관리자를 시작하고 로그인 프롬프트를 제공하는 X 서버를 시작합니다. X11을 시작하는 순서에는 로그인 쉘이 포함될 필요가 없습니다.내부에fork(2)와 exec(2)는 /usr/bin/startx에서 호출할 수 있습니다. 로그인도 없고 아무것도 없습니다 .profile
. X 서버는 내보낸 환경만 상속받습니다.내부에.
X 서버 환경은 어떤가요? ps(1)을 사용하여 프로세스 환경을 추출할 수 있습니다. 더 쉽지만 결정적이지는 않습니다.SSHCPU 이름/usr/bin/env(어디CPU 이름X11 서버를 호스팅하는 컴퓨터의 이름입니다. X 서버에서 일반적으로 발생하는 것과 유사하게 sshd는 다음을 실행합니다.환경로그인 쉘을 생성할 필요가 없습니다.
그런 다음 디스플레이 관리자에 로그인할 때 수행되는 작업을 살펴보겠습니다. 프로세스를 포크하고 uid를 (아마도) 루트에서 사용자의 것으로 변경하고 세션 관리자를 시작합니다. 자세한 내용은 친절한 매뉴얼을 추천해 드립니다.
그 이후로 세션 관리자는 어떤 방법으로든 환경을 구축했습니다. 생성된 프로세스(명령 해석기 또는 기타 응용 프로그램을 "클릭"하여)는 해당 환경을 상속합니다. 세션 관리자는 아이콘별로 추가 환경 변수 값을 정의하는 방법을 제공할 수 있으며, 클릭한 항목에 의해 시작된 프로세스는 (셸과 같이) 시작 시 구성 파일을 통해 환경을 변경할 수 있습니다.
모든 것이 거기에 있습니다. 환경이 어떻게 형성되는지 이해하려면 환경을 만드는 일련의 프로세스를 "그냥" 따르고 각 프로세스가 환경에 어떤 영향을 미치는지 이해하면 됩니다. 불행하게도 이 체인은 운영 체제, 배포판, 기계 및 사용자 구성에 따라 다를 뿐만 아니라 특별히 잘 문서화되거나 도구화되어 있지도 않습니다. 예를 들어 sshd가 시작되기 전에 어떤 환경 변수가 설정될지 설명하는 문서를 찾거나 세션 관리자 환경을 표시하는 X11 클라이언트를 찾는 행운을 빕니다.