CONSERVER(8)
π CONSERVER(8) β the console server daemon π
okay so this is CONSERVER(8), from the conserver manual, section 8, which is the daemon section, and bestie she is the main character of console management. no cap. π
π NAME π
conserver β the console server daemon β¨
π SYNOPSIS π
conserver [-7dDEFhinoRSuvV] [-a type] [-m max] [-M master] [-p port] [-b
port] [-c cred] [-C config] [-P passwd] [-L logfile] [-O min] [-U
logfile]
π¦ DESCRIPTION π¦
okay so like, conserver is the daemon that manages remote access to system consoles for multiple users at once, through the console(1) client program, and (optionally, if you want) it logs the console output too. π
She can connect to consoles through literally so many vibes:
- local serial ports
- Unix domain sockets
- TCP sockets (for terminal servers and the like)
- any external program you want, periodt
πΈ how she wakes up πΈ
When started, conserver reads the conserver.cf(5) file for the deets on each console. The console type, logging options, serial or network parameters, and user access levels are just a few of the things you can specify in there. Then command-line options get applied on top, possibly overriding the conserver.cf(5) settings. iconic behavior honestly.
Then she sorts consoles into two buckets:
- consoles she should actively manage
- consoles she should just know about, so she can point clients at other
conserverinstances
The rule is: if the master value of a console matches the hostname or ip address of the local machine, conserver actively manages that console. Otherwise it's considered a ``remote'' console and it's managed by a different server. not her problem, she's just the messenger π
Conserver forks a child for each group of consoles it has to manage, and hands each process a port number to listen on. The max number of consoles per child process is set with the -m option. Then the console(1) client talks to the master console server process to find out the port (and the host too, in a multi-server setup) where the right child is listening.
π access control, aka the vibe check π
- She restricts connections from clients based on the host access section of her
conserver.cf(5)file. - She restricts users based on the console access lists in the
conserver.cf(5)file. - She authenticates users against her
conserver.passwd(5)file. - She can also restrict clients using the tcp-wrappers package β that's enabled with
--with-libwrap.
β οΈ Important ordering deets: this authentication happens before consulting the conserver.cf(5) access list. so like, auth first, list second. don't get it twisted.
π§ Unix domain sockets π§
When Unix domain sockets are used between the client and server (enabled with --with-uds), authentication checks are done against the hardcoded address ``127.0.0.1''. Automatic client redirection is also disabled (as if the -R option had been used), because the client literally cannot communicate with remote servers. π«
The directory used to hold the sockets gets checked to make sure it's empty when the server starts. And this is the important part bestie β the server will NOT remove any files in that directory itself, just in case the directory was accidentally specified as ``/etc'' or some other critical location. she's careful like that, she's not gonna delete your whole system. π
She will do her best to remove all the sockets when she shuts down, but she could stop ungracefully (crash, ``kill -9'', etc) and leave files behind. And then it's up to the admin (or a creative startup script) to clean up the directory before the server will start again. π
π conserver owns the connection, fully π
conserver completely controls any connection to a console. All escape sequences given by the user to console are passed to the server without interpretation. The server is the one that recognizes and processes all escape sequences. so like, don't expect the client to do anything clever, she just forwards it. periodt.
β respawning + signals β
The conserver parent process will automatically respawn any child process that dies. mother energy fr. π«Ά
The following signals are propagated by the parent process to its children:
SIGTERMβ Close all connections and exit. bye bestie πSIGHUPβ Reread the configuration file. New consoles are managed by forking off new children, deleted consoles (and their clients) are dropped, and changes to consoles are done "in place", resetting the console port (bringing it down and up) only when necessary. The console name is what's used to determine when consoles have been added/removed/changed. All actions performed bySIGUSR2are also performed. πSIGUSR1β Try to connect to any consoles marked as down. This comes in handy if you had a terminal server (or more than one) that wasn't accepting connections at startup and you wantconserverto try reconnecting to all those downed ports. π©ΉSIGUSR2β Close and reopen all console logfiles and, if in daemon mode (the-doption), the error logfile (see the-Loption). All actions performed bySIGUSR1are also performed. πβ¨
π unloved errors π
Consoles with no current client connection might still produce important error messages. With the -u option, these ``unloved'' errors get labeled with a machine name and output on stdout (or, in daemon mode, to the logfile). This lets a live operator or an automated log scanner find otherwise unseen errors by watching in a single location. one place, all the drama. π
π who can run her π
conserver must be run as root if it needs to bind to a port under 1024, or if it must read protected password files (like shadow passwords) for authentication (see conserver.passwd(5)). Otherwise, it may be run by any user, with -p used to specify a port above 1024. so like, not-root is fine, just pick a big port number. π
π₯ encryption era π₯
If encryption has been built into the code (--with-openssl), encrypted client connections (without certificate exchanges) happen by default. To add certificate exchanges, use the -c option with the client and the server.
For authentication of the certificates to actually work, the signing certificate must be properly trusted, which usually means the public portion is in OPENSSL_ROOT/ssl/certs (on both the client and server sides). See the sample self-signing certificate making script contrib/maketestcerts for further clues. π§Ύ
To allow non-encrypted client connections (in addition to encrypted client connections), use the -E option.
π that's the end of part 1 bestie, don't go anywhere, there's more β¨
β¨ OPTIONS β¨
okay bestie, here's the tea on how to feed conserver its options π«Ά
You can hand these over as separate arguments (like -n -d) or clustered together (like -nd). Options and whatever arguments they eat can be separated by optional white space, no stress. But β and this is important β if an option argument has spaces or any other characters your shell thinks are β¨specialβ¨, you gotta quote it. No cap.
-7β strips the high bit off of all data received, whether it came from the console client or from the console device, before any processing happens at all. bye high bit π-atypeβ sets the default access type for incoming connections from console clients. Your choices arerfor refused (this is the default, so rude),afor allowed, ortfor trusted. This kicks in for hosts where nothing matching shows up in the access section ofconserver.cf(5).-bportβ sets the base port for children to listen on. Each child starts hunting for free ports atportand works its way upward, trying a max number of ports equal to twice the maximum number of groups. If it can't find a free port anywhere in that range?conserverexits, periodt. By default,conserverjust lets the operating system pick a free port for it. king behavior honestly π-ccredβ loads an SSL certificate and key from the PEM encoded filecred.-Cconfigβ reads configuration info from the fileconfig. The default config can be changed at compile time with the--with-cffileoption.-dβ become a daemon π . Disconnects from the controlling terminal and sends all output (yes, including any debug output) to the logfile (peep-L).-Dβ enables debugging output, sent tostderr. Stack multiple-Doptions and the debug output gets louder and louder. more D's, more drama π₯-Eβ if encryption got built into the code (--with-openssl), then encrypted client connections are a requirement. This option lets non-encrypted clients (as well as encrypted ones, obviously) connect to consoles.-Fβ do not automatically reinitialize failed (unexpectedly closed) consoles. BUT β if the console is a program (that's the|syntax) and it closes with a zero exit status, the console gets reinitialized anyway, no matter what this option says. Without-F, a console is immediately reopened, and if that fails it's retried every minute until it works. This option has no effect on the-oand-Ooptions.-hβ outputs a brief help message. short n sweet π-iβ initiates console connections on demand (and closes them when they're not being used).-Llogfileβ logs errors and informational messages tologfileafter startup in daemon mode (-d). This option does not apply when you're not running in daemon mode. The default logfile can be changed at compile time using the--with-logfileoption.-mmaxβ sets the maximum consoles managed per process. The defaultmaxcan be changed at compile time using the--with-maxmemboption.-Mmasterβ normally this letsconserverbind to a particular IP address (like127.0.0.1) instead of all interfaces. The default is to bind to all addresses. However β if--with-udswas used to enable Unix domain sockets for client/server communication, then this pointsconserverto the directory where it should store the sockets. The default master directory (/tmp/conserver) can be changed at compile time using the--with-udsoption.-nβ obsolete (now a no-op); go look at-u.-oβ normally, a client connecting to adowned'' console just... does that. With this option, the server will automatically attempt to open (bring up'') the console when the client connects. teamwork π«Ά-Ominβ enables periodic attempts (everyminminutes) to open (``bring up'') all downed consoles (similar to sending aSIGUSR1). Without this option, or ifminis zero, no periodic attempts happen at all.-pportβ sets the TCP port for the master process to listen on. This can be either a port number or a service name. The default port, ``conserver'' (typically 782), can be changed at compile time using the--with-portoption. If the--with-udsoption was used, this option is ignored.-Ppasswdβ reads the table of authorized user data from the filepasswd. The defaultpasswdcan be changed at compile time using the--with-pwdfileoption.-Rβ disables automatic client redirection to otherconserverhosts. Which means informational commands like-wand-iwill only show the status of the localconserverhost, and any attempt to connect to remote consoles just gives the user an informative message instead.-Sβ do not run the server, just do a syntax check of the configuration file and exit with a non-zero value if there's an error. Using more than one-Smakesconserveroutput various info about each console in 5 colon-separated fields, all wrapped up in curly-braces. The philosophy here is to hand you enough info that some external thing can detect when multiple consoles are accessing the same physical port β because that's so environment-specific,conservercan't do that check internally. so it outsources it, iconic β¨
The fields are:
nameβ the name of the console.masterβ the hostname of the masterconserverhost for the console.aliasesβ the console aliases in a comma-separated list.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.detailsβ multiple values, comma-separated, and they depend on the type of the console. Local devices will have the values of the device file and baud rate/parity. Commands will have string to invoke. Remote ports will have the values of the remote hostname and port number. Unix domain sockets will have the path to the socket. Noop consoles will have nothing. (nothing! π)
-uβ sends unloved console output toconserver'sstdout(which, in daemon mode, is redirected to the logfile). This applies to all consoles that have no user attached, independent of whether logging of individual consoles is enabled viaconserver.cfentries.-Ulogfileβ copies all console data to the ``unified''logfile. The output is the same as the-uoutput, but all consoles get logged, not just the ones without a user. Every line of output is prefixed with the console name. And if a user is attached read/write, a*gets appended to the console name β that's so log watching utilities can ignore potential user-introduced alarms. thoughtful β¨-vβ echoes the configuration as it's being read (be verbose).-Vβ outputs the version number and settings of theconserverprogram, then exits.
π PROTOCOL π
okay so the protocol used to talk to the conserver daemon has two basic styles, and you need to know both:
- the initial line-based mode, which happens <em>before</em> you connect to a console
- the character-based, escape-sequence mode, which is what you get <em>while</em> connected to a console
The initial line-based mode kicks off the same way for both the master process and its children. Once a client connects successfully (and isn't rejected), an ok'' is sent. Then the client issues a command and the server responds with a result string (ok'' being the sign of success for most commands). The commands you get are help'', ssl'' (if SSL was built into the code), login'', and exit''. Using the login'' command, the client authenticates and unlocks the extended command set β and <hotpink>this</hotpink> is where the master process and its children start to differ. The master process hands the client access to global commands, while the child provides commands for interacting with the consoles it manages. The help'' command, in both cases, gives you a complete list of commands plus a short description of what each one does. bestie behavior honestly π
The second, character-based style of interaction happens when the client issues the ``call'' command with a child process. That command connects the client to a console, and from that point on it just relays all traffic between the client and the console. There is no more command-based interaction between client and server after that β any interaction with the server goes through the default escape sequence.
And no, this is by no means a complete description of the entire client/server interaction. It's just a brief explanation so you get an idea of what the program actually does. For the full details, go read the PROTOCOL file in the distribution.
π FILES π
These default file locations can be overridden at compile time or by the command-line options described above. Run conserver -V to see the defaults that got baked in at compile time. π
/etc/conserver.cfβ description of console terminal lines and client host access levels; seeconserver.cf(5)./etc/conserver.passwdβ users allowed to access consoles; seeconserver.passwd(5)./var/run/conserver.pidβ the masterconserverprocess ID/var/log/conserverβ log of errors and informational messages/tmp/conserverβ directory to hold Unix domain sockets (if enabled)
Also, output from individual consoles can be logged to separate files specified in conserver.cf(5). slay π
π BUGS π
I'm sure there are bugs, I just don't know where they are. Please let me know if you find any. π (fr fr, they're out there lurking)
π AUTHORS π
- Thomas A. Fine, Ohio State Computer Science
- Kevin S Braunsdorf, Purdue University Computing Center
- Bryan Stansell, conserver.com
π¦ SEE ALSO π¦
console(1), conserver.cf(5), conserver.passwd(5)
and that's a wrap bestie!! π this whole page is from conserver-8.3.0, dated 2026/02/02 β go forth and manage those consoles, you absolute icon πβ¨
π¦ where this page comes from
- epel 10: conserver 8.3.0-1.el10_3 Β· BSD-3-Clause AND Zlib
- fedora 44: conserver 8.3.0-1.fc44 Β· BSD-3-Clause AND Zlib
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms