Start X at login (Русский)

В этой статье показано как настроить автоматический запуск сервера X сразу после входа в виртуальный терминал. Это можно сделать, выполнив команду startx, поведение которой настраивается в файле xinitrc (например, можно указать какой оконный менеджер использовать). Также для автоматического запуска X можно использовать любой графический экран входа.

Файлы профиля

Обратите внимание: Эти решения запускают сервер X в том же терминале, в котором производился логин. Это требуется для того, чтобы сохранять сеанс входа.

Для Bash добавьте указанные ниже строки в конец вашего файла ~/.bash_profile. Если файл еще не создан, просто скопируйте шаблон /etc/skel/.bash_profile на его место. Для Zsh, добавьте строки в ~/.zlogin (или ~/.zprofile).

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
Обратите внимание:
  • Вы можете изменить условие -eq 1, например, на -le 3 (для vt1vt3) если вы хотите чтобы графический вход работал на большем количестве виртуальных терминалов.
  • Сервер X должен всегда запускаться в том же терминале, в котором был произведен вход в систему для сохранения сеанса logind. По умолчанию это обеспечивается в файле /etc/X11/xinit/xserverrc.
  • xinit может быть быстрее startx, но требует указания дополнительных параметров вроде -nolisten tcp.

Для fish добавьте следующие строки в конец вашего файла ~/.config/fish/config.fish:

# start X at login
if status --is-login
    if test -z "$DISPLAY" -a $XDG_VTNR = 1
        exec startx
    end
end

Используя systemd

Tango-emblem-important.png

Tango-emblem-important.png

Правильность информации, представленной в этой статье или разделе, оспаривается

Причина: Файл службы написан плохо, а еще запустятся ли иксы вообще вне сеанса таким способом? Если нет, это нужно удалить (уже сделано в systemd/User. (Обсудить)

Создайте файл службы (например, /etc/systemd/system/xinit@.service):

[Unit]
Description=startx for user %i
After=x@vt7.service systemd-user-sessions.service
Wants=x@vt7.service
Conflicts=getty@tty7.service

[Service]
User=%i
TTYPath=/dev/tty7
PAMName=login
Environment=DISPLAY=:0
WorkingDirectory=/home/%I
Nice=0
# remove ">/dev/null 2>&1" for debug
ExecStart=/bin/bash -l -c "cd; startx >/dev/null 2>&1"

[Install]
WantedBy=graphical.target

Убедитесь, что файл ~.xinitrc существует и в нем заданы правильные настройки.

Включите службу:

# systemctl enable xinit@пользователь

и запустите ее

# systemctl start xinit@пользователь

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

  • Этот метод можно совместить с автоматическим входом в виртуальный терминал. При этом вы должны указать правильные зависимости службе автоматического входа systemd чтобы убедиться, что dbus запускается перед ~/.xinitrc и, таким образом, PulseAudio запущен (смотрите также BBS#155416)
  • Если вы хотите оставаться в системе при завершении сеанса X, удалите exec в вызове startx.
  • Чтобы перенаправить текстовый вывод сеанса X в файл, создайте следующий псевдоним:
alias startx='startx &> ~/.xlog'
Обратите внимание: При перенаправлении stderr (startx &>) станет невозможным запуск сервер X под обычным пользователем, подробнее смотрите в Xorg#Rootless Xorg (v1.16).

Смотрите также