X11은 커널과 어떻게 상호 작용하고 로그인을 수행합니까?

X11은 커널과 어떻게 상호 작용하고 로그인을 수행합니까?

initLinux 커널과의 텍스트 기반 상호 작용에 대해 이해한 대로 start getty(또는 ) 라는 프로그램은 agetty아래의 TTY 장치 중 하나에 연결하고 /dev사용자 이름을 묻는 메시지를 표시합니다. 그런 다음 사용자의 비밀번호를 묻는 프로그램이 login실행되고, 맞으면 사용자가 선호하는 셸(예: bash또는 csh)을 시작합니다. 이 시점에서 bash는 TTY 장치를 통해 커널과 상호 작용합니다.

X11에서는 이 로그인 프로세스가 어떻게 작동합니까? X11은 TTY를 통해 커널과 상호 작용합니까?

답변1

쉘은 TTY 장치(연결되어 있는 경우)를 사용하여 사용자 입력을 얻고 출력을 생성하지만 그 외에는 그다지 많지 않습니다. 쉘이 TTY에 연결되어 있다는 사실은 에 의해 결정되고 getty에 의해 유지 됩니다 login. 대부분의 경우 쉘은 TTY에 연결되어 있는지 여부에 관심이 없습니다. 커널과의 상호작용이 발생합니다.~을 통해시스템 호출.

X11 서버는 로그인에 대해 알지 못합니다(쉘과 마찬가지로). X11의 로그인 프로세스는 두 가지 방식으로 작동합니다.

  • 사용자가 터미널에 로그인한 다음 X를 시작합니다(일반적으로 를 사용함 startx).
  • 또는 X 서버는 사용자에게 로그인과 비밀번호(또는 필요한 모든 인증 정보)를 묻는 "디스플레이 관리자"로 시작됩니다.

X11 서버가 입력을 얻고 출력을 생성하는 방식은 셸과 매우 다릅니다. 입력 측면에서 X는 마우스부터 시작하여 셸에는 없는 장치에 대해 알고 있습니다. 일반적으로 자체 드라이버를 사용하여 직접 관리합니다. 키보드의 경우에도 X에는 커널 처리를 보완하는 자체 드라이버가 있습니다. (제가 이해한 바에 따르면, 예를 들어 Linux에서는 X가 TTY 드라이버를 사용하여 키보드의 원시 입력을 읽은 다음 자체 드라이버를 사용하여 이를 해석합니다.) 출력 측에서 X는 커널의 도움 여부에 관계없이 TTY 장치를 통하지 않고 디스플레이 장치를 직접 구동합니다.

많은 시스템의 X11 서버하다하지만 커널과 동기화하려면 TTY 장치를 사용하십시오. 가상 터미널을 지원하는 시스템에서 X는 실행 중인 VT를 "예약"하고 VT 전환을 처리해야 합니다. 그 과정에서 몇 가지 다른 미묘함이 있습니다. 따라서 Linux에서 X는 TTY를 조정하여 GPM(마우스의 텍스트 모드 사용을 허용하는 프로그램)을 비활성화합니다. X는 VT를 공유할 수도 있습니다...

과거 일부 워크스테이션에서는 커널과의 명시적인 동기화가 많지 않았습니다. 를 실행하지 않으면 xconsoleX11 디스플레이 상단에 "텍스트 모드"로 커널 메시지가 표시될 수 있습니다.

답변2

커널은 로그인이나 누가 로그인했는지에 대한 개념이 전혀 없습니다. 커널이 관심을 갖는 것은 특정 사용자 ID(또한 커널의 업무와 관련이 없는 사용자 ID) 하에서 실행되는 프로세스가 있다는 것입니다. 터미널이나 X11 디스플레이 관리자의 getty인 로그인 프로그램은 루트로 실행된 다음 setuid() 및 관련 호출을 사용하여 로컬 확인자(NSS 및 libc 항목 - 커널 비즈니스가 아님)가 제안한 모든 UID에 대한 환경을 설정합니다. 방금 인증한 사용자에게 사용합니다.

관련 정보