Občas se během startu počítače hodí vypsat informace na obrazovku. Používám hromadu testovacích virtálních strojů, které by default dostávají adresu z DHCP a potřebuji se k nim připojovat ze sítě. Hodí se mi tedy znát jejich IP bez toho, aniž bych se musel po každém bootu přihlašovat na jejich virtuální consoli. Proto je také vhodné informace zobrazit hned na první tty.

Zrušíme login na tty1

Standardně se na každém tty startuje proces login, který vymaže obrazovku a předchozí informace jsou nedostupné. Musíme tedy zrušit login na tty1:

systemctl mask getty@tty1.service

Pokud tohle neprojde, tak můžeme natvrdo udělat link (systemctl mask dělá totéž, ale občas se brání maskovat některé služby):

ln -sf /dev/null /etc/systemd/system/getty@tty1.service

Po rebootu už by na tty1 neměl být login a měl by tam zůstat výpis služeb během bootu.

Služba pro výpis informací

V mém případě chci vypsat aktuální IP po konfiguraci sítě (výstup z příkazu networkctl):

[Unit]
Description=Print Network Address
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot

ExecStart=/bin/echo
ExecStart=/bin/networkctl status
ExecStart=/bin/echo

StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty1

[Install]
WantedBy=multi-user.target

Unitu uložíme do souboru /etc/systemd/system/printIP.service a zavoláme systemctl daemon-reload. Tip: unitu můžeme editovat pomocí příkazu systemctl edit --full printIP.service a při uložení se jednak provedou kontroly a taky se automaticky zavolá reload. Službu aktivujeme pomocí systemctl enable printIP.service.

Popis unity

Službu je potřeba spustit až po konfiguraci sítě, takže definujeme závislost na targetu network-online. Služba je typu oneshot, spustí se jednou. Výstup přesměrujeme na tty.

Na řádcích ExecStart jsou potom spouštěné příkazy.

Ano, není to jediná možnost a možná ani nejelegantnější (výstup se míchá s dalšími výstupy během startu), ale zdá se mi nejjednodušší. Nepotřebujeme žádné externí příkazy, vše funguje se základními prostředky minimální instalace debianu.