автологін до tty на сервері linux

| щоденник, підказка, комп'ютери, linux, сервер

скажімо, ми маємо сервер з linux без графічного середовища, на якому щось крутиться; цей сервер був «безголовий», аж ось хтось прикрутив до стіни кронштейн з монітором, і тепер в сервера є екран — але там нічого не показує, окрім запрошення залогінитися (яким ніхто ніколи не користується, тому що ssh). як вивести щось корисне чи просто цікаве на цей екран, — скажімо, htop? — без потреби логінитися руцями? відповідь: налаштувати автологін «користувача» з дуже обмеженими правами у віртуальній консолі tty1, з автозапуском htop. спробуймо.

користувач htop

найпростіше, що спадає на думку для автозапуску чогось — вказати, скажімо, /usr/bin/htop як «оболонку» для користувача. отже, системний користувач без пароля (-r) з id 999 (-u) без домашньої теки (-M) чи групи (-N), і /usr/bin/htop замість оболонки:

sudo useradd -M -N -r -u 999 -c "Run htop on tty1" -s /usr/bin/htop htop

перевірка, чи все на місці:

sudo grep htop /etc/passwd

автологін до tty1

тепер можна налаштувати автологін до віртуальної консолі tty1 для htop’а:

sudo mkdir -p /etc/systemd/system/getty@tty1.service.d
sudo nano /etc/systemd/system/getty@tty1.service.d/autologin.conf
# ----- >8 -----
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin htop --noclear %I linux
# ----- 8< -----

лишилось випробувати, перезапустивши віртуальну консоль tty1 (НЕ варто пробувати безпосередньо на своєму комп’ютері — можна залишитися без графічного середовища):

sudo systemctl daemon-reload
sudo systemctl restart getty@tty1.service

якщо щось пішло не так — переключитися на іншу tty (ctrl+alt+f2-6), прибрати/відредагувати файл /etc/systemd/system/getty@tty1.service.d/autologin.conf і знову перезапустити сервіс getty@tty1.service. якщо все гаразд — на підключеному до сервера моніторі з’явиться htop.

варіант з опціями?

додавання htop до /etc/passwd як «оболонку» для користувача зваблює простотою і надійністю: htop неможливо закрити, бо спроба це зробити вилогінює користувача htop, але systemd знову запускає agetty — автологін, і знову htop на екрані. але є одне але: стандартно htop поновлює екран щодві секунди, і з часом це почина дратувати. окрім того, непогано було би відображати дерево процесів, сортувати за навантаженням процесора тощо:

htop --delay 50 --readonly --tree --sort-key PERCENT_CPU --highlight-changes=100

але… /etc/passwd не дозволяє додати опції для оболонки. можна дозволити користувачеві htop логінитися, зробити bash оболонкою, і додати автостарт до .bashrc, але… мій кіт зможе підключити клавіатуру й наклацяти якусь шкоду на сервері? ніт.

наразі все, піду-но я спати.

поновлення. як правильно натякнув disfinder в коментарях, ніхто не боронить намалювати будь-які опції htop’ові в окремому скрипті, а вже скрипт зробити «оболонкою» для користувача? єдина засторога: далеко не факт, що htop на сервері (debian 10 buster) і htop на лептопі (manjaro) виявляться тим самим htop’ом, — варто перевірити, які опції пітримує той, що буде на дисплеї (в моєму випадку --readonly та --highlight не підтримуються). отже:

sudo touch /bin/htop.kiosk
sudo nano /bin/htop.kiosk
# ----- >8 -----
#!/bin/sh
/bin/htop --delay 50 --tree --sort-key PERCENT_CPU
# ----- 8< -----

невеличка заміна в профілі користувача htop, і не забути перезавантажити сервіс автологіну:

sudo usermod -s /bin/htop.kiosk htop
sudo systemctl restart getty@tty1.service

готово.

p.s. аптайм домашнього сервера: 264 дні.

(догори)