
Насколько я понимаю, для текстового взаимодействия с ядром Linux init
запускается программа под названием 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...
На некоторых рабочих станциях в прошлом не было явной синхронизации с ядром; если вы не запускали xconsole
, вы могли получить сообщения ядра, отображаемые в «текстовом режиме» поверх дисплея X11.
решение2
Ядро не имеет абсолютно никакого понятия о входе в систему или о том, кто вошел в систему — его заботит только то, есть ли процессы, запущенные под определенным идентификатором пользователя (кто это — тоже не дело ядра!). Программа входа в систему, будь то getty на терминале или менеджер отображения X11, запускается от имени root, а затем использует setuid() и связанные с ним вызовы для настройки среды для любого UID, который локальный резолвер (NSS и libc — тоже не дело ядра) предложил использовать для пользователя, который только что прошел аутентификацию.