Как в Linux X-сервер устанавливает связь с определенным tty (например, tty7), чтобы X-сервер мог получать ввод и рисовать на экране только тогда, когда этот tty находится на переднем плане? Как это обеспечивается?
(Ранее я опубликовал этот вопрос в форме, показанной ниже, на Stack Overflow, где он был закрыт.)
У меня есть несколько вопросов о том, что означает фраза "X-сервер работает на /dev/tty7". Я сделал несколько предположений о том, как это работает, и надеюсь, кто-нибудь сможет сказать мне, являются ли следующие утверждения истинными или ложными.
- /dev/tty7 обычно является управляющим терминалом для Xorg.
- Несмотря на то, что tty7 является управляющим терминалом для Xorg, он не «управляет» Xorg каким-либо значимым образом.
- Xorg получает ввод с клавиатуры и мыши напрямую, опрашивая /dev/input/... или что-то в этом роде, а не считывая с /dev/tty7. Тем не менее, /dev/tty7 также получает нажатия клавиш, что можно увидеть (например), запустив "xxd -p /dev/tty7" в эмуляторе терминала.
- Xorg рисует на экране, используя некий аппаратно-зависимый интерфейс, например, файл устройства, создаваемый драйвером, или отображенную область памяти ввода-вывода, а не записывая данные в /dev/tty7.
- Когда Xorg устанавливает видеорежим, драйвер tty автоматически прекращает рисовать на экране. Вот почему, когда вы нажимаете клавишу или выводите строку на /dev/tty7, вы не видите ее на экране.
- Xorg получает ввод с клавиатуры и мыши через /dev/events, даже если tty7 находится в фоновом режиме, но игнорирует его, если tty7 не находится на переднем плане.
- Все, что Xorg рисует на экране, становится видимым на мониторе только тогда, когда tty7 находится на переднем плане.
- Когда Xorg инициализирует видео (устанавливает видеорежим и т. д.), то, поскольку tty7 находится на переднем плане, настройки вступают в силу на tty7, а не на каком-либо другом терминале.