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 (для vt3), если вы хотите, чтобы графический вход работал на большем количестве виртуальных терминалов
  • 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) (обсуждение: Talk:Start X at login (Русский)#)

Создайте файл службы (например, /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)

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