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