Як я можу налаштувати 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
ПРИМІТКА : Порожній рядок важливий! (правда, я не впевнений, чому ...)
Тепер перезапустіть ( 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
файл.