xinit (Русский)

From ArchWiki

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

Файл ~/.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.

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

Это значение по умолчанию 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
Примечание: Убедитесь, что блок if, приведённый в примере выше, присутствует в вашем файле .xinitrc, чтобы выполнялись скрипты из /etc/X11/xinit/xinitrc.d.

Запуск

Долговыполняемые программы стартуют перед оконным менеджером, такие как заставки и обои приложения. Они должны либо сами выполняться параллельно, либо работать в фоновом режиме (добавьте знак &). Иначе, сценарий остановится и будет ждать каждую программу, чтобы закончить перед запуском оконного менеджера. Обратите внимание, что некоторые программы не должны стартовать параллельно, во избежании потока ошибок, как в случае с xrdb. Подготовка exec заменит процесс скрипта с процессом оконного менеджера, так что Х не завершится, даже если этот процесс распараллелен в фоне.

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

$ startx

или

$ xinit -- :1 -nolisten tcp vt$XDG_VTNR

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

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

$ pkill -15 Xorg
Примечание: pkill убьет все запущенные экземпляры X. Для специального убивания оконного менеджера на текущем VT, используйте:
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 при входе в систему

Примечание: Это решение запускает 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).

Совет: Это может быть использовано даже для запуска программ с графическим интерфейсом, но без каких-либо особенностей оконного менеджера. Смотрите также #Запуск приложений без оконного менеджера и Запуск программ в отдельном экране X.

Создание выбора 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 (Русский)#Запуск приложений без оконного менеджера.