xinit (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи xinit. Дата последней синхронизации: 21 октября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Из Википедии:

Программа xinit позволяет пользователю вручную запускать дисплейный сервер X Window System. Сценарий startx(1) является фронтендом xinit(1).

xinit обычно используется для запуска оконного менеджера или среды рабочего стола. Хотя можно использовать xinit и для запуска других графических приложений без оконного менеджера, многие приложения ожидают наличия оконного менеджера, совместимого с EWMH. Экранные менеджеры, как правило, сами запускают Xorg и выполняют source файла xprofile.

Установка

Установите пакет xorg-xinit.

Настройка

xinit и startx принимают необязательный аргумент клиентской программы; смотрите раздел #Переопределение xinitrc. Если его не указать, то по умолчанию они ищут ~/.xinitrc для его запуска в качестве скрипта, запускающего клиентские программы.

xinitrc

~/.xinitrc удобен для запуска программ, зависящих от X, и установки переменных окружения при запуске X-сервера. Если он присутствует в домашнем каталоге пользователя, startx и xinit выполнят его. Иначе startx выполнит по умолчанию /etc/X11/xinit/xinitrc.

Примечание: Xinit имеет собственное поведение по умолчанию, вместо выполнения файла. Для подробностей,смотрите xinit(1).

Стандартный xinitrc запустит базовую среду с Twm, xorg-xclock и Xterm (при условии, что необходимые пакеты установлены). Поэтому, чтобы запустить другой оконный менеджер или среду рабочего стола, сначала создайте копию стандартного xinitrc в вашем домашнем каталоге:

$ cp /etc/X11/xinit/xinitrc ~/.xinitrc

Затем отредактируйте этот файл и замените программы по умолчанию нужными вам командами. Помните, что строки после команды exec будут игнорироваться. Например, чтобы запустить xscreensaver в фоновом режиме, а затем запустить openbox, пропишите:

~/.xinitrc
...
xscreensaver &
exec openbox-session
Примечание: Убедитесь, что последний блок if, взятый из файла /etc/X11/xinit/xinitrc, присутствует в вашем файле ~/.xinitrc, чтобы выполнялись скрипты из /etc/X11/xinit/xinitrc.d.

Длительно работающие программы, запускаемые перед оконным менеджером, такие как хранитель экрана и обои, должны либо сами переходить в фоновый режим, либо запускаться в фоновом режиме с помощью добавления знака & в скрипте. Если этого не будет, то скрипт будет останавливаться и ждать завершения работы каждой программы перед запуском оконного менеджера или среды рабочего стола. Обратите внимание, что некоторые программы не следует уводить фон, чтобы не возникало гонки, как, например, в случае с xrdb. Команда exec заменяет процесс скрипта на процесс оконного менеджера, так что X не завершится, даже если этот процесс перейдёт в фоновый режим.

xserverrc

Файл xserverrc — это скрипт, отвечающий за запуск X-сервера. И startx, и xinit запускают ~/.xserverrc, если он существует, иначе startx запустит стандартный /etc/X11/xinit/xserverrc.

Для поддержания аутентифицированного сеанса с logind и предотвращения обхода блокировщика экрана путём переключения терминалов Xorg должен запускаться на том же виртуальном терминале, в котором был выполнен вход в систему [1]. Поэтому рекомендуется указывать vt$XDG_VTNR в файле ~/.xserverrc:

~/.xserverrc
#!/bin/sh

exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR

Список всех доступных опций есть в Xserver(1).

Совет: Можно добавить -nolisten local после -nolisten tcp для отключения абстрактных сокетов X11, чтобы улучшить изоляцию. Небольшая справка о том, как это может повлиять на безопасность X11.
Примечание: Для повторного включения перенаправления вывода из X-сессии в лог Xorg добавьте опцию -keeptty. Подробнее в разделе Xorg (Русский)#Перенаправление журнала сеанса.

Использование

Для запуска Xorg от имени обычного пользователя, выполните:

$ startx

Или если настроен #xserverrc:

$ xinit -- :1
Примечание: xinit не обрабатывает несколько дисплеев, если уже запущен другой X-сервер. Для этого необходимо указать дисплей, добавив -- :display_number, где display_number это 1 или более.

Выбранный вами оконный менеджер (или окружение рабочего стола) теперь запустится правильно.

Для выхода из X, запустите функцию выхода вашего оконного менеджера (при условии, что он есть). Если нет такой возможности, запустите:

$ pkill -15 Xorg
Примечание: pkill убьет все запущенные экземпляры X. Для специального убивания оконного менеджера на текущем VT, используйте:
$ pkill -15 -t tty"$XDG_VTNR" Xorg

Смотрите также signal(7).

Советы и рекомендации

Переопределение xinitrc

Если у вас есть рабочий ~/.xinitrc, но хотите попробовать другие WM/DE, вы можете запустить его используя startx с указанием пути к оконному менеджеру:

$ startx /full/path/to/window-manager

Если оконный менеджер принимает аргументы, они должны быть взяты в кавычки в качестве части первого параметра startx:

$ startx "/full/path/to/window-manager --key value"

Обратите внимание что требуется полный путь. По желанию, вы можете также переопределить /etc/X11/xinit/xserverrc файл (который хранит значение по умолчанию X сервера) с пользовательскими опциями, путем добавления их после --, например:

$ startx /usr/bin/enlightenment -- -br +bs -dpi 96

Смотрите также startx(1).

Примечание: Поскольку скрипты в каталоге /etc/X11/xinit/xinitrc.d/ пропускаются, возможно, потребуется установить переменную окружения DISPLAY. Например, чтобы попробовать i3 на определённом дисплее, можно выполнить команду DISPLAY=:display_number startx /usr/bin/i3.
Совет: Это может быть использовано даже для запуска программ с графическим интерфейсом, но без каких-либо особенностей оконного менеджера. Смотрите также #Запуск приложений без оконного менеджера и Запуск программ в отдельном экране X.

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

Убедитесь, что startx корректно настроен.

В настройках вашей оболочки входа (например, ~/.bash_profile для Bash или ~/.zprofile для Zsh) добавьте следующий код:

if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" -eq 1 ]; then
  exec startx
fi

Вы можете заменить -eq 1 на -le 3 (от vt1 до vt3) если вы хотите использовать графические логины на более чем одном VT.

Альтернативные способы определения виртуального терминала — "$(tty)" = "/dev/tty1", что не позволяет выполнять сравнение с помощью -le, и "$(fgconsole 2>/dev/null || echo -1)" -eq 1, что не работает в последовательной консоли.

Команда exec обеспечивает выход пользователя из системы при выходе из X-сервера или его аварийном завершении. Если вы хотите оставаться в системе в системе после завершения сеанса X, удалите exec.

Смотрите также Fish (Русский)#Запуск X при входе и systemd/Пользователь#Автоматический логин в Xorg без экранного менеджера.

Совет: Этот метод можно объединить с автоматическим входом в виртуальную консоль.

Переключение между средами рабочего стола/оконными менеджерами

Если вы часто переключаетесь между различными средами рабочего стола или оконными менеджерами, может оказаться удобно использовать экранный менеджер или добавить в ~/.xinitrc код, упрощающий переключение.

В следующем примере ~/.xinitrc показано как запустить конкретную DE/WM с аргументом:

~/.xinitrc
...

# По умолчанию используем Xfce
session=${1:-xfce}

case $session in
    i3|i3wm           ) exec i3;;
    kde               ) exec startplasma-x11;;
    xfce|xfce4        ) exec startxfce4;;
    # Если аргумент не соответствует известному сеансу,
    # пытаемся выполнить его как обычную команду
    *                 ) exec $1;;
esac

Теперь передать аргумент session можно так:

$ xinit session

или

$ startx ~/.xinitrc session

Запуск приложений без оконного менеджера

Можно запустить только определенные приложения без оконного менеджера. Хотя, это будет полезно только для одного приложения, запущенного в полноэкранном режиме. Например:

~/.xinitrc
...

exec chromium

В качестве альтернативы можно запустить исполняемый файл напрямую из командной строки, как показано в разделе #Переопределение xinitrc.

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

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

Смотрите также Display manager (Русский)#Запуск приложений без оконного менеджера.

Перенаправление вывода при использовании startx

Смотрите Xorg (Русский)#Перенаправление журнала сеанса.