Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision |
server:terminal [2019/06/08 15:17] – Document the terminal server key bindings digital man | server:terminal [2024/03/04 18:27] – [Configure] Updated SCFG screenshot digital man |
---|
| |
* Supports ANSI X3.64 (color and monochrome), PETSCII, [[wp>Remote_imaging_protocol|RIP]], and dumb terminals | * Supports ANSI X3.64 (color and monochrome), PETSCII, [[wp>Remote_imaging_protocol|RIP]], and dumb terminals |
* Supports [[wp>ASCII|US-ASCII]], [[wp>Code_page_437|CP437]] (a.k.a. IBM Extended ASCII) and CBM/[[wp>PETSCII]] character sets | * Supports [[wp>ASCII|US-ASCII]], [[wp>Code_page_437|CP437]] (a.k.a. IBM Extended ASCII), UTF-8 (UNICODE), and CBM/[[wp>PETSCII]] character sets |
* Supported Protocols: [[#Telnet]], [[#RLogin]], and [[#SSH]] | * Supported Protocols: [[#Telnet]], [[#RLogin]], [[#SSH]], and raw TCP |
| |
===== Configuration ===== | ===== Configure ===== |
| |
* Configured via the ''[[dir:ctrl]]/[[config:sbbs.ini]]'' file | The Synchronet Terminal Server can be configured via [[util:SCFG]]:Servers->Terminal Server: |
* Optionally configured (on Windows) via [[monitor:SBBSCTRL]]:Telnet->Configure dialog | |
* Configured behavior may be over-ridden via ''[[monitor:sbbscon|sbbs]]'' command-line arguments | <file> |
| ╔═══════════════════════════════════════════╗ |
| ║ Terminal Server ║ |
| ╠═══════════════════════════════════════════╣ |
| ║ │Enabled Yes ║ |
| ║ │Log Level Info ║ |
| ║ │Serving Nodes 1-4 ║ |
| ║ │SSH Support... Port 22 ║ |
| ║ │Telnet Support... Port 23 ║ |
| ║ │RLogin Support... Port 513 ║ |
| ║ │40 Column PETSCII Support Port 64 ║ |
| ║ │80 Column PETSCII Support Port 128 ║ |
| ║ │DOS Program Support Yes ║ |
| ║ │Max Concurrent Connections Unlimited ║ |
| ║ │Max Login Inactivity 10 minutes ║ |
| ║ │Max New User Inactivity 1 hour ║ |
| ║ │Max User Inactivity 10 minutes ║ |
| ║ │Output Buffer Drain Timeout 10 ms ║ |
| ║ │Execute Timed Events Yes ║ |
| ║ │Execute QWK-related Events Yes ║ |
| ║ │Lookup Client Hostname Yes ║ |
| ║ │JavaScript Settings... ║ |
| ║ │Failed Login Attempts... ║ |
| ╚═══════════════════════════════════════════╝ |
| </file> |
| |
| ... or configured (on Windows) via [[monitor:SBBSCTRL]]:Telnet->Configure dialog |
| |
| {{:server:sbbsctrl.3.20.term.config.png}} |
| |
| ... or configured by manually editing the ''[BBS]'' section of the ''[[dir:ctrl]]/[[config:sbbs.ini]]'' file |
| |
===== Key Bindings ===== | ===== Key Bindings ===== |
==== Global Ctrl-Keys ==== | ==== Global Ctrl-Keys ==== |
| |
These control-key combinations has special purpose at almost any-time while using the Terminal Server: | These control-key combinations have special purpose at almost any-time while using the Terminal Server: |
| |
^ Ctrl-Key ^ Description ^ | ^ Ctrl-Key ^ Description ^ |
| Ctrl-T | Display current time information | | | Ctrl-T | Display current time information | |
| |
| Global control-keys are handled in sbbs_t::handle_ctrlkey(), called from sbbs_t::inkey() in ''inkey.cpp'' and exposed in JavaScript via console.inkey(). |
| |
| Global control key handling may be disabled/re-enabled (per key) programmatically via the JavaScript console.ctrlkey_passthru property: |
| js.on_exit("console.ctrlkey_passthru = " + console.ctrlkey_passthru); |
| console.ctrlkey_passthru|=(1<<16); // Disable Ctrl-P handling in sbbs |
| |
| Custom global control-key handlers may be installed via [[util:SCFG]]->External Programs->Global Hot Key Events: |
| |
| <file> |
| ╔═══════════════════════════════════════════╗ |
| ║ Global Hot Key Events ║ |
| ╠═══════════════════════════════════════════╣ |
| ║ │Ctrl-P ?privatemsg.js ║ |
| ║ │Ctrl-U ?nodelist.js -active ║ |
| ║ │ ║ |
| ╚═══════════════════════════════════════════╝ |
| </file> |
==== Line Input ==== | ==== Line Input ==== |
| |
| Ctrl-Z | Undo (revert edited line) | | | Ctrl-Z | Undo (revert edited line) | |
| Ctrl-R | Redraw current line | | | Ctrl-R | Redraw current line | |
| Ctrl-A | Insert an attribute code (when allowed) | | | Ctrl-A | Insert an [[custom:ctrl-a_codes|attribute code]] (when allowed) | |
| Ctrl-G | Insert a beep character (when allowed) | | | Ctrl-G | Insert a beep character (when allowed) | |
| |
| The line/string input control-keys are handled via sbbs_t::getstr() in ''getstr.cpp'' and exposed in JavaScript via console.getstr(). |
| |
==== Extended Keys ==== | ==== Extended Keys ==== |
| |
The Synchronet Terminal Server endeavors to support most extended-keys (e.g. home, end, arrow-keys, etc.) on most terminals while simultaneously supporting Ctrl-Key equivalents for all terminals. | The Synchronet Terminal Server endeavors to support most extended-keys (e.g. home, end, arrow-keys, etc.) on most terminals while simultaneously supporting control-key equivalents for all terminals. |
| |
^ Extended Key ^ Ctrl-Key ^ ANSI((ANSI X3.64/ECMA-048 escape sequence)) ^ Other((e.g. VT-220 or XTerm escape sequence)) ^ Description (typical use) ^ | ^ Extended Key ^ Decimal ^ Hex ^ Ctrl-Key ^ ANSI((ANSI X3.64/ECMA-048 escape sequence)) ^ Other((e.g. VT-220 or XTerm escape sequence)) ^ Description (typical use) ^ |
| Home | Ctrl-B | \e[H | \e[1~ | Move cursor to beginning of line or top of page/list/document | | | Home | 2 | 02 | Ctrl-B | \e[H | \e[1~ | Move cursor to beginning of line or top of page/list/document | |
| End | Ctrl-E | \e[K and \e[F | \e[4~ | Move cursor to end of line or bottom of page/list/document | | | End | 5 | 05 | Ctrl-E | \e[K and \e[F | \e[4~ | Move cursor to end of line or bottom of page/list/document | |
| Up-arrow | Ctrl-tilde | \e[A | | Move cursor up one line or recall previous history item | | | Up-arrow | 30 | 1E | Ctrl-Caret | \e[A | | Move cursor up one line or recall previous history item | |
| Down-arrow | Ctrl-J | \e[B | | Move cursor down one line or recall next history item | | | Down-arrow | 10 | 0A | Ctrl-J | \e[B | | Move cursor down one line or recall next history item | |
| Left-arrow | Ctrl-] | \e[D | | Move cursor to the left | | | Left-arrow | 29 | 1D | Ctrl-] | \e[D | | Move cursor to the left | |
| Right-arrow | Ctrl-F | \e[C | | Move cursor to the right | | | Right-arrow | 6 | 06 | Ctrl-F | \e[C | | Move cursor to the right | |
| Page-up | Ctrl-P | \e[V | \e[5~ | Move cursor up one page | | | Page-up | 16 | 10 | Ctrl-P | \e[V | \e[5~ | Move cursor up one page | |
| Page-down | Ctrl-N | \e[U | \e[6~ | Move cursor up one page | | | Page-down | 14 | 0E | Ctrl-N | \e[U | \e[6~ | Move cursor up one page | |
| Insert | Ctrl-V | \e[@ | \e[2~ | Toggle insert/overwrite text mode | | | Insert | 22 | 16 | Ctrl-V | \e[@ | \e[2~ | Toggle insert/overwrite text mode | |
| Delete | Ctrl-? | | \e[3~ | Delete character under cursor (delete-right), also Ctrl-Backspace | | | Delete | 127 | 7F | Ctrl-? | | \e[3~ | Delete character under cursor (delete-right), also Ctrl-Backspace | |
| |
| |
| |
The Synchronet Terminal Server will negotiate Telnet options with the client (enforcing echo and non-line-at-a-time modes), perform ''IAC'' (character 255) escaping, and CR/LF->CR and CR/NUL->CR translation (when not in //binary mode//). | The Synchronet Terminal Server will negotiate Telnet options with the client (enforcing echo and non-line-at-a-time modes), perform ''IAC'' (character 255) escaping, and CR/LF->CR and CR/NUL->CR translation (when not in //binary mode//). |
| |
| ==== Configure ==== |
| Telnet support in the Synchronet Terminal Server can be configured via [[util:SCFG]]:Servers->Terminal Server->Telnet Support: |
| |
| <file> |
| ╔══════════════════════════════════╗ |
| ║ Telnet Support ║ |
| ╠══════════════════════════════════╣ |
| ║ │Enabled Yes ║ |
| ║ │Interfaces 0.0.0.0, :: ║ |
| ║ │Port 23 ║ |
| ║ │Command Debug No ║ |
| ║ │Send Go-Aheads Yes ║ |
| ╚══════════════════════════════════╝ |
| </file> |
| |
| ==== Options ==== |
| |
| Telnet options are negotiated between the client and server, normally without any indication to the user. |
| |
| If no Telnet options are received by the Terminal Server during an initial client session on the configured Telnet port, the Terminal Server will revert the client to just "Raw TCP" protocol. |
| |
| Telnet options can be re-negotiated at any time during a Telnet session, but most options are only negotiated during the initial connection. |
| |
| ^ Options ^ Request ^ Description ^ |
| | ECHO | WILL | Server will provide the echo of input keys, so request the the terminal does not echo (RFC-[[rfc>857]])| |
| | SUP_GA | WILL | Server does not send or expect to receive any Telnet Go-Ahead (GA) commands (RFC-[[rfc>858]]) | |
| | TERM_TYPE | DO | Server would like the client to provide the terminal-type, if available (RFC-[[rfc>930]]) | |
| | TERM_SPEED | DO | Server would like the client to provide the terminal-speed, if available (RFC-[[rfc>1079]]) | |
| | SEND_LOCATION | DO | Server would like the client to provide the user's location, if available (RFC-[[rfc>779]]) | |
| | NEGOTIATE_WINDOW_SIZE | DO | Server would like the client to provide the terminal dimensions (cols x rows), if available (RFC-[[rfc>1073]]) | |
| | NEW_ENVIRON | DO | Server would like the client to provide environment variables (RFC-[[rfc>1572]]) - unused | |
| |
| The BINARY_TX option (disabling special treatment of CR/LF and CR/NUL) is dynamically negotiated as needed, for file transfers. |
| |
| === Debugging === |
| |
| The Terminal server logs all Telnet option negotiations using a //Debugging// log-level: |
| |
| <file> |
| 6/20 05:56:41p Node 1 sending telnet cmd: WILL Echo |
| 6/20 05:56:41p Node 1 sending telnet cmd: WILL Suppress Go Ahead |
| 6/20 05:56:41p Node 1 sending telnet cmd: DO Terminal Type |
| 6/20 05:56:41p Node 1 sending telnet cmd: DO Terminal Speed |
| 6/20 05:56:41p Node 1 sending telnet cmd: DO Send Location |
| 6/20 05:56:41p Node 1 sending telnet cmd: DO Negotiate About Window Size |
| 6/20 05:56:41p Node 1 sending telnet cmd: DO New Environment Option |
| 6/20 05:56:41p Node 1 received telnet cmd: DO Echo |
| 6/20 05:56:41p Node 1 received telnet cmd: DO Suppress Go Ahead |
| 6/20 05:56:41p Node 1 received telnet cmd: WILL Terminal Type |
| 6/20 05:56:41p Node 1 requesting telnet terminal type |
| 6/20 05:56:41p Node 1 received telnet cmd: WON'T Terminal Speed |
| 6/20 05:56:41p Node 1 sending telnet cmd: DON'T Terminal Speed |
| 6/20 05:56:41p Node 1 received telnet cmd: WON'T Send Location |
| 6/20 05:56:41p Node 1 sending telnet cmd: DON'T Send Location |
| 6/20 05:56:41p Node 1 received telnet cmd: WILL Negotiate About Window Size |
| 6/20 05:56:41p Node 1 received telnet sub-negotiation command: Negotiate About Window Size |
| 6/20 05:56:41p Node 1 received telnet window size: 80x24 |
| 6/20 05:56:41p Node 1 received telnet cmd: WON'T New Environment Option |
| 6/20 05:56:41p Node 1 received telnet sub-negotiation command: Terminal Type |
| 6/20 05:56:41p Node 1 received telnet terminal type: ANSI |
| </file> |
| |
| |
===== SSH ===== | ===== SSH ===== |
SSHv2 support provided by [[dev:dependencies#cryptlib]]. | SSHv2 support provided by [[dev:dependencies#cryptlib]]. |
| |
| ==== Configure ==== |
| |
| SSH support in the Synchronet Terminal Server can be configured via [[util:SCFG]]:Servers->Terminal Server->SSH Support: |
| <file> |
| ╔════════════════════════════════════════════╗ |
| ║ SSH Support ║ |
| ╠════════════════════════════════════════════╣ |
| ║ │Enabled Yes ║ |
| ║ │Interfaces 0.0.0.0, :: ║ |
| ║ │Port 22 ║ |
| ║ │Connect Timeout 10 seconds ║ |
| ║ │Error Level Warning ║ |
| ║ │File Transfer (SFTP) Support No ║ |
| ║ │Max SFTP Inactivity N/A ║ |
| ╚════════════════════════════════════════════╝ |
| </file> |
| |
| ==== cryptlib.key ==== |
| |
| The SSH private key is stored in the file ''[[dir:ctrl]]/cryptlib.key'' and is encrypted with the configured System Password (from [[util:SCFG]]->System). If the System Password is changed **after** the ''cryptlib.key'' file has been generated (and encrypted), you will need to delete the key file and recycle the terminal server for the key file to be regenerated and re-encrypted with the new System Password. |
| |
| The following Terminal Server log message indicates a problem decrypting the ''cryptlib.key'' file: |
| 'Couldn't import the session key used to protect the private key' (-22) getting private key |
===== RLogin ===== | ===== RLogin ===== |
[[ftp://ftp.rfc-editor.org/in-notes/rfc1282.txt|RLogin]] clients are supported, by default, on the standard RLogin TCP port: 513. | BSD Rlogin (RFC-[[rfc>1282]]) clients are supported, by default, on the standard RLogin TCP port: 513. |
| |
| ==== Configure ==== |
| RLogin support in the Synchronet Terminal Server can be configured via [[util:SCFG]]:Servers->Terminal Server->RLogin Support: |
| |
| <file> |
| ╔══════════════════════════════════╗ |
| ║ RLogin Support ║ |
| ╠══════════════════════════════════╣ |
| ║ │Enabled Yes ║ |
| ║ │Interfaces 0.0.0.0, :: ║ |
| ║ │Port 513 ║ |
| ╚══════════════════════════════════╝ |
| </file> |
| |
| ==== History ==== |
| |
==== History of Synchronet's support for BSD RLogin ==== | Synchronet's RLogin support has gone through some significant changes since its introduction in 2000. |
| |
=== SBBS v3.00c 2000 === | === SBBS v3.00c 2000 === |
| |
* [[person:digital man]] removed and deprecated the ''USE_2ND_RLOGIN'' option (and related [[monitor:sbbscon|sbbs]] command-line option and [[monitor:sbbsctrl]] checkbox) as this is now the **only** behavior supported by the Synchronet [[server:Terminal]] Server: the first string received from the RLogin client (''client-user-name'') **may** be a password, the second string received (''server-user-name'') **must** be a valid user ID (alias). | * [[person:digital man]] removed and deprecated the ''USE_2ND_RLOGIN'' option (and related [[monitor:sbbscon|sbbs]] command-line option and [[monitor:sbbsctrl]] checkbox) as this is now the **only** behavior supported by the Synchronet [[server:Terminal]] Server: the first string received from the RLogin client (''client-user-name'') **may** be a password, the second string received (''server-user-name'') **must** be a valid user ID (alias). |
* [[person:digital man]] changed the ''bbs.rlogin_gate'' function to accept 3 optional arguments: ''client-user-name'', ''server-user-name'', and ''terminal'', in the order specified by the RFC 1282. | * [[person:digital man]] changed the ''bbs.rlogin_gate'' function to accept 3 optional arguments: ''client-user-name'', ''server-user-name'', and ''terminal'', in the order specified by the RFC-[[rfc>1282]]. |
| |
===== JavaScript ===== | ===== JavaScript ===== |
* [[http://synchro.net/docs/jsobjs.html#console|console object]] | * [[http://synchro.net/docs/jsobjs.html#console|console object]] |
| |
===== Source Code ===== | |
| |
The Synchronet Terminal Server source code makes up the majority of the C (and all of the C++) files found in ''[[dev:cvs]][[http://cvs.synchro.net/cgi-bin/viewcvs.cgi/src/sbbs3/|/src/sbbs3]]'' with the main module being ''[[http://cvs.synchro.net/cgi-bin/viewcvs.cgi/*checkout*/src/sbbs3/main.cpp|main.cpp]]''. | |
| |
====== See Also ====== | ====== See Also ====== |