TTYS(5)

πŸ“¦
version 1042.100.6.0.1 Β· 3 versions
, in nixpkgs unstable

πŸ’– TTYS(5) β€” terminal initialization information πŸ’–

okay so real talk bestie, this is the ttys manual page from the File Formats Manual section β€” it's the file that tells your system how to set up and babysit every terminal line you've got. it's lowkey iconic, it's been around since forever, and you will need it if you ever want to login. let's get into it 🫢


✨ NAME ✨

ttys β€” terminal initialization information

🌸 DESCRIPTION 🌸

so the file ttys holds all the info that a bunch of routines use to initialize and control terminal special files. this info gets read with the getttyent(3) library routines. it's giving config file that runs the whole terminal situation πŸ’…

there's one line in the ttys file per special device file. fields are separated by tabs and/or spaces. and listen β€” if a field is comprised of more than one word, you gotta wrap it in double quotes ("). blank lines and comments can appear anywhere in the file; comments are delimited by hash marks (#) and new lines. any unspecified fields will default to null. easy ✨

ngl the quoting thing trips people up constantly, so like… don't forget the double quotes for multi-word fields, bestie πŸŽ€

The first field is normally the name of the terminal special file as it is found in /dev. however, it can be any arbitrary string when the associated command is not related to a tty. so it's flexible, we love that.

The second field of the file is the command to execute for the line, usually getty(8), which initializes and opens the line, setting the speed, waiting for a user name and executing the login(1) program. it can be, however, any desired command β€” for example the start up for a window system terminal emulator or some other daemon process β€” and can contain multiple words if quoted. main character energy honestly.

The third field is the type of terminal usually connected to that tty line, normally the one found in the termcap(5) data base file. the environment variable TERM is initialized with the value by either getty(8) or login(1). so this is the field that tells everything what kind of screen it's dealing with πŸ–₯️

The remaining fields set flags in the ty_status entry (see getttyent(3)), specify a window system process that launchd(8) will maintain for the terminal line, optionally determine the type of tty (whether dialin, network or otherwise), or specify a tty group name that allows the login class database (see login.conf(5)) to refer to many ttys as a group, to selectively allow or deny access or enable or disable accounting facilities for ttys as a group.

now for the flags β€” as flag values, the strings on and off specify that launchd(8) should (should not) execute the command given in the second field.

  • onifconsole will cause this line to be enabled if and only if it is an active kernel console device (it is equivalent to on in this case).
  • the flag onifexists will cause this line to be enabled if and only if the name exists. if the name starts with a /, it will be considered an absolute path. otherwise, it is considered a path relative to /dev.
  • the flag secure (if the console is enabled) allows users with a uid of 0 to login on this line.
  • the flag dialup indicates that a tty entry describes a dialin line, and network is obsolete and does nothing. πŸ’€ (yes bestie, it's a fossil β€” either of these strings may also be specified in the terminal type field though, so it still shows up there.)
  • the string window= may be followed by a quoted command string which launchd(8) will execute before starting the command specified by the second field.

then there's group= β€” it may be followed by a group name comprised of alphanumeric characters that can be used by login.conf(5) to refer to many tty lines as a group to enable or disable access and accounting facilities. if no group is specified, then the tty becomes a member of the group "none". and for backwards compatibility, the group= should appear last on the line, immediately before the optional comment. noted 🫑

⚠️ real talk: both the second field and any command specified with window= will be split into words and executed using execve(2). words are separated by any combinations of tabs and spaces. arguments containing whitespace should be enclosed in single quotes ('). and note that no shell-style globbing or other variable substitution occurs β€” so don't come in expecting ~ or * to do anything cute, they won't. periodt.

πŸŽ€ FILES πŸŽ€

  • /etc/ttys

πŸ¦‹ NUMERIC SEQUENCES πŸ¦‹

okay this part ate, honestly. numeric sequences of terminals can be represented in a more compact format ✨

a matching pair of square bracket may enclose two numbers (the start and stop values), separated by a hyphen. the numbers are assumed to be decimal, unless prefixed with 0x, in which case they are interpreted as hexadecimal.

the number of characters (not including any 0x) in the starting value gives the minimum width; sequence values are zero padded up to this width.

thus tty[00-07] represents the eight terminals tty00 through tty07. literally so clean πŸ’…

πŸ’œ EXAMPLES πŸ’œ

# root login on console at 1200 baud
console "/usr/libexec/getty std.1200"   vt100   on secure
# the sequence of eight terminals tty00 through tty07
tty[00-07]     "/usr/libexec/getty std.9600"  vt100      on
# Network pseudo ttys -- don't enable getty
ttyp0   none    network
ttyp1   none    network off
# All sixteen of a pseudo tty sequence
ttyq[0x0-0xf]  none                           network

see how the group= would go right before the comment? iykyk 😌

🌈 SEE ALSO 🌈

πŸ‘‘ HISTORY πŸ‘‘

a ttys file appeared in Version 6 AT&T UNIX. ancient. legendary. the blueprint fr fr ⭐


and that's the whole page bestie β€” this one's from the Debian peeps, dated June 1, 2021, and it's the TTYS(5) manual page πŸ’– go set up your terminals, you absolute icon 🫢✨

πŸ“¦ where this page comes from