Як я можу автоматично зареєструватися на робочому столі із системою systemd?


20

Як я можу налаштувати systemd для автоматичного входу в систему на робочому столі, бажано без використання менеджера входу? Я використовую Arch.


Який менеджер входу ви використовуєте? Деякі (GDM, KDM, iirc, можливо, більше) вже підтримують автологін, тому вам потрібно буде лише включити послугу для них.
Віланд

Наразі я використовую SLiM, і його можна налаштувати на автоматичний вхід, але без диспетчера дисплеїв процес завантаження був би швидшим і більш мерехтливим :)
fhucho

О, я неправильно прочитав ваше запитання.
Wieland

Відповіді:


22

Це описано в 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.


Що таке agetty arg% I?
Едвард Андерсон

Що з `charachter наприкінці? Це потрібно? Що це означає?
rien333

@ rien333 Це непотрібно, я видалив його з відповіді.
Віланд

2
Я отримую помилку, File existsколи роблю симпосилання
Повідомлення про себе

використовувати ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceдля перезапису.
Мануель Шмітцбергер

5

Безпосередньо змінити файл /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потрібне увійти.


Примітка для наочності: якщо це символьне посилання, замініть символьне посилання на новий файл і відредагуйте цей новий файл.
Едвард Андерсон

1

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')


Порожній рядок спочатку очистить запис ExecStart, а наступний рядок введе нову команду exec. Також варто зазначити, що в деяких системах (Ubuntu) виконуваний файл agetty міг би знаходитися в ньому /sbin/agetty, тому варто спочатку перевірити оригінальний /etc/systemd/system/getty.target.wants/getty@tty1.serviceфайл.
платформа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.