xinit (Русский)
Из Википедии:
- Программа 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
.
Стандартный 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.-keeptty
. Подробнее в разделе Xorg (Русский)#Перенаправление журнала сеанса.Использование
Для запуска Xorg от имени обычного пользователя, выполните:
$ startx
Или если настроен #xserverrc:
$ xinit -- :1
-- :display_number
, где display_number
это 1
или более.Выбранный вами оконный менеджер (или окружение рабочего стола) теперь запустится правильно.
Для выхода из X, запустите функцию выхода вашего оконного менеджера (при условии, что он есть). Если нет такой возможности, запустите:
$ pkill -15 Xorg
$ 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 при входе в систему
Убедитесь, что 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 (Русский)#Запуск приложений без оконного менеджера.