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

Ссылки по теме

- systemd/User
- Автоматический вход в виртуальную консоль
- Экранный менеджер
- Silent boot
- xinitrc

В этой статье показано, как настроить автоматический запуск 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

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

Причина: Файл службы написан плохо, а еще запустятся ли иксы вообще вне сеанса таким способом? Если нет, это нужно удалить (уже сделано в 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)

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

- Запуск X после автоматического входа в систему

Categories:

- X server (Русский)
- Boot process (Русский)
- Русский