Автологин и автозагрузка любого окружения без DM.

Недавно на форуме была тема об автоматической загрузке системы (Иксов и окружения) и автологина. В ходе обсуждения благодаря уважаемым nafanja и Aivar было из Wiki найдено решение данных вопросов в три шага. Чтобы закрепить данное решение и свести всю информацию в одно место, я решил написан данный блог.
Исходные данные:
1. Вы хотите автологин определенного пользователя.
2. Вы хотите автоматический запуск Иксов.
3. Вы хотите автоматический запуск окружения (KDE, XFCE, Gnom и т.д.).
Это всё можно сделать без использования DM (например SDDM, LightDM и т.д.), выполнив три шага. Поскольку реализация автозагрузки окружения реализован через startx, то у Вас должен быть установлен пакет xorg-xinit, которому он принадлежит, для проверки сделайте
# pacman -S xorg-xinit
Итак, все приготовления сделаны приступим к реализации задуманного:

1. В папке пользователя, для которого нужен автологин и автозагрузка окружения проверяем чтобы в файле .xinitrc были следующие блоки:
# start some nice programs
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

# Window Manager of your choice
# exec gnome-session
exec startkde
# exec startxfce4
# exec awesome
# exec openbox-session
Если файл .xinitrc не существует, то копируем его из
/etc/X11/xinit/xinitrc
в папку пользователя
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
Данные блоки нужны для того, чтобы StartX автоматически запускал нужное окружение, соответственно в секции Window Manager of your choice раскомментируйте нужную сессию, для примера здесь показан запуск KDE.

2. Теперь сделаем автоматический запуск Иксов в нужной виртуальной консоли после залогинивания нашего пользователя. Для этого, если вы используйте оболочку Bash, нужно в папке нашего пользователя в файл .bash_profile записать следующий блок:
[[ -f ~/.bashrc ]] && . ~/.bashrc

[[ -z $DISPLAY && $XDG_VTNR -eq NomerVirtConsole ]] && exec startx
Если файл .bash_profile не существует, то копируем его из
/etc/skel/.bash_profile
в папку пользователя
$ cp /etc/skel/.bash_profile ~/.bash_profile
Переменную NomerVirtConsole меняем на номер нужной виртуальной консоли, обычно1 или 3.

3. Последний шаг заключается в том, чтобы посредством Systemd сделать автологин нужного пользователя в нужную виртуальную консоль, а дальше всё будет по цепочке тех шагов, которые описаны выше. Для этого нам требуется создать нужный Unit для Systemd:
# systemctl edit getty@ttyNomerVirtConsole
и там вписать следующий код
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin Username --noclear %I $TERM
Здесь NomerVirtConsole - это номер нужной виртуальной консоли, она должна быть равна переменной из шага 2. А переменная Username соответственно имя нашего пользователя для которого всё это затевалось.

4. PROFIT :) !!!!

Внимание: Ели у вас не запускается dbus (есть ошибки) то в ~/.xinitrc добавляем следующий блок перед строчкой запуска окружения (например перед exec startkde):
# Dbus fix
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
    eval "$(dbus-launch --sh-syntax --exit-with-session)"
fi

P.S. Если Вы хотите залогиниться под другим пользователем, то Вы можете сделать это двумя способами:
1. Не выходя из залогининого пользователя вызываете незанятую виртуальную консоль Ctrl+Alt+FXY (XY - это функциональные клавиши от F1 до F7), затем логинетесь новым пользователем и через Startx запускаете нужное окружение (WM или DE).
2. Выходите из своего WM или DE, затем логинетесь новым пользователем и через Startx запускаете нужное окружение (WM или DE).

Если кому надо, то ниже ссылки на Wiki:
1. Раз;
2. Два;
3. Три.
Всем спасибо, надеюсь будет полезно.
scorpid
Если файл .xinitrc не существует, то копируем его из
если пост рассчитан на новичков, то стоит добавить, что копируем из под текущего пользователя (хотя в команде ниже это показано явно). Распространенная ошибка, когда копируют от root-а и затем не могут понять, почему Х-ы никак не стартуют.
Ну вообще рассчитано что человек знает что значит $ и # :). Спасибо за комент, увидел что для systemctl не написал от кого запускать, исправил. Т.е получается, что если я будут копировать из под Root, но в папку пользователя, то все равно не взлетит ?
# cp /etc/X11/xinit/xinitrc /home/user/.xinitrc
из-за того что права на файл будут Root ??
взлетит, доступ к чтению есть же...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
но править или удалять только под рутом.
Пользователь в своей директории запросто может удалять файлы других пользователей, в т.ч. и рута.

Сабж. scorpid, отсутствует логическое начало. Добавьте, что все вышеописанное справедливо лишь в случае установленного xorg-xinit.
В принципе можно бы и добавить, выбор DE и WM (если их несколько) прямо из текстовой консоли, не используя никаких DM
-
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
да, точно, удалить можно.
но вроде было по другому...
Нет, так и было. Есть права на чтение, запись, запуск. На удаление - атрибута нет. ) Для защиты от удаления нужен иммунитет - i.
-
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
vasek
Так здесь и так нет никаких DM, но конкретное DE или WM жестко прописано в .xinitrc
 
Зарегистрироваться или войдите чтобы оставить сообщение.