автологин в консоли

Установка, обновление, настройка Linux

Модераторы: Olej, adminn

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

автологин в консоли

Непрочитанное сообщение Olej » 16 янв 2022, 19:42

Задача: автологин при загрузке системы в консоли (без GUI, DM, WM ...) + автостарт приложения после логина.
Задача возникает из тем:
игрушки RetroArch
тонкий клиент HP T520
Ситуация довольно частая:
- типовой вход без явного логина...
- с запуском предустановленного приложения.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: автологин в консоли

Непрочитанное сообщение Olej » 16 янв 2022, 21:10

Olej писал(а):
16 янв 2022, 19:42
Задача: автологин при загрузке системы в консоли (без GUI, DM, WM ...) + автостарт приложения после логина.
Раньше это было попроще...
Как сделать автоматический логин в консоль Linux?
1. в «старой доброй» sysv-инициализации это, естественно, файл /etc/inittab:
...
2. в системе инициализации upstart эту роль играют, судя по всему, файлы /etc/init/tty?.conf:
...
С systemd всё гораздо хуже:
3. в системе инициализации systemd ситуация несколько сложнее. насколько я понял, глядя на debian-овскую конфигурацию, надо заменить символическую ссылку /etc/systemd/system/getty.target.wants/getty@tty1.service, которая ссылается на файл универсального сервиса /lib/systemd/system/getty@.service, на реальный файл (с тем же именем — getty@tty1.service). можно скопировать содержимое того же самого /lib/systemd/system/getty@.service, и добавить вышеупомянутую опцию к вызову программы *getty.

зачем подменять, а не исправлять сразу файл с универсальным сервисом /lib/systemd/system/getty@.service? для того, чтобы при переключении на другие виртуальные терминалы (не tty1) программа *getty запускалась «по-старому», и предлагала «обычное» приглашение к вводу логина/пароля.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: автологин в консоли

Непрочитанное сообщение Olej » 16 янв 2022, 21:14

Olej писал(а):
16 янв 2022, 21:10
С systemd всё гораздо хуже:
Мнения несколько разнятся - Автовход в консоли:
Автологин в консоли (поконсольно) делается так:

Код: Выделить всё

cp /etc/systemd/system/getty.target.wants/getty@tty{1,2}.service
файл cp /etc/systemd/system/getty.target.wants/getty@tty1.service это ссылка на /lib/systemd/system/getty@.service, и мы этой командой копируем эту ссылку на консоль на которой нужен атологин(в даном случае 2),далее меняем в /etc/systemd/system/getty.target.wants/getty@tty2.service

Код: Выделить всё

ExecStart=-/sbin/agetty --noclear %I $TERM
на

Код: Выделить всё

ExecStart=-/sbin/agetty --noclear -a youruser %I $TERM
youruser это имя вашего юзера. Все
если нужен автологин на 1-ой консоли:

Код: Выделить всё

cp /etc/systemd/system/getty.target.wants/getty@tty{1,2}.service
rm /etc/systemd/system/getty.target.wants/getty@tty1.service
mv /etc/systemd/system/getty.target.wants/getty@tty{2,1}.service
ну а дальше изменяем файл как написано выше

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: автологин в консоли

Непрочитанное сообщение Olej » 16 янв 2022, 22:43

Olej писал(а):
16 янв 2022, 21:14
Мнения несколько разнятся
Вопрос (логику и смысл getty) более-менее проясняет описание (документацию) systemd, написанное самим автором Lennart Poettering - systemd для администраторов - стр.61 -
16.1 Виртуальные консоли
...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: автологин в консоли

Непрочитанное сообщение Olej » 17 янв 2022, 01:13

Olej писал(а):
16 янв 2022, 22:43
Вопрос (логику getty) более-менее проясняет описание (документацию) systemd

Код: Выделить всё

root@t520:/etc# cd /etc/systemd/system/getty.target.wants/

root@t520:/etc/systemd/system/getty.target.wants# pwd
/etc/systemd/system/getty.target.wants
root@t520:/etc/systemd/system/getty.target.wants# ls -l
total 0
lrwxrwxrwx 1 root root 34 Aug 24 08:42 getty@tty1.service -> /lib/systemd/system/getty@.service
Создаю копию для виртуального терминала tty2:

Код: Выделить всё

root@t520:/etc/systemd/system/getty.target.wants# cp getty@tty1.service getty@tty2.service
root@t520:/etc/systemd/system/getty.target.wants# ls -l
total 4
lrwxrwxrwx 1 root root   34 Aug 24 08:42 getty@tty1.service -> /lib/systemd/system/getty@.service
-rw-r--r-- 1 root root 1975 Jan 16 21:43 getty@tty2.service
Правка 1-й строки...
- было:

Код: Выделить всё

root@t520:/etc/systemd/system/getty.target.wants# cat getty@tty1.service | grep ExecStart=
ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear %I $TERM
- стало

Код: Выделить всё

root@t520:/etc/systemd/system/getty.target.wants# cat getty@tty2.service | grep ExecStart=
ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear --skip-login --autologin gamer %I $TERM
Прописываю systemd стартовать не tty1 а tty2:

Код: Выделить всё

root@t520:/etc/systemd/system/getty.target.wants# systemctl daemon-reload

root@t520:/etc/systemd/system/getty.target.wants# systemctl disable getty@tty1.service
Removed /etc/systemd/system/getty.target.wants/getty@tty1.service.

root@t520:/etc/systemd/system/getty.target.wants# systemctl enable getty@tty2.service
Failed to enable unit: File /etc/systemd/system/getty.target.wants/getty@tty2.service already exists.
Как-то это не создаётся и не срабатывает! :-?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: автологин в консоли

Непрочитанное сообщение Olej » 17 янв 2022, 18:23

Olej писал(а):
17 янв 2022, 01:13
Как-то это не создаётся и не сраба

Код: Выделить всё

root@t520:/etc/systemd/system/getty.target.wants# pwd
/etc/systemd/system/getty.target.wants

root@t520:/etc/systemd/system/getty.target.wants# cp getty@tty2.service getty@tty1.service 

root@t520:/etc/systemd/system/getty.target.wants# reboot now
Такое решение грубое - теперь автостарт "--autologin gamer" прописалось в /lib/systemd/system/getty@.service, по ссылке /etc/systemd/system/getty.target.wants/getty@tty1.service ... Теперь так будут стартовать все терминалы.
Но это легко поправить:
- восстановить содержимое /lib/systemd/system/getty@.service
- вместо ссылки /etc/systemd/system/getty.target.wants/getty@tty1.service записать туда файл с тем же содержанием

Но теперь автостарт без логина с именем gamer - работает!

Ответить

Вернуться в «Администрирование Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей