Как я могу настроить systemd для автоматического входа в мою среду рабочего стола, желательно без использования менеджера входа? Я использую Arch.
Как я могу настроить systemd для автоматического входа в мою среду рабочего стола, желательно без использования менеджера входа? Я использую Arch.
Ответы:
Это описано в Arch Wiki :
Создайте новый файл службы, аналогичный
getty@.service, скопировав его в/etc/systemd/system/cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service
Это в основном копирует уже существующий getty@.serviceфайл в новый файл, autologin@.serviceкоторый можно свободно модифицировать. Это скопировано, /etc/systemd/systemпотому что именно там хранятся специфичные для сайта файлы модулей. /usr/lib/systemd/systemсодержит файлы модулей, предоставляемые пакетами, поэтому вы не должны ничего менять там.
Затем вам нужно будет символически связать это autologin@.serviceс сервисом getty для tty, для которого вы хотите выполнить автоматическое исследование, например для tty1:
ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
До сих пор это все тот же getty@.serviceфайл, что и в обычном файле, но самая важная часть - это изменение, autologin@.serviceчтобы фактически автоматически входить в систему. Для этого вам нужно всего лишь изменить ExecStartстроку, чтобы прочитать
ExecStart=-/sbin/agetty -a USERNAME %I 38400
Разница между ExecStartстрокой getty@.serviceи autologin@.serviceзаключается только в том, -a USERNAMEчто agetty автоматически сообщает пользователю с именем пользователя USERNAME.
Теперь вам нужно только сказать systemd перезагрузить его файлы демона и запустить сервис:
systemctl daemon-reload
systemctl start getty@tty1.service
(Я не уверен, что служба запустится правильно, если вы уже вошли в tty1, возможно, самый безопасный способ - просто перезагрузиться, а не запускать службу).
Если вы затем хотите автоматически запустить X, вставьте в свой фрагмент следующий фрагмент ~/.bash_profile( снова взятый из вики ):
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
exec startx
fi
Вам нужно будет изменить свою версию, ~/.xinitrcчтобы запустить среду рабочего стола, как это сделать, зависит от DE и, вероятно, также описано в вики Arch.
File existsкогда делаю символическую ссылку
ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceчтобы перезаписать его.
Непосредственно измените файл /etc/systemd/system/getty.target.wants/getty@tty1.service(который является символической ссылкой /lib/systemd/system/getty@service):
Добавить -a/--autologin USERNAMEв строку:
ExecStart=-/sbin/agetty --noclear %I $TERM
Следовательно:
ExecStart=-/sbin/agetty -a USERNAME %I $TERM
Вы также можете удалить -o '-p -- \\u'(как указано в текущей установке Arch), так как это запустит вход в систему, USERNAMEно все равно запросит пароль.
После перезагрузки вы войдете в систему автоматически.
Ps Измените имя файла getty@tty1.serviceна то, в которое ttyвы хотите войти.
IMO, Arch Wiki в настоящее время рекомендует гораздо более простое решение:
Либо запустите помощник ( systemctl edit getty@tty1), либо сделайте то, что я сделал вручную:
mkdir -p /etc/systemd/system/getty@tty1.service.d/
touch /etc/systemd/system/getty@tty1.service.d/override.conf
Текст, который вы хотите ввести (любым из способов): ( обязательно измените имя пользователя соответствующим образом ):
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM
ПРИМЕЧАНИЕ : пустая строка важна! (правда, я не уверен, почему ...)
Теперь restart ( shutdown -r 0) и что-то в этом роде ... login: username (automatic login)произойдет, если он ранее заблокирован в ожидании ввода имени пользователя / пароля
После перезагрузки и автоматического входа в систему, если вы похожи на меня и хотите использовать SSH в этой системе сейчас, вам, вероятно, нужно выполнить:
systemctl enable sshd.service
Который создаст символическую ссылку (например ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service')
/sbin/agetty, поэтому стоит /etc/systemd/system/getty.target.wants/getty@tty1.serviceсначала проверить исходный файл.