Страница 1 из 1
автологин в консоли
Добавлено: 16 янв 2022, 19:42
Olej
Задача: автологин при загрузке системы в консоли (без GUI, DM, WM ...) + автостарт приложения после логина.
Задача возникает из тем:
игрушки RetroArch
тонкий клиент HP T520
Ситуация довольно частая:
- типовой вход без явного логина...
- с запуском предустановленного приложения.
Re: автологин в консоли
Добавлено: 16 янв 2022, 21:10
Olej
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 запускалась «по-старому», и предлагала «обычное» приглашение к вводу логина/пароля.
Re: автологин в консоли
Добавлено: 16 янв 2022, 21:14
Olej
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 -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
ну а дальше изменяем файл как написано выше
Re: автологин в консоли
Добавлено: 16 янв 2022, 22:43
Olej
Olej писал(а): ↑16 янв 2022, 21:14
Мнения несколько разнятся
Вопрос (логику и смысл getty) более-менее проясняет описание (документацию) systemd, написанное самим автором Lennart Poettering -
systemd для администраторов - стр.61 -
16.1 Виртуальные консоли
...
Re: автологин в консоли
Добавлено: 17 янв 2022, 01:13
Olej
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.
Как-то это не создаётся и не срабатывает!
Re: автологин в консоли
Добавлено: 17 янв 2022, 18:23
Olej
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 -
работает!