X11이 커널과 상호 작용하고 로그인을 수행하는 방법

X11이 커널과 상호 작용하고 로그인을 수행하는 방법

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

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(커널과 아무 관련도 없음)로 실행되는 프로세스가 있는지 여부에만 관심이 있습니다. 터미널의 getty이든 X11 디스플레이 관리자이든 상관없이 로그인 프로그램은 루트로 실행된 다음 setuid() 및 로컬 확인자(NSS 및 libc 항목 - 커널 비즈니스가 아님)가 제안하는 모든 UID에 대한 관련 호출을 사용합니다. 방금 인증한 사용자를 위한 환경입니다.

관련 정보