Как я могу настроить 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
сначала проверить исходный файл.