TTYs and Consoles¶
Syntax: tty [LVLS] <COND> DEV [BAUD] [noclear] [nowait] [nologin] [TERM]
tty [LVLS] <COND> CMD <ARGS> [noclear] [nowait]
tty [LVLS] <COND> [notty] [rescue]
The first variant of this option uses the built-in getty on the given
TTY device DEV, in the given runlevels. DEV may be the special keyword
@console
, which is expanded from /sys/class/tty/console/active
,
useful on embedded systems.
The default baud rate is 0, i.e., keep kernel default.
The
tty
stanza inherits runlevel, condition (and other feature) parsing from theservice
stanza. So TTYs can run in one or many runlevels and depend on any condition supported by Finit. This is useful e.g. to depend on<pid/elogind>
before starting a TTY.
Example:
tty [12345] /dev/ttyAMA0 115200 noclear vt220
The second tty
syntax variant is for using an external getty, like
agetty or the BusyBox getty.
The third variant is for board bringup and the rescue
boot mode. No
device node is required in this variant, the same output that the kernel
uses is reused for stdio. If the rescue
option is omitted, a shell is
started (nologin
, noclear
, and nowait
are implied), if the rescue
option is set the bundled /libexec/finit/sulogin
is started to present
a bare-bones root login prompt. If the root (uid:0, gid:0) user does
not have a password set, no rescue is possible. For more information,
see the Rescue Mode section.
By default, the first two syntax variants clear the TTY and wait for the user to press enter before starting getty.
Example:
tty [12345] /sbin/getty -L 115200 /dev/ttyAMA0 vt100
tty [12345] /sbin/agetty -L ttyAMA0 115200 vt100 nowait
The noclear
option disables clearing the TTY after each session.
Clearing the TTY when a user logs out is usually preferable.
The nowait
option disables the press Enter to activate console
message before actually starting the getty program. On small and
embedded systems running multiple unused getty wastes both memory
and CPU cycles, so wait
is the preferred default.
The nologin
option disables getty and /bin/login
, and gives the
user a root (login) shell on the given TTY <DEV>
immediately.
Needless to say, this is a rather insecure option, but can be very
useful for developer builds, during board bringup, or similar.
Notice the ordering, the TERM
option to the built-in getty must be
the last argument.
Embedded systems may want to enable automatic DEV
by supplying the
special @console
device. This works regardless weather the system
uses ttyS0
, ttyAMA0
, ttyMXC0
, or anything else. Finit figures
it out by querying sysfs: /sys/class/tty/console/active
. The speed
can be omitted to keep the kernel default.
Most systems get by fine by just using
console
, which will evaluate to/dev/console
. If you have to use@console
to get any output, you may have some issue with your kernel config.
Example:
tty [12345] @console noclear vt220
On really bare bones systems, or for board bringup, Finit can give you a shell prompt as soon as bootstrap is done, without opening any device node:
tty [12345789] notty
This should of course not be enabled on production systems. Because it may give a user root access without having to log in. However, for board bringup and system debugging it can come in handy.
One can also use the service
stanza to start a stand-alone shell:
service [12345] /bin/sh -l