CONSOLE(1)

πŸ’– CONSOLE(1) πŸ’–

conserver manual page, part one of four, bestie 🫢


✨ NAME ✨

console β€” the console server client program πŸ’…


🌸 SYNOPSIS 🌸

console [generic-args] [-aAfFsS] [-e esc] console
console [generic-args] [-iIuwWx] [console]
console [generic-args] [-hPqQrRV] [-[bB] message] [-d [user][@console]]
[-t [user][@console] message] [-[zZ] cmd]

generic-args: [-7DEknUv] [-c cred] [-C config] [-M master] [-p port] [-l
user]

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so. console is the whole vibe for manipulating console terminals remotely, or for polling running conserver(8) daemons to find out what's up πŸ‘‘. Two moods, one program, iconic fr.

In that first form up there ☝️, console asks for your password before it'll let you into a console interactively β€” and that's only on a non-trusted system, because a session like that can literally hand over single-user access 😭 so yeah, it's checking. And if the server has its autocompletion feature turned on? You only need to type as much of the console name as it takes to uniquely identify it to the server. slay, less typing ✨

For the non-interactive options, console outputs only the info you asked for and then dips. no small talk, no extra output, just the facts πŸ’…

Here's the tea on how it connects πŸ«–: console only knows about a primary conserver host (peep the -M option down below), and that's who it talks to first. In a multi-server environment, the primary server might refer the client over to a different server that's actually handling the console you want 🧚 β€” or, if you need it, it'll hand you a list of all servers (like when you run console with the -r option). Then console opens up connections to whichever server(s) are the right ones 🌈.

And the best part? You do not need to know which server manages which consoles. Not your problem, bestie πŸ’– As long as console knows a valid primary server and all the available consoles are listed in that primary server's configuration file, you're golden ⭐


✨ OPTIONS ✨

okay so the vibe with options is: you can throw them in as separate arguments (like -v -w) or you can cluster them together (like -vw) πŸ’…. Options and their arguments can have optional white space between them, so do whatever feels right. BUT β€” if an option argument has spaces or other characters the shell thinks are special, you gotta quote it, no cap.


  • -7 β€” strips the high bit off all the data you receive, whether it's coming from you typing or from the server, and it does this before literally any processing happens. Side effect bestie: this means escape sequence characters with the high bit set are not allowed. πŸ™ˆ
  • -a β€” access a console with a two-way (read-write) connection, and yes this is the default behavior ✨. If somebody else is already attached read-write, your connection gets dropped down to spy mode. it's giving polite.
  • -bmessage β€” broadcast a message to all users connected to each server. group chat announcement energy πŸ“’
  • -Bmessage β€” same as -b but it only sends the message to users on the primary server. lowkey more exclusive.
  • -ccred β€” loads an SSL certificate and key from the PEM encoded file cred. πŸ”
  • -Cconfig β€” use the per-user configuration file config. your personal config, your personal rules πŸ’…
  • -d β€” disconnects the users specified by user@console. and you get options, queen: you can specify the target as user (disconnect that user, no matter what console they're attached to), @console (disconnect everyone attached to that console), or user@console (disconnect that specific user attached to that specific console). pick your fighter 🎯
  • -D β€” enable debugging output. πŸ›
  • -eesc β€” sets the initial two-character escape sequence to whatever is represented by esc. any of the forms output by cat(1)'s -v option are accepted. the default value is `^Ec`. iconic default ngl.
  • -E β€” if encryption has been built into the code (--with-openssl), then encrypted client connections are, by default, a requirement. this option disables any attempt at creating an encrypted connection. and if you're out here wanting encrypted connections when your server supports it but falling back to non-encrypted otherwise? bestie that's the -U option, go look at that one instead. 🫢
  • -f β€” same as -a except it will force any existing connection into spy mode. moving them out of the way, respectfully.
  • -h β€” display a brief help message. πŸ†˜
  • -i β€” display status information in a machine-parseable format (the details are down below, keep scrolling πŸ‘€).
  • -I β€” same as -i but it just acts on the primary server.
  • -k β€” aborts the connection if the console is not in the up state immediately upon connecting. no waiting around, periodt.
  • -luser β€” sets the login name used for authentication to user. by default, console uses $USER if its uid matches the user's real uid, or $LOGNAME if its uid matches the user's real uid, or else the name associated with the user's real uid. yes it's a whole chain, it's giving detective work πŸ”
  • -Mmaster β€” the console client program polls master as the primary server, instead of the default set at compile time (typically `console`). the default master may be changed at compile time using the --with-master option. BUT if --with-uds is used to enable Unix domain sockets, this option points console to the directory which holds those sockets. the default master directory (`/tmp/conserver`) may be changed at compile time using the --with-uds option. got it? got it. πŸ’–
  • -n β€” do not read the system-wide configuration file.
  • -pport β€” set the port to connect to. this can be either a port number or a service name. the default port may be changed at compile time using the --with-port option. and heads up: if the --with-uds option was used, this option is ignored. πŸ’€
  • -P β€” display the pid of the master daemon process on each server.
  • -q β€” the console client connects to each server to request that the server daemon quit (shut down). the root password of the host(s) running conserver is required unless the local host is listed as `trusted` in the conserver.cf file; in that case, just press <return>. so casual.
  • -Q β€” same as -q but it just acts on the primary server.
  • -r β€” display daemon versions. the console client connects to each server to request its version information. πŸ’…
  • -R β€” same as -r but it just acts on the primary server.
  • -s β€” request a read-only (spy mode) connection. in this mode all the escape sequences (below) work, or report errors, but all other keyboard input is discarded. you're just here to observe, bestie. πŸ‘€
  • -t β€” send a text message to user@console. you can specify the target as user (send to that user, regardless of what console they're attached to), @console (send to all users attached to that console), or user@console (send to that user attached to that console). sliding into their DMs, console edition πŸ’Œ
  • -u β€” shows a list of all consoles with status (`up`, `down`, or `init`) and attached users (user@host if attached read-write, `<spies>` if only users in spy mode, or `<none>`). full roster check πŸ“‹
  • -U β€” if encryption has been built into the code (--with-openssl), encrypted client connections are, by default, a requirement. this option allows the client to attempt an encrypted connection but fall back to a non-encrypted connection if the server doesn't support encryption. and if the encryption handshake is failing? disabling encryption on the client with the -E option is probably what you want. 🫢
  • -v β€” be more verbose when building the connection(s). use this option in combination with any of the `show` options (below) for added benefit. more info = more fun, obviously.
  • -V β€” output the version and settings of the console client program and then exit. ✨
  • -w β€” shows a list of all who are currently connected to consoles, including the hostnames where the console connections originate and the idle times. this is useful to see if anybody is actively using the console system if it becomes necessary to shut down conserver. πŸ‘‘ detective behavior fr fr
  • -W β€” same as -w but it just acts on the primary server.
  • -x β€” show a list of consoles and devices.
  • -zcmd β€” sends a command (cmd) to each server and displays the result. the valid commands are:
    • bringup β€” try to connect all consoles marked as down (this is equivalent to sending the server a SIGUSR1)
    • SIGUSR1 β€” same as bringup
    • help β€” displays the help message
    • pid β€” returns the pid of the server (this is equivalent to -P)
    • quit β€” instructs the server to shut down (this is equivalent to -q or sending the server a SIGTERM)
    • SIGTERM β€” same as quit
    • reconfig β€” instructs the server to reload the configuration file, then perform the actions of reopen (this is equivalent to sending the server a SIGHUP)
    • SIGHUP β€” same as reconfig
    • reopen β€” instructs the server to reopen all logfiles, then perform the actions of bringup (this is equivalent to sending the server a SIGUSR2)
    • SIGUSR2 β€” same as reopen
    • version β€” returns the version of the server (this is equivalent to -V)
  • -Zcmd β€” same as -z but it just sends cmd to the primary server.

okay now some group rules bestie ✨

the -A, -F, or -S options have the same effect as their lower-case variants. and on top of that, they each request the last 20 lines of the console output after making the connection (as if `^Ecr` were typed). so it's the lowercase behavior PLUS a lil recap. πŸŽ€

the -i, -u, -w, and -x options can be given a console name, which will limit their output to that console. narrow it down, focus, main character energy.


🌈 the -i tea: 15 colon-separated fields 🌈

the -i option outputs status information regarding each console in 15 colon-separated fields. here's every single one, no skips:

  • name β€” the name of the console.
  • hostname,pid,socket β€” the hostname, pid, and socket number of the child process managing the console.
  • type β€” the type of console. values will be a / for a local device, | for a command, ! for a remote port, % for a Unix domain socket, and # for a noop console.
  • console-details β€” the details regarding the console. the values here (all comma-separated) depend on the type of the console. local devices will have values of the device file, baud rate/parity, and file descriptor for the device. commands will have values of the command, the command's pid, the pseudo-tty, and file descriptor for the pseudo-tty. remote ports will have values of the remote hostname, remote port number, `raw` or `telnet` protocol, and file descriptor for the socket connection. Unix domain sockets will have the path to the socket and the file descriptor for the socket connection. noop consoles will have nothing.
  • users-list β€” the details of each user connected to the console. the details for each user are an @ separated list of w, r, or s (for read-write, read-only, or suspended), username, hostname the user is on, the user's idle time, and (for r and s users only) `rw` or `ro` (if the user wants read-write mode or not). each user bundle is separated by commas.
  • state β€” the state of the console. values will either be `up`, `down`, or `init`.
  • perm β€” this value will either be `rw` or `ro`. it will only be `ro` if the console is a local device (/ type) and the permissions are such that the server can open the file for read, but not write.
  • logfile-details β€” the details regarding the logging for the console. the comma-separated values will be the logfile, `log` or `nolog` (if logging is on or not β€” toggled via `^EcL`), `act` or `noact` (if activity logging is enabled or not β€” the a timestamp option), the timestamp interval, and the file descriptor of the logfile.
  • break β€” the default break sequence used for the console.
  • reup β€” if the console is currently down and the automatic reconnection code is at work, it will have the value of `autoup`, otherwise it will be `noautoup`.
  • aliases β€” the console aliases are presented in a comma-separated list.
  • options β€” the active options for the console are presented in a comma-separated list.
  • initcmd β€” the initcmd configuration option for the console.
  • idletimeout β€” the idletimeout configuration option for the console.
  • idlestring β€” the idlestring configuration option for the console.

βš™οΈ CONFIGURATION βš™οΈ

okay bestie, so here's the tea on how Console figures out its settings. It reads them in this exact order:

  1. the system-wide config file (console.cf)
  2. then your per-user config file (.consolerc)
  3. then it layers on whatever you passed as command-line arguments

Every single one of those spots can override the one before it. And the same energy applies inside a single file β€” later entries always beat earlier ones. So the move is: put your ``global'' defaults first, and your more-specific stuff second. That's the whole vibe. πŸ’…

The config file gets parsed with the exact same parser as conserver.cf(5), so go check that manpage if you want the parser deets. Now β€” Console recognizes these configuration blocks:

config hostname|ipaddr

Define a configuration block for the client host called hostname, or for the address ipaddr. And if you use the value ``*''? That block gets applied to every single client host. Universal slay. ✨

  • escape esc β€” sets the escape sequence (peep the -e command-line flag for the same thing).
  • master master β€” sets the default master to master (same as the -M command-line flag).
  • playback num|"" β€” overrides the playback length for the p escape command to num lines (only if the server supports it, bestie). The special value 0'' makes the client use the number of lines of your current terminal (if it can even figure that out). And if you use the null string (""''), the playback length just doesn't get overridden at all.
  • port port β€” sets the default port to port (see the -p command-line flag).
  • replay num|"" β€” overrides the replay length for the r escape command to num lines (again, only if the server supports it). The special value 0'' makes the client use the number of lines of the current terminal (if determinable). Null string (""'') means the replay length is not overridden.
  • sslcacertificatefile filename β€” loads the valid CA certificates for the SSL connection from the PEM encoded file.
  • sslcacertificatepath directory β€” loads the valid CA certificates for the SSL connection from the PEM encoded files sitting in the directory.
  • sslcredentials filename β€” sets the SSL credentials file location (see the -c command-line flag).
  • sslenabled yes|true|on|no|false|off β€” sets whether encryption is even attempted when talking to servers (see the -E command-line flag).
  • sslrequired yes|true|on|no|false|off β€” sets whether encryption is required when talking to servers (see the -U command-line flag).
  • striphigh yes|true|on|no|false|off β€” sets whether to strip the high bit off all data received (see the -7 command-line flag).
  • username user β€” sets the username passed to the server to user (see the -l command-line flag).

terminal type

Define a configuration block for when you're using a terminal of type type. And yep, if you use the value ``*'' it applies to all terminal types. πŸ’–

  • attach string|"" β€” sets a string to print when you successfully attach to a console. Character substitutions get performed based on the attachsubst value, and they happen before interpretation of the special characters below. Null string (``""'') means nothing gets printed. string is a simple character string, except for \ and ^, which are giving:
    • \a β€” alert
    • \b β€” backspace
    • \f β€” form-feed
    • \n β€” newline
    • \r β€” carriage-return
    • \t β€” tab
    • \v β€” vertical-tab
    • \\ β€” backslash
    • \^ β€” circumflex
    • \ooo β€” octal representation of a character (where ooo is one to three octal digits)
    • \c β€” character c
    • ^? β€” delete
    • ^c β€” control character (c is ``and''ed with 0x1f)

An interesting use of attach and attachsubst would be:

terminal xterm {
    attach "^[]0;conserver: U@C^G";
    attachsubst U=us,C=cs;
}
  • attachsubst c=t[n]f[,...]|"" β€” performs character substitutions on the attach value. You can define a whole series of replacements by giving a comma-separated list of c=t[n]f sequences, where c is any printable character, t specifies the replacement value, n is a field length (optional), and f is the format string. t can be one of the characters below, categorized as either a string replacement or a numeric replacement β€” and that category is what dictates how the n and f fields get used:

String Replacement

  • u β€” username
  • c β€” console name

Numeric Replacement

  • none available (yet) πŸ™ˆ

For string replacements: if the replacement isn't at least n characters, it gets padded with space characters on the left. And f must be s. For numeric replacements: the value gets formatted to at least n characters, padded with 0s if n begins with a 0, and space characters otherwise. f must be either d, x or X β€” meaning a decimal, lower-case hexadecimal, or uppercase hexadecimal conversion. Null string (``""'') means no replacements get done at all.

  • detach string|"" β€” sets a string to print once you're detached from a console. Character substitutions get performed based on the detachsubst value. See the attach option for the whole explanation of string. Null string (``""'') = nothing printed.
  • detachsubst c=t[n]f[,...]|"" β€” performs character substitutions on the detach value. See the attachsubst option for the format string explanation.

A simple configuration to set a new default escape sequence and override the master location would be:

# override options for all hosts
config * {
    master localhost;
    escape ^Ee;
}
# set things more specific to host1
# note: if the entries were reversed, host1
# would also use localhost.
config host1 {
    master console1;
}

πŸŽ€ ESCAPE SEQUENCES πŸŽ€

The connection can be controlled by a two-character escape sequence, followed by a command. The default escape sequence is ``control-E c'' (octal 005 143). (Fun fact: the escape sequences are actually processed by the server β€” see the conserver(8) man page for more.) And the commands are:

  • . β€” disconnect
  • ; β€” move to another console
  • a β€” attach read-write if nobody already is
  • b β€” send broadcast message to all users on this console
  • c β€” toggle flow control (don't do this)
  • d β€” down the current console
  • ecc β€” change the escape sequence to the next two characters
  • f β€” forcibly attach read-write
  • g β€” group info
  • i β€” information dump
  • L β€” toggle logging on/off
  • l? β€” list the break sequences available
  • l0 β€” send the break sequence associated with this console
  • l1-9a-z β€” send the specific break sequence
  • m β€” display the "message of the day"
  • o β€” close (if open) and reopen the line (to clear errors (silo overflows)) and the log file
  • p β€” playback the last 60 lines of output
  • P β€” set number of playback lines
  • r β€” replay the last 20 lines of output
  • R β€” set number of replay lines
  • s β€” switch to spy mode (read only)
  • u β€” show status of hosts/users in this group
  • v β€” show the version of the group server
  • w β€” who is using this console
  • x β€” examine this group's devices and modes
  • z β€” suspend this connection
  • ! β€” invoke task
  • | β€” attach a local command to the console
  • ? β€” display list of commands
  • ^M (return) β€” continue, ignore the escape sequence
  • ^R (ctrl-R) β€” replay the last line only
  • \ooo β€” send character having octal code ooo (must specify three octal digits)

If any other character is hit after the escape sequence, all three characters get discarded. πŸ’€ Also note: a line break or a down command can only be sent from a read-write connection. If you want to send the escape sequence through the connection, you've gotta redefine the outer escape sequence, or use ^Ec\ooo to send the first escape character before typing the second character directly.

In the -u output, the login <none>'' means nobody is viewing that console, and the login <spies>'' means nobody has a read-write connection (only read-only).

When you're running a local command via ``^Ec|'', you can type ^C to send the command a SIGHUP, ^\ to send the command a SIGKILL, and o to toggle the display of the console data. 🫢


🌈 EXAMPLES 🌈

  • console -u β€” Outputs something like:
dumb      up      <none>
expert    up      ksb@mentor
tyro      up      <spies>
mentor    up      <none>
sage      up      fine@cis

The <none> indicates no one is viewing dumb or mentor, the <spies> indicates only read-only connections exist for tyro, and the other login@host entries indicate users attached read-write to sage and expert. πŸ‘‘

  • console -w β€” Outputs something like:
ksb@extra       attach  2days     expert
file@cis        attach  21:46     sage
dmr@alice       spy      0:04     tyro

The third column is the idle time of the user. Either hours:minutes or number of days gets displayed. ⭐

  • console -e "^[1" lv426 β€” Requests a connection to the host lv426'' with the escape characters set to escape one''. πŸ¦‹

✨ FILES ✨

okay so bestie, here's where stuff lives πŸ’– β€” but heads up, these default file locations can be overridden at compile time, or by those command-line options we talked about up above. wanna know what your build actually has baked in? run console -V and it'll spill the compile-time defaults tea β˜•

  • /etc/console.cf β€” the system-wide configuration file, the whole-server glow-up πŸ’…
  • $HOME/.consolerc β€” the per-user configuration file, aka your personal little corner of the setup πŸŽ€

πŸ’€ BUGS πŸ’€

not the ✨iconic✨ section but we must be honest, no cap πŸ™ˆ

  • So it is possible to create a loop of console connections, and the results are genuinely ugly. Never run console from within a console connection β€” unless you set each escape sequence differently. like, please don't. i'm begging 🫢
  • The -i output can produce more than the stated number of fields of information if the user-provided information has embedded colons. so if you're counting fields and it doesn't add up… that's why 😭
  • and honestly? "I'm sure there are more, I just don't know where they are. Please let me know if you find any." β€” the author said it, not me, and that's the most relatable dev energy in this entire manpage fr fr πŸ’€

πŸ‘‘ AUTHORS πŸ‘‘

give it up for the legends who built this:

  • Thomas A. Fine, Ohio State Computer Science
  • Kevin Braunsdorf, Purdue University Computing Center
  • Bryan Stansell, conserver.com

absolute icons, all three of them 🌈


πŸ¦‹ SEE ALSO πŸ¦‹

go read these next, bestie, they're the rest of the lore:


and that's a wrap on the whole page!! πŸ’– this was conserver-8.3.0, dated 2026/02/02 β€” go forth and multiplex those consoles, you main character 🫢✨ periodt.

πŸ“¦ where this page comes from