Если после ввода 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 перед запуском
⚠️ Внимание: не редактируйте системный сценарий 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 чаще всего означает, что сеанс запустился и тут же завершился. Первый источник информации — журнал 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 с автологином на общедоступной станции?
Только в изолированных сценариях вроде киосков без доступа к чувствительным данным. Для станций с конфиденциальной информацией используйте вход с паролем и оценивайте риски физического доступа.