Если после ввода startx на базовой станции с Linux вместо рабочего стола появляется чёрный экран или сообщение об ошибке, первым делом проверьте содержимое файла ~/.xinitrc — именно его читает xinit при запуске графического сеанса. Отсутствие исполняемой команды в последней строке этого файла — одна из самых частых причин мгновенного завершения сеанса.

Xinit — это стандартный механизм запуска X-сервера и клиентских программ в Unix-подобных системах. Он особенно востребован на базовых станциях и минималистичных рабочих местах, где не установлен тяжёлый дисплейный менеджер вроде GDM или SDDM, а графическое окружение поднимается вручную или через автологин. Ниже разберём, как устроен xinit, как его корректно настроить и как диагностировать типовые сбои.

Что такое xinit и как он работает

Программа xinit выполняет две задачи: запускает X-сервер и стартует первую клиентскую программу — обычно оконный менеджер или полноценное окружение рабочего стола. Утилита startx является оболочкой вокруг xinit и упрощает передачу параметров.

Порядок поиска конфигурации выглядит так: сначала xinit ищет пользовательский файл ~/.xinitrc, а если его нет — используется системный сценарий, обычно расположенный в каталоге /etc/X11/xinit/. Точный путь зависит от дистрибутива, поэтому сверяйтесь с документацией вашей системы.

Ключевое правило синтаксиса: все фоновые службы в .xinitrc запускаются с амперсандом, а последняя строка — это exec с основной программой сеанса. Когда эта программа завершается, xinit завершает и весь сеанс.

~/.fehbg &

picom &

exec i3

Настройка .xinitrc на базовой станции

Для типовой базовой станции без дисплейного менеджера создайте файл в домашнем каталоге пользователя. Минимальный рабочий вариант содержит всего одну строку — запуск оконного менеджера через exec.

Если требуется автозапуск служб — раскладки клавиатуры, композитора, фонового мониторинга станции — добавляйте их до строки exec и обязательно в фоне. Иначе выполнение сценария «застрянет» на первой же команде и до запуска окружения дело не дойдёт.

  • 🔧 Проверьте, что файл ~/.xinitrc существует и читается пользователем, под которым выполняется вход.
  • ⌨️ Команды настройки клавиатуры, например setxkbmap, размещайте до строки exec.
  • 🖥️ Убедитесь, что выбранный оконный менеджер действительно установлен в системе.
  • 📄 Последняя строка файла должна начинаться с exec — без амперсанда.

☑️ Проверка .xinitrc перед запуском

Выполнено: 0 / 5
⚠️ Внимание: не редактируйте системный сценарий xinit в /etc/X11/xinit/ под конкретного пользователя — изменения применятся ко всем учётным записям станции и могут быть перезаписаны при обновлении пакетов. Используйте пользовательский ~/.xinitrc.

Автоматический запуск X при входе

На базовых станциях часто требуется, чтобы графика поднималась сразу после входа в консоль, без ручного ввода startx. Классический подход — добавить условный запуск в профильный скрипт оболочки, например в ~/.bash_profile или ~/.zprofile.

Условие обычно проверяет, что вход выполнен на первой виртуальной консоли и X-сервер ещё не запущен. Точный вид проверки зависит от shell и дистрибутива; типовой вариант выглядит так:

if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then

exec startx

fi

💡

Если станция работает в киоск-режиме с одним приложением, укажите это приложение в .xinitrc вместо полноценного окружения — так вы сократите время загрузки и снизите число точек отказа.

Полный автоматический вход без ввода пароля настраивается отдельно — средствами getty или systemd-сервиса автологина. Эта процедура заметно различается между дистрибутивами и init-системами, поэтому ориентируйтесь на официальную документацию вашей системы.

📊 Как запускается графика на вашей рабочей станции?
Вручную через startx
Автозапуск из профиля shell
Через дисплейный менеджер
Станция работает без графики

Типичные ошибки и их диагностика

Чёрный экран после startx чаще всего означает, что сеанс запустился и тут же завершился. Первый источник информации — журнал X-сервера, который обычно находится в ~/.local/share/xorg/Xorg.0.log или /var/log/Xorg.0.log в зависимости от конфигурации системы.

Ищите строки, начинающиеся с (EE) — это ошибки сервера. Возможные причины: отсутствующий или несовместимый видеодрайвер, неверная строка exec в .xinitrc, недостаток прав у пользователя. Если станция работает на проприетарном драйвере, проверьте, что он собран под текущую версию ядра.

СимптомВозможная причинаЧто проверить
Мгновенный возврат в консольОшибка в .xinitrc или отсутствует execСинтаксис файла, наличие оконного менеджера
Чёрный экран без курсораПроблема с видеодрайверомСтроки (EE) в журнале Xorg
Ошибка прав доступа к серверуПользователь не входит в нужную группуЧленство в группах, настройки Xwrapper
Не применяется раскладкаsetxkbmap выполняется после exec или не выполняетсяПорядок строк в .xinitrc
Сеанс закрывается при выходе из приложенияПриложение указано последней строкой с execЭто штатное поведение xinit
💡

Диагностику xinit всегда начинайте с журнала Xorg и проверки последней строки .xinitrc — эти два источника закрывают большинство типовых сбоев.

Xinit или дисплейный менеджер: что выбрать для станции

Выбор зависит от сценария использования. Для однопользовательской базовой станции с фиксированным окружением xinit проще, прозрачнее и требует меньше ресурсов. Для машин с несколькими пользователями и разными окружениями удобнее дисплейный менеджер.

  • ⚡ Xinit — минимум зависимостей, полный контроль над сценарием запуска.
  • 👥 Дисплейный менеджер — удобен при нескольких учётных записях и сессиях.
  • 🔒 При автологине через xinit помните: любой, кто получил физический доступ к станции, попадает сразу в сеанс пользователя.
⚠️ Внимание: автоматический вход без пароля на станции, хранящей чувствительные данные или подключённой к производственной сети, создаёт риск несанкционированного доступа. Оценивайте угрозы физического доступа до настройки автологина.
Почему сеанс завершается, когда я закрываю терминал?

Если в .xinitrc последней строкой через exec запущен эмулятор терминала, его закрытие завершает всю сессию — так устроен xinit. Чтобы сеанс жил независимо от терминала, запускайте через exec оконный менеджер, а терминал открывайте уже внутри него.

Перенос конфигурации на другие станции

Одно из преимуществ xinit — вся логика запуска умещается в одном текстовом файле. Для тиражирования на парк однотипных базовых станций достаточно скопировать ~/.xinitrc и профильный скрипт, а затем проверить, что на целевых машинах установлены те же пакеты окружения.

Различия в видеооборудовании между станциями могут потребовать отдельных настроек драйверов — сам файл .xinitrc при этом обычно остаётся неизменным, меняется лишь системная часть конфигурации Xorg. Перед массовым развёртыванием протестируйте запуск на каждом типе аппаратной конфигурации.

💡

Храните .xinitrc в системе контроля версий вместе с остальными dotfiles — откат к рабочей конфигурации после неудачного эксперимента займёт секунды.

Часто задаваемые вопросы

Чем startx отличается от xinit?

Startx — это оболочка-скрипт вокруг xinit, которая подставляет разумные параметры по умолчанию и упрощает запуск. В большинстве случаев пользователю достаточно startx, а xinit вызывается им автоматически.

Где xinit ищет конфигурацию, если ~/.xinitrc отсутствует?

Используется системный сценарий из каталога /etc/X11/xinit/. Точное имя файла и его содержимое зависят от дистрибутива — сверяйтесь с документацией вашей системы.

Почему команды после exec в .xinitrc не выполняются?

Инструкция exec заменяет текущий процесс указанной программой, поэтому всё, что написано после неё, игнорируется. Строка с exec должна быть последней в файле.

Можно ли запускать несколько оконных менеджеров через один .xinitrc?

Одновременно — нет: exec запускает один сеанс. Но можно создать несколько вариантов файла или параметризованный скрипт, который выбирает окружение по переданному аргументу.

Безопасно ли использовать xinit с автологином на общедоступной станции?

Только в изолированных сценариях вроде киосков без доступа к чувствительным данным. Для станций с конфиденциальной информацией используйте вход с паролем и оценивайте риски физического доступа.