xinit (Русский)
Файл ~/.xinitrc
представляет собой шелл-скрипт передаваемый xinit
посредством команды startx
. Он используется для запуска Среды рабочего стола, Оконного менеджера и других программ запускаемых с X сервером (например запуска демонов, и установки переменных окружений. Программа xinit
запускает Xorg сервер и работает в качестве программы первого клиента на системах не использующих Экранный менеджер.
Одной из основных функций ~/.xinitrc
является указание, какой клиент X Window System будет запущен каждому пользователю при вызове startx
или xinit
. Существует множество дополнительных настроек и команд, которые также могут быть добавлены в ~/.xinitrc
согласно вашей дальнейшей настройке системы.
Большинство DMs также используют подобный xprofile перед xinit.
Установка
Установите xorg-xinit, чтобы использовать xinit и startx.
Настройка
Если .xinitrc
присутствует в домашнем каталоге пользователя, startx и xinit выполнят его. Иначе startx выполнит по умолчанию /etc/X11/xinit/xinitrc
.
Это значение по умолчанию xinitrc запустит базовую среду с Twm, xorg-xclock и Xterm (при условии, что необходимые пакеты установлены). Поэтому, чтобы запустить другой оконный менеджер или окружение рабочего стола, сначала создайте копию по умолчанию xinitrc
в вашем домашнем каталоге:
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
Это делается так (вместо создания с нуля) чтобы сохранить некоторое желаемое поведение по умолчанию в исходном файле, например, поиске скриптов из /etc/X11/xinit/xinitrc.d
. Сценарии в этом каталоге без .sh
расширения не считаются исходным кодом.
Добавьте нужные команды и удалите/закоментируйте противоречивые строки. Помните, строки, следующие после exec
будут игнорироваться. Например, для запуска openbox:
~/.xinitrc
... if [ -d /etc/X11/xinit/xinitrc.d ] ; then for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do [ -x "$f" ] && . "$f" done unset f fi # twm & # xclock -geometry 50x50-1+1 & # xterm -geometry 80x50+494+51 & # xterm -geometry 80x20+494-0 & # exec xterm -geometry 80x66+0+0 -name login ## некоторые приложения, которые должны быть запущены в фоновом режиме xscreensaver & xsetroot -cursor_name left_ptr & exec openbox-session
.xinitrc
, чтобы выполнялись скрипты из /etc/X11/xinit/xinitrc.d
.Запуск
Долговыполняемые программы стартуют перед оконным менеджером, такие как заставки и обои приложения. Они должны либо сами выполняться параллельно, либо работать в фоновом режиме (добавьте знак &
). Иначе, сценарий остановится и будет ждать каждую программу, чтобы закончить перед запуском оконного менеджера. Обратите внимание, что некоторые программы не должны стартовать параллельно, во избежании потока ошибок, как в случае с xrdb. Подготовка exec
заменит процесс скрипта с процессом оконного менеджера, так что Х не завершится, даже если этот процесс распараллелен в фоне.
Для запуска Xorg от имени обычного пользователя, выполните:
$ startx
или
$ xinit -- :1 -nolisten tcp vt$XDG_VTNR
Выбранный вами оконный менеджер (или окружение рабочего стола) теперь запустится правильно.
Для выхода из X, запустите функцию выхода вашего оконного менеджера (при условии, что он есть). Если нет такой возможности, запустите:
$ pkill -15 Xorg
WM_PID=$(xprop -id $(xprop -root _NET_SUPPORTING_WM_CHECK \ | awk -F'#' '{ print $2 }') _NET_WM_PID \ | awk -F' = ' '{ print $2 }') kill -15 $WM_PID
Программа xprop
доступна в пакете xorg-xprop из Официальных репозиториев.
- Команды запускают Xorg на томже виртуальном терминале, в который вошёл пользователь. [1] Это поддерживает авторизованную сессию с
logind
, и предотвращает обход блокировщика экрана, при переключении терминалов. - Вы должны указать
vt$XDG_VTNR
в качестве опции командной строки для xinit чтобы сохранить права сессии (preserve session permissions). -
xinit не обрабатывает несколько сеансов, когда вы уже вошли в другой виртуальный терминал. Для этого необходимо указать сессию добавления
-- :session_no
. Если X уже запущен, то вы должны начать с: 1 или больше. - По умолчанию, экран X должен быть на том же терминале, где и произошел вход. Это обрабатывается
/etc/X11/xinit/xserverrc
по умолчанию. Смотрите General troubleshooting#Session permissions для подробностей. - Если вы хотите получить экран Х отдельно от консоли вызова сервера X, вы можете сделать это при помощи оболочки X сервера
/usr/lib/systemd/systemd-multi-seat-x
. Для удобства startx может быть настроен на использование этой оболочки, изменяя ваш~/.xserverrc
. - Если вы решите использовать xinit вместо startx, тогда вы несете ответственность за прохождение
-nolisten tcp
и обеспечение не сломанной сессии запуская X на другом tty. - Если X завершает с сообщением об ошибке "SocketCreateListener() failed", вам возможно потребуется удалить файлы сокетов в
/tmp/.X11-unix
. Это может произойти, если ранее Xorg был выполнен от root.
Автозапуск X при входе в систему
Для Bash, добавьте следующее в нижнюю часть ~/.bash_profile
. Если файл не существует, скопируйте шаблон-версию с /etc/skel/.bash_profile
. Для Zsh, добавьте в ~/.zlogin
(или в ~/.zprofile
).
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
- Вы можете заменить
-eq 1
на-le 3
(от vt1 до vt3) если вы хотите использовать графические логины на более чем одном VT. - Чтобы сохранить ссессию logind, Х должен всегда работать на томже терминале, где произошел Вход (логин). Это работает по умолчанию
/etc/X11/xinit/xserverrc
. -
xinit
может быть быстрее, чемstartx
, но нужны дополнительные параметры, например-nolisten tcp
. - Если вы хотите оставаться в системе, когда заканчивается Х сессия, удалите
exec
.
Смотрите также Fish#Запуск X при входе в систему и systemd/Пользователь#Автоматический логин в Xorg без экранного менеджера.
Автоматический вход в виртуальной консоли
Этот метод можно объединить с автоматическим входом в виртуальной консоли. При этом вы должны установить правильные зависимости для выполнения автологина Systemd чтобы убедиться, что dbus запускается до чтения ~/.xinitrc
и старта pulseaudio (смотрите: BBS#155416)
Советы и рекомендации
Переопределение 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 -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
или
$ xinit /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
Смотрите также startx(1).
Создание выбора DE/WM (Окружения рабочего стола/Оконного менеджера)
Если вы часто переключаетесь между различными DEs/WMs, рекомендуется использовать Display manager или добавить код в .xinitrc
. Следующий код, описанный в нескольких строчках, будет принимать аргумент и загружать желаемое окружение рабочего стола или менеджера окон.
В следующем примере ~/.xinitrc
показано как запустить конкретную DE/WM с аргументом:
~/.xinitrc
... # Xfce передаётся по умолчанию session=${1:-xfce} case $session in awesome ) exec awesome;; bspwm ) exec bspwm;; catwm ) exec catwm;; cinnamon ) exec cinnamon-session;; dwm ) exec dwm;; enlightenment ) exec enlightenment_start;; ede ) exec startede;; fluxbox ) exec startfluxbox;; gnome ) exec gnome-session;; gnome-classic ) exec gnome-session --session=gnome-classic;; i3|i3wm ) exec i3;; icewm ) exec icewm-session;; jwm ) exec jwm;; kde ) exec startkde;; mate ) exec mate-session;; monster|monsterwm ) exec monsterwm;; notion ) exec notion;; openbox ) exec openbox-session;; unity ) exec unity;; xfce|xfce4 ) exec startxfce4;; xmonad ) exec xmonad;; # Не известная сессия, попробуйте запустить в качестве команды *) exec $1;; esac
Затем скопируйте файл /etc/X11/xinit/xserverrc
в ваш домашний каталог:
$ cp /etc/X11/xinit/xserverrc ~/.xserverrc
После этого, вы можете легко запустить конкретный DE/WM передавая аргумент, например:
$ xinit $ xinit gnome $ xinit kde $ xinit wmaker
или
$ startx $ startx ~/.xinitrc gnome $ startx ~/.xinitrc kde $ startx ~/.xinitrc wmaker
Запуск приложений без оконного менеджера
Можно запустить только определенные приложения без оконного менеджера. Хотя, это будет полезно только для одного приложения, запущенного в полноэкранном режиме. Например:
~/.xinitrc
... exec chromium
С помощью этого метода необходимо установить геометрию каждого окна приложения с помощью своих собственных файлов настроек, если вообще возможно.
Смотрите также Display manager (Русский)#Запуск приложений без оконного менеджера.