Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
server:terminal [2019/06/08 15:17] – Document the terminal server key bindings digital man | server:terminal [2019/06/20 18:49] – Updated RLogin section, cosmetics. digital man |
---|
==== 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 ^ Ctrl-Key ^ ANSI((ANSI X3.64/ECMA-048 escape sequence)) ^ Other((e.g. VT-220 or XTerm escape sequence)) ^ Description (typical use) ^ |
| |
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//). |
| |
| ==== Options ==== |
| |
| Telnet options are negotiated between the client and server, normally without any indication to the user. |
| |
| 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]]. |
| |
| ==== 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. |
| |
| ==== 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 ===== |