命令行手册

Man » screen 在线手册 - screen 手册页的详细在线文档

🌍
screen - 带 VT100/ANSI 终端模拟的屏幕管理器

概要

screen [ -选项 ] [ 命令 [ 参数 ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]

描述

Screen 是一个全屏窗口管理器,它在一个物理终端之间复用多个进程(通常是交互式 shell)。每个虚拟终端都提供 DEC VT100 终端的功能,此外还提供来自 ISO 6429(ECMA 48、ANSI X3.64)和 ISO 2022 标准的一些控制功能(例如,插入/删除行以及对多个字符集的支持)。每个虚拟终端都有一个滚动历史记录缓冲区和一个剪贴板机制,允许在窗口之间移动文本区域。

当调用 screen 时,它会创建一个包含 shell(或指定的命令)的单个窗口,然后让程序运行,您可以像平常一样使用它。之后,您可以随时创建包含其他程序(包括更多 shell)的新(全屏)窗口,杀死现有窗口,查看窗口列表,启用或禁用输出日志记录,在窗口之间复制和粘贴文本,查看滚动历史记录,以您想要的方式在窗口之间切换等。所有窗口中的程序都完全独立地运行。程序在窗口当前不可见时以及整个 screen 会话与用户终端分离时继续运行。默认情况下,当程序终止时,screen 会杀死包含它的窗口。如果该窗口位于前台,则显示会切换到上一个窗口;如果没有剩余窗口,则 screen 将退出。Shell 通常区分作为登录 shell 还是子 shell 运行。Screen 会将其作为子 shell 运行,除非另有说明(请参阅 shell .screenrc 命令)。

您输入的所有内容都会发送到当前窗口中运行的程序。唯一的例外是用于启动窗口管理器命令的单个按键。默认情况下,每个命令以 control-a(从现在开始缩写为 C-a)开始,后跟另一个按键。命令字符和所有按键绑定都可以完全自定义,但始终为两个字符的长度。

Screen 不会将 C- 解释为“control”,尽管本手册为了便于阅读而使用了这种表示法。请使用插入符号表示法(例如,^A 而不是 C-a)作为 escape 命令或 -e 选项的参数。Screen 还会以插入符号表示法打印控制字符。


创建新窗口的标准方法是输入 C-a c。这会创建一个运行 shell 的新窗口,并立即切换到该窗口,无论当前窗口中运行的进程处于何种状态。 同样,您可以通过首先将命令绑定到按键(在您的 .screenrc 文件或 C-a : 命令提示符处)然后像使用 C-a c 命令一样使用它来创建包含自定义命令的新窗口。 此外,还可以通过从先前创建的窗口内的 shell 提示符中运行如下命令来创建新窗口:

screen emacs prog.c

这将不会运行另一个 screen 副本,而是会将命令名称及其参数传递给窗口管理器(在 $STY 环境变量中指定),窗口管理器将使用它来创建新窗口。 上述示例将启动 emacs 编辑器(编辑 prog.c),并切换到其窗口。 请注意,您无法将环境变量从调用 shell 传输到应用程序(在本例中为 emacs),因为它是从父 screen 进程派生的,而不是从调用 shell 派生的。

如果 /run/utmp 可被 screen 写入,则会为每个窗口在此文件中写入相应的记录,并在窗口终止时删除该记录。 这对于使用 talk、script、shutdown、rsend、sccs 和其他类似程序(这些程序使用 utmp 文件来确定您的身份)非常有用。 只要 screen 在您的终端上处于活动状态,终端自身的记录就会从 utmp 文件中删除。 另请参阅 C-a L。

快速入门

在使用 screen 之前,您需要确保已正确选择您的终端类型,就像您为任何其他 termcap/terminfo 程序所做的那样。(您可以使用 test 命令来执行此操作。)

如果您很着急并且想在不进行大量阅读的情况下开始使用,您应该记住以下命令:C-a ?。 输入这两个字符将显示可用 screen 命令及其绑定。 每个按键将在“默认按键绑定”部分中讨论。 “自定义”部分讨论了您的 .screenrc 文件。

如果您的终端是真正的自动边距终端(它不允许更新屏幕上的最后一个位置而不滚动屏幕),请考虑使用已禁用自动边距的终端的 termcap 版本。 这将确保在所有情况下都能准确且最佳地更新屏幕。 现在大多数终端都具有“魔术边距”(自动边距加上可用的最后一列)。 这是 VT100 样式类型,非常适合 screen。 如果您只有真正的自动边距终端,screen 也可以使用它,但将字符更新到屏幕上的最后一个位置可能需要等到屏幕滚动或将该字符移动到某个安全位置才能实现。 通过使用具有插入字符功能的终端,可以缩短此延迟。


命令行选项

Screen 具有以下命令行选项:

-a   在每个窗口的 termcap 中包含所有功能(有一些小的例外),即使 screen 必须重新绘制显示的一部分才能实现某个功能。

-A   将所有窗口的大小调整为当前终端的大小。默认情况下,screen 在附加到可调整大小的终端(其描述中包含 WS,例如 suncmd 或某些 xterm)时,会尝试恢复其旧的窗口大小。

-c file
覆盖从 $HOME/.screenrc 读取的默认配置文件,改为使用 file。

-d|-D [pid.tty.host]
不启动 screen,而是分离在其他地方运行的 screen 会话。它与从 screen 的控制终端键入 C-a d 具有相同的效果。-D 等效于强制分离键。如果无法分离任何会话,则忽略此选项。与 -r/-R 选项结合使用,可以实现更强大的效果:

-d -r   重新连接会话,如果需要,先将其分离。

-d -R   重新连接会话,如果需要,先分离或甚至创建会话。

-d -RR  重新连接会话,如果需要,先分离或创建会话。如果有多个会话可用,则使用第一个会话。

-D -r   重新连接会话。如果需要,先远程分离并注销。

-D -R   立即连接。具体来说,这意味着:如果会话正在运行,则重新连接。如果需要,先远程分离并注销。如果未运行,则创建会话并通知用户。这是作者最喜欢的选项。

-D -RR  立即连接。无论这意味着什么,都执行它。

注意:始终最好通过 `screen -list` 命令检查会话的状态。

-e xy
指定命令字符为 x,指定生成文字命令字符的字符为 y(在键入命令字符后)。默认值为 C-a 和 `a',可以指定为 -e^Aa。在创建 screen 会话时,此选项设置默认命令字符。添加到多用户会话中的所有用户最初都将使用此命令字符。但是,在附加到已经运行的会话时,此选项仅更改附加用户的命令字符。此选项等效于 defescape 或 escape 命令。

-f, -fn, 和 -fa
启用、禁用或设置为自动切换模式。这也可以通过 defflow .screenrc 命令定义。

-h num
指定历史记录滚动缓冲区的高度为 num 行。

-i
当启用流控制时,这将导致中断键(通常是 C-c)立即中断显示。有关详细信息,请参阅 defflow .screenrc 命令。不建议使用此选项。

-l 和 -ln
启用或禁用登录模式(用于 /run/utmp 更新)。这也可以通过 deflogin .screenrc 命令定义。

-ls [匹配]
-list [匹配]
不启动 screen,而是打印一个 pid.tty.host 字符串和创建时间戳的列表,用于标识你的 screen 会话。标记为“detached”(分离)的会话可以使用 `screen -r` 恢复。标记为“attached”(已连接)的会话正在运行,并且有一个控制终端。如果会话在多用户模式下运行,则标记为“multi”。标记为“unreachable”(不可访问)的会话要么位于不同的主机上,要么是“dead”(已死亡)。当不可访问会话的名称与本地主机名称或指定的参数匹配时,该会话将被视为已死亡。请参阅 `-r` 标志,了解如何构造匹配项。标记为“dead”的会话应 Thoroughly 检查并删除。如果你不确定,请咨询你的系统管理员。使用 `-wipe` 选项删除会话。

-L   告诉 screen 为窗口启用自动输出日志记录。

-Logfile 文件
默认日志文件名是 screenlog.0。可以使用 `-Logfile` 选项设置新的日志文件名。

-m   导致 screen 忽略 `$STY` 环境变量。使用 `screen -m` 时,无论 screen 是否从另一个 screen 会话中调用,都会强制创建一个新会话。此标志与 `-d` 选项结合使用时具有特殊含义:

-d -m   以分离模式启动 screen。这将创建一个新会话,但不会连接到它。这对于系统启动脚本很有用。

-D -m   这也会以分离模式启动 screen,但不会分叉新的进程。如果会话终止,则命令将退出。

-O   选择一个针对你的终端的最佳输出模式,而不是真正的 VT100 模拟(仅影响没有 `LP` 的自动边距终端)。这也可以通过在 `.screenrc` 中指定 `OP` 命令来设置。

-p 数字或名称 | - | = | +
预先选择一个窗口。当你想重新连接到特定窗口,或者你想通过 `-X` 选项将命令发送到特定窗口时,这很有用。与 screen 的 `select` 命令一样,`-` 选择空白窗口。作为重新连接的特殊情况,`=` 在空白窗口中显示窗口列表,而 `+` 将创建一个新窗口。如果未找到指定的窗口,则命令将不会执行。

-q   抑制打印错误消息。与 `-ls` 结合使用时,退出值为:9 表示没有会话的目录。10 表示一个包含正在运行但无法连接的会话的目录。11(或更多)表示 1 个(或更多)可用的会话。与 `-r` 结合使用时,退出值为:10 表示没有要恢复的会话。12(或更多)表示有 2 个(或更多)要恢复的会话,你应该指定要选择哪个会话。在所有其他情况下,`-q` 没有效果。

-Q   现在可以使用此标志从远程会话查询某些命令,例如 `screen -Q windows`。命令会将响应发送到查询进程的 stdout。如果命令中发生错误,则查询进程将以非零状态退出。

以下是可以查询的命令: echo info lastmsg number select time title windows

-r [pid.tty.host]
-r sessionowner/[pid.tty.host]
恢复一个分离的 screen 会话。不能指定其他选项(除了与 -d/-D 组合使用)。但是,可能需要一个可选的 [pid.]tty.host 前缀来区分多个分离的 screen 会话。第二种形式用于连接到另一个用户的 screen 会话,该会话在多用户模式下运行。这表示 screen 应在另一个用户的目录中查找会话。这需要以 root 用户身份运行。

-R   仅在要连接的会话不明确时才恢复 screen,通常是在只有一个 screen 会话分离时。否则,它会列出可用的会话。-RR 尝试恢复最新的分离的 screen 会话(按创建时间)。如果成功,将忽略所有其他命令行选项。如果没有分离的会话,则启动一个新的会话,就像没有指定 -R 一样。该选项默认设置,如果 screen 作为登录 shell 运行(实际上,screen 在这种情况下使用 -xRR)。有关与 -d/-D 选项的组合,请参见该选项。请注意:基于时间的会话选择是 Debian 的附加功能。

-s program
将默认 shell 设置为指定的程序,而不是环境变量 $SHELL 中的值(如果未定义,则为 /bin/sh)。这也可以通过 shell .screenrc 命令来定义。另请参见。

-S sessionname
在创建新会话时,可以使用此选项为会话指定一个有意义的名称。该名称标识 screen -list 和 screen -r 操作中的会话。它取代了默认的 [tty.host] 后缀。此名称不应超过 80 个字符。

-t name
为默认 shell 或指定的程序设置标题(也称为)。另请参见 shelltitle .screenrc 命令。

-T term
使用指定的终端设置 $TERM 环境变量,而不是 screen 的默认设置。

-U   以 UTF-8 模式运行 screen。此选项告诉 screen 您的终端发送和理解 UTF-8 编码的字符。它还将新窗口的默认编码设置为“utf8”。

-v   打印版本号。

-wipe [match]
执行与 screen -ls 相同,但删除已销毁的会话,而不是将其标记为“已停止”。当会话的名称与本地主机名称或显式给定的参数匹配时,该会话将被视为无法访问且已停止。有关如何构造匹配项的描述,请参阅 -r 标志。

-x   连接到未分离的 screen 会话(多显示模式)。screen 拒绝从其自身内部连接。但是,当级联多个 screen 时,不会检测循环;请注意。

-X   将指定的命令发送到正在运行的 screen 会话。您可以使用 -S 选项来指定 screen 会话,如果运行了多个 screen 会话。您可以使用 -d 或 -r 选项来告诉 screen 仅查找已连接或分离的 screen 会话。请注意,如果会话受到密码保护,此命令将不起作用。

-4   仅将主机名解析为 IPv4 地址。

-6   仅将主机名解析为 IPv6 地址。

默认按键绑定

如前所述,每个 screen 命令都由 C-a 后跟另一个字符组成。为了方便起见,所有绑定到小写字母的命令也绑定到其控制字符对应项(C-a a 除外;参见下文),因此,C-a c 和 C-a C-c 都可以用于创建窗口。请参阅“自定义”部分,了解有关命令的说明。

下表显示了默认按键绑定。带有多个按键条目的框中的尾随逗号是分隔符,而不是绑定的组成部分。

C-a '              (select)          提示输入窗口名称

或编号以进行切换。

C-a "              (windowlist -b)   显示所有窗口的列表以供选择。

C-a digit          (select 0-9)      切换到窗口编号 0
- 9

C-a -              (select -)        切换到窗口编号 0
- 9,或切换到空白窗口。

C-a tab            (focus)           将输入焦点切换到

下一个区域。另请参见 split、remove、only。

C-a C-a            (other)           切换到先前显示的窗口。请注意,此绑定默认为

命令字符键入两次,除非被覆盖。例如, 如果您使用选项 -e]x, 此命令将变为 ]]。

C-a a              (meta)            将命令字符

(C-a)发送到窗口。请参见 escape 命令。

C-a A              (title)           允许用户输入

当前窗口的名称。

C-a b,             (break)           向窗口发送中断。
C-a C-b

C-a B              (pow_break)       重新打开终端行

并发送中断。

C-a c,             (screen)          创建一个新窗口,其中包含一个
C-a C-c                              shell,并切换到该窗口。

C-a C              (clear)           清除屏幕。

C-a d,             (detach)          将 screen 从此
C-a C-d                              终端分离。

C-a D D            (pow_detach)      分离并注销。

C-a f,             (flow)            切换 flow 模式,开启、关闭或
C-a C-f                              自动。

C-a F              (fit)             将窗口的大小调整为

当前区域的大小。

C-a C-g            (vbell)           切换 screen 的视觉

铃声模式。

C-a h              (hardcopy)        将当前窗口的硬拷贝写入到文件

hardcopy.n。

C-a H              (log)             开始/结束将当前窗口的日志记录到文件

screenlog.n。


C-a i,             (info)            显示关于当前窗口的信息。
C-a C-i

C-a k,             (kill)            销毁当前窗口。
C-a C-k

C-a l,             (redisplay)       完全刷新当前窗口。
C-a C-l

C-a L              (login)           切换此窗口的登录槽。 仅当屏幕配置为更新 utmp 数据库时才可用。

C-a m,             (lastmsg)         重复消息行中显示的最后消息。
C-a C-m

C-a M              (monitor)         切换当前窗口的监视状态。

C-a space,         (next)            切换到下一个窗口。
C-a n,
C-a C-n

C-a N              (number)          显示当前窗口的编号(和标题)。

C-a backspace,     (prev)            切换到上一个窗口(与 C-a n 相反)。
C-a C-h,
C-a p,
C-a C-p

C-a q,             (xon)             向当前窗口发送控制-q 信号。
C-a C-q

C-a Q              (only)            删除所有区域,但保留当前区域。 请参阅 split、remove、focus。

C-a r,             (wrap)            切换当前窗口的行尾换行设置(打开或关闭当前窗口的自动边距)。
C-a C-r

C-a s,             (xoff)            向当前窗口发送控制-s 信号。
C-a C-s

C-a S              (split)           水平拆分当前区域,创建两个新的区域。 请参阅 only、remove、focus。

C-a t,             (time)            显示系统信息。
C-a C-t

C-a v              (version)         显示版本和编译日期。

C-a C-v            (digraph)         输入 digraph。
C-a w,             (windows)         显示窗口列表。
C-a C-w

C-a W              (width)           切换 80/132 列。

C-a x 或 C-a C-x   (lockscreen)      锁定此终端。

C-a X              (remove)          删除当前区域。 请参阅 split、only、focus。

C-a z,             (suspend)         暂停 screen。 您的系统必须支持 BSD 样式的作业控制。
C-a C-z

C-a Z              (reset)           将虚拟终端重置为其通电时的值。

C-a .              (dumptermcap)     输出 .termcap 文件。

C-a ?              (help)            显示按键绑定。

C-a \              (quit)            删除所有窗口并终止 screen。

C-a :              (colon)           进入命令提示符模式。

C-a [,             (copy)            进入复制/滚动历史模式。
C-a C-[,
C-a esc

C-a C-],           (paste .)         将粘贴缓冲区的内容写入当前窗口的 stdin 队列。
C-a ]

C-a {,             (history)         复制并粘贴上一条(命令)行。
C-a }

C-a >              (writebuf)        将粘贴缓冲区的内容写入文件。

C-a <              (readbuf)         将屏幕交换文件读取到粘贴缓冲区。

C-a =              (removebuf)       移除 C-a < 和 C-a \> 使用的文件。

C-a ,              (license)         显示 screen 的来源、去处以及您可以使用的原因。

C-a _              (silence)         开始/停止监视当前窗口是否有活动。

C-a |              (split -v)        将当前区域垂直分割成两个新的区域。

C-a *              (displays)        显示所有当前连接的显示器的列表。

自定义

socket 目录默认设置为 $HOME/.screen 或 /tmp/screens,或者最好是 /run/screen,这些是在编译时选择的。如果 screen 以 setuid-root 身份安装,则管理员应使用适当的(非 NFS 挂载)socket 目录编译 screen。如果 screen 没有以 setuid-root 身份运行,则用户可以在环境变量 $SCREENDIR 中指定任何 mode 700 目录。

当调用 screen 时,它会从 /etc/screenrc 文件和默认文件中执行初始化命令,这些默认值可以通过以下方式覆盖:对于全局 screenrc 文件,screen 会搜索环境变量 $SYSSCREENRC(此覆盖功能可以在编译时禁用)。用户特定的 screenrc 文件会在 $SCREENRC、然后是 $HOME/.screenrc 中搜索。命令行选项 -c 优先于上述用户 screenrc 文件。

这些文件中的命令用于设置选项、将函数绑定到按键,以及在 screen 会话开始时自动建立一个或多个窗口。命令每行列出一个,空行将被忽略。命令的参数用制表符或空格分隔,并且可以用单引号或双引号括起来。#' 将该行其余部分变成注释,除非在引号内。无法理解的行会被警告并忽略。命令可以包含对环境变量的引用。语法类似于 shell 中的 "$VAR " 或 "${VAR}"。请注意,这与以前的 screen 版本不兼容,因为现在$' 字符必须使用 \ 保护,如果不需要进行变量替换。单引号中的字符串也受到变量替换的保护。

您的 screen 发行版中附带了两个示例配置文件:etc/screenrc 和 etc/etcscreenrc。它们包含各种命令的有用示例。

也可以“在线”进行自定义。要进入命令模式,请键入 C-a :。请注意,以 def 开头的命令会更改默认值,而其他命令会更改当前设置。

以下命令可用:

acladd usernames [crypted-pw]

addacl usernames

允许用户完全访问此 screen 会话。用户名可以是单个用户或逗号分隔的用户列表。此命令启用用户连接到 screen 会话,并执行等效的 aclchg usernames +rwx "#?"。如果要添加具有受限访问权限的用户,请使用下面的 aclchg 命令。如果提供了可选的第二个参数,则应该是指定用户的加密密码。Addaclacladd 的同义词。仅多用户模式。


aclchg 用户名 权限位 列表

chacl 用户名 权限位 列表

更改逗号分隔的用户列表的权限。权限位表示为 `r`、`w` 和 `x`。在权限位前加 `+` 表示授予权限,`-` 表示撤销权限。第三个参数是逗号分隔的命令和/或窗口列表(按编号或标题指定)。特殊列表 `#` 表示所有窗口,`?` 表示所有命令。如果用户名列表仅包含一个 `*`,则会影响所有已知用户。

当用户具有该命令的 `x` 权限时,可以执行该命令。如果用户拥有其 `w` 权限,并且没有其他用户获得该窗口的写锁,则用户可以向窗口输入内容。其他权限位当前未被使用。要从窗口 2 中撤销其他用户的写锁:`aclchg 用户名 -w+w 2`。要允许只读访问会话:`aclchg 用户名 -w “#”`。一旦用户的名称被 screen 识别,他就可以附加到会话,并且(默认情况下)对所有命令和窗口都具有完全权限。acl 命令、`at` 命令和其他命令的执行权限也应被删除,否则该用户可能会重新获得写权限。特殊用户名 `nobody` 的权限无法更改(请参见 `su` 命令)。`chacl` 是 `aclchg` 的同义词。仅适用于多用户模式。

acldel 用户名

从 screen 的访问控制列表中删除用户。如果当前已附加,则该用户的所有显示器都将从会话中分离。他将无法再次附加。仅适用于多用户模式。

aclgrp 用户名 [组名]

创建共享通用访问权限的用户组。组的名称是组长的用户名。组的每个成员都继承授予组长的权限。这意味着,如果用户的访问检查失败,将进行另一次检查,以检查组长。使用特殊值 `none` 可以将用户从所有组中删除。如果省略第二个参数,则会列出用户所属的所有组。

aclumask [[ 用户 ] +权限位 | [ 用户 ] -权限位... ]

umask [[ 用户 ] +权限位 | [ 用户 ] -权限位... ]

这指定了其他用户对调用命令者创建的窗口的访问权限。用户可以是单个用户,也可以是逗号分隔的已知用户名列表。如果未指定用户,则假定为当前所有已知用户的列表。权限位是 `aclchg` 命令中允许的任何访问控制位的组合。特殊用户名 `?` 预定义了尚未知晓的用户最初对任何窗口授予的访问权限。特殊用户名 `??` 预定义了尚未知晓的用户最初对任何命令授予的访问权限。特殊用户名 `nobody` 的权限无法更改(请参见 `su` 命令)。`umask` 是 `aclumask` 的同义词。

activity message

当任何活动在被监控的后台窗口中发生时,屏幕会显示一条消息通知。通知消息可以通过 activity 命令重新定义。消息中每个 %' 都会被替换为发生活动的窗口的编号,而每个^G` 都会被替换为 termcap 中定义的响铃字符(通常是声音)。默认消息是:

'窗口 %n 中有活动'

请注意,默认情况下所有窗口的监控都已关闭,但可以通过使用 monitor 命令 (C-a M) 进行更改。

allpartial [ on | off ]

如果设置为 on,则在窗口更改时仅刷新当前光标行。这会影响所有窗口,对于终端连接速度较慢的情况很有用。每个窗口先前设置的完整/部分刷新设置会在 allpartial 设置为 off 时恢复。这是一个全局标志,它会立即对所有窗口生效,并覆盖部分刷新的设置。它不会更改新创建窗口的默认重绘行为。

altscreen [ on | off ]

如果设置为 on,则会在虚拟终端中启用“备用屏幕”支持,就像在 xterm 中一样。初始设置为 off

at [identifier][#|*|%] command [args ... ]

在其他显示器或窗口中执行命令,就像该命令是在那里输入的。at 命令会更改命令的上下文(“当前窗口”或“当前显示器”设置)。如果第一个参数描述了一个非唯一的上下文,则该命令将多次执行。如果第一个参数的形式为 identifier*,则 identifier 将与用户名进行匹配。该命令将为选定的每个用户执行一次。如果第一个参数的形式为 identifier%,则 identifier 将与显示器进行匹配。显示器以它们所连接的 tty 的名称命名。可以省略标识符中的 /dev//dev/tty 前缀。如果 identifier 后跟 # 或没有后缀,则它将与窗口编号和标题进行匹配。省略前缀中的 identifier,然后使用 #*% 字符,将选择所有用户、显示器或窗口,因为将执行前缀匹配。请注意,在受影响的显示器上,将显示一条简短消息,描述发生了什么。权限检查针对 at 命令的发起者,而不是受影响显示器的所有者。请注意,# 字符在前面有空格时充当注释引入符。可以通过在前面加上 \ 来转义它。权限检查针对 at 命令的发起者,而不是受影响显示器的所有者。

注意:在与窗口匹配时,该命令至少会为每个窗口执行一次。可能会再次调用更改窗口内部排列(如 other)的命令。在共享窗口中,该命令将为每个附加的显示器重复执行。请注意,在发出 toggle 命令(如 login!)时。某些命令(例如 process)要求将显示器与目标窗口关联。这些命令在循环遍历窗口时可能无法正常工作。

attrcolor 属性 颜色修饰符 [属性/颜色修饰符]

此命令可用于通过更改文本颜色来突出显示属性。如果正在使用属性“属性”,则也应用指定的属性/颜色修饰符。如果未提供修饰符,则将删除当前修饰符。有关修饰符的语法,请参阅“字符串转义”章节。Screen 了解两个伪属性,i 表示高强度前景色,I 表示高强度背景色。

示例:

attrcolor b "R"

如果将打印粗体文本,则将颜色更改为亮红色。

attrcolor u "-u b"

使用蓝色文本代替下划线。

attrcolor b ".I"

为粗体文本使用亮色。大多数终端仿真器已经这样做了。

attrcolor i "+b"

使亮色文本也变为粗体。

autodetach [on | off]

设置 screen 是否会在挂起时自动分离,这将保存所有正在运行的程序,直到使用 screen -r 命令恢复它们。如果关闭,挂起信号将终止 screen 及其包含的所有进程。默认情况下,autodetach 处于打开状态。

autonuke [on | off]

设置是否应清除屏幕序列,从而清除未写入终端的所有输出。另请参阅 obuflimit。

backtick id 生存周期 自动刷新 命令 参数...

backtick id

使用数字 ID“id”对 backtick 命令进行编程。此类命令的输出用于替换“%`”字符串转义。指定的生存周期是输出被视为有效的时间(以秒为单位)。在此时间之后,如果遇到相应的字符串转义,则会再次运行该命令。参数“自动刷新”会在指定的秒数后触发“标题”和“硬状态”字符串的自动刷新。仅使用输出的最后一行进行替换。

如果“生存周期”和“自动刷新”参数都为零,则预计 backtick 程序将保持在后台并偶尔生成输出。在这种情况下,会立即执行该命令,并且 screen 会存储输出的最后一行。如果打印了新的一行,screen 将自动刷新硬状态或标题。

该命令的第二种形式会删除具有数字 ID“id”的 backtick 命令。

bce [on | off]

更改“背景颜色擦除”设置。如果将 bce 设置为 on,则擦除/插入/滚动/清除操作清除的所有字符都将以当前背景颜色显示。否则,将使用默认背景颜色。

bell_msg [消息]

当将铃声字符发送到后台窗口时,screen 会在消息行中显示通知。可以通过此命令重新定义通知消息。消息中的每个“%”都将替换为发送了铃声的窗口的编号,并且消息中的每个“^G”都将替换为终端定义中的铃声定义(通常是可听的铃声)。默认消息为:


“窗口中的铃声 %n”

可以提供一个空消息给 bell_msg 命令以抑制消息行的输出(bell_msg "")。如果不提供参数,则显示当前消息。

`bind [class] key [command [args]]`

将一个命令绑定到一个键。默认情况下,screen 提供的许多命令都绑定到一个或多个键,如“默认键绑定”部分所述,例如,用于创建新窗口的命令绑定到 C-c 和 c。bind 命令可用于重新定义键绑定并定义新的绑定。key 参数可以是单个字符、^x 形式的两个字符序列(表示 C-x)、一个反斜杠后跟八进制数字(指定字符的 ASCII 代码),或者一个反斜杠后跟第二个字符,如 \\\。参数也可以用引号括起来,如果需要的话。如果没有给出进一步的参数,则删除该键的任何先前建立的绑定。command 参数可以是本节中列出的任何命令。

如果通过 -c 选项指定了命令类,则将该键绑定到指定的类。使用 command 命令来激活一个类。可以使用命令类来创建多个命令键或多字符绑定。

一些例子:

`bind ' ' windows`
`bind ^k`
`bind k`
`bind K kill`
`bind ^f screen telnet foobar`
`bind \033 screen -ln -t root -h 1000 9 su`

将空格键绑定到显示窗口列表的命令(因此通常通过 C-a C-w 调用的命令也可以作为 C-a 空格来使用)。接下来的三行将删除 C-a C-k 和 C-a k 的默认 kill 绑定。然后,C-a K 被绑定到 kill 命令。然后它将 C-f 绑定到创建与 foobar 建立 TELNET 连接的窗口的命令,并将 escape 绑定到创建非登录窗口(又名 root)到槽 9 的命令,具有 1000 行的滚动缓冲区和一个超级用户 shell。

`bind -c demo1 0 select 10`
`bind -c demo1 1 select 11`
`bind -c demo1 2 select 12`
`bindkey "^B" command -c demo1`

使 C-b 0 选择窗口 10,C-b 1 选择窗口 11,依此类推。

`bind -c demo2 0 select 10`
`bind -c demo2 1 select 11`
`bind -c demo2 2 select 12`
`bind - command -c demo2`

使 C-a - 0 选择窗口 10,C-a - 1 选择窗口 11,依此类推。

`bindkey [-d] [-m] [-a] [[-k|-t] string [cmd-args]]`

此命令管理 screen 的输入转换表。一个表中的每个条目都告诉 screen 如何响应遇到特定字符序列时。有三个表:一个包含用户编程的操作,一个包含用于终端模拟的默认操作,还有一个用于 screen 的复制模式以执行光标移动。请参阅“输入转换”部分,了解默认键绑定的列表。

如果给定了 -d 选项,bindkey 命令会修改默认表,-m 选项会修改复制模式表,如果没有给定任何选项,则会选择用户表。参数字符串是要绑定操作的字符序列。这可以是固定的字符串,也可以是 termcap 键盘功能名称(可以使用 -k 选项选择)。

某些 VT100 终端上的按键在启用应用程序模式时会发送不同的字符串(例如光标键)。这些按键在翻译表中具有两个条目。您可以通过指定 -a 选项来选择应用程序模式条目。

-t 选项告诉 screen 不要进行字符间的时间间隔控制。如果使用了 termcap 功能,则无法禁用时间间隔控制。

^ md 可以是 screen 的任何命令,并且可以有任意数量的参数。如果省略 cmd,则会从表中删除该键绑定。

以下是一些键盘绑定的示例:

bindkey -d

显示所有默认键绑定。应用程序模式条目标有 [A]。

bindkey -k k1 select 1

使“F1”键切换到窗口 1。

bindkey -t foo stuff barfoo

使“foo”成为单词“barfoo”的缩写。禁用了超时,以便用户可以缓慢地输入。

bindkey "\024" mapdefault

此键绑定使 ^T 成为键绑定的转义字符。如果您执行了上述 stuff barfoo 绑定,您可以输入 ^Tfoo 来输入该单词。如果您想插入一个 ^T,则必须按两次该键(即转义转义绑定)。

bindkey -k F1 command

使 F11 键(不是 F1!)成为 screen 的另一种转义键(除了 ^A)。

break [duration]

向此窗口发送一个持续时间为 duration*0.25 秒的断路信号。对于非 POSIX 系统,时间间隔可能会向上舍入到完整的秒数。如果窗口连接的是字符设备而不是 shell 进程,则此命令最有用(请参阅 WINDOW TYPES 章节)。断路信号的最大持续时间限制为 15 秒。

blanker

激活 screen 屏幕保护程序。首先清除屏幕。如果未定义任何屏幕保护程序,则关闭光标;否则,启动该程序并将输出写入屏幕。屏幕保护程序会在第一次按键时被终止,读取的按键将被丢弃。

此命令通常与 idle 命令一起使用。

blankerprg [program-args]

定义一个屏幕保护程序。如果给定了空参数,则禁用屏幕保护程序。如果不提供任何参数,则显示当前设置的屏幕保护程序。

breaktype [tcsendbreak|TIOCSBRK|TCSBRK]

选择用于终端设备生成断路信号的可用方法之一。此命令应仅影响当前窗口。但它的行为与 defbreaktype 相同。未来将会更改这一点。使用不带参数的 breaktype 命令会显示当前窗口的断路方法。


bufferfile [exchange-file]

更改用于读写粘贴缓冲区的文件名。如果省略 bufferfile 命令的可选参数,则将重新激活默认设置(/tmp/screen-exchange)。以下示例会将系统的密码文件粘贴到屏幕窗口中(使用粘贴缓冲区,其中会保留一份副本):

C-a : bufferfile /etc/passwd
C-a < C-a ]
C-a : bufferfile

bumpleft

与窗口列表中的上一个窗口交换。

bumpright

与窗口列表中的下一个窗口交换。

c1 [on | off]

更改 c1 代码处理。c1 on 告诉 screen 将输入字符(介于 128 到 159 之间)视为控制函数。这种 8 位代码通常与 ESC 加上相应的 7 位代码相同。默认设置是处理 c1 代码,可以使用 defc1 命令进行更改。具有字体中在 c1 位置具有可用字符的用户可能希望将其关闭。

caption [top | bottom] always|splitonly[string]
caption string [string]

此命令控制窗口标题的显示。通常,只有当屏幕上显示多个窗口(分屏模式)时,才会使用标题。但是,如果将类型设置为 always,即使只显示一个窗口,screen 也会显示标题。默认值为 splitonly

第二种形式更改用于标题的文本。您可以使用 STRING ESCAPES 章节中的所有转义符。Screen 默认使用 `%3n %t'。

您可以混合使用这两种形式,并提供一个字符串作为附加参数。

您可以选择在窗口的顶部或底部显示标题。默认值为底部。

charset set

更改当前字符集插槽指定和字符集映射。set 的前四个字符被视为字符集指定符,而第五个和第六个字符必须在 '0' 到 '3' 的范围内,并设置 GL/GR 字符集映射。在每个位置,可以使用“.”来指示相应的字符集/映射不应更改(set 内部通过附加“.”字符进行填充,使其达到六个字符)。新窗口的默认字符集为“BBBB02”,除非已激活 encoding 命令。可以使用 info 命令查看当前设置。

chdir [directory]

将 screen 的当前目录更改为指定的目录,或者(如果不带参数调用),更改为您的主目录(环境变量 $HOME 的值)。所有通过在 .screenrc 中使用 screen 命令或通过 C-a : screen ...C-a c 创建的窗口都将使用此目录作为其默认目录。如果没有 chdir 命令,则将使用启动 screen 的目录。

Hardcopy 和日志文件始终写入窗口的默认目录,而不是运行窗口中进程的当前目录。您可以在 .screenrc 中多次使用此命令,以在不同的默认目录中启动各种窗口,但最后一个 chdir 值将影响您交互式创建的所有窗口。


cjkwidth [ on | off ]

将模糊宽度的字符视为全角/半角。

clear

清除当前窗口并将其图像保存到滚动缓冲区。

collapse

重新排序窗口列表中的窗口,消除窗口编号之间的间隙。

colon [prefix]

允许您输入 .screenrc 命令。对于即时修改按键绑定、特定窗口创建和更改设置非常有用。请注意,set 关键字不再存在!通常,命令会影响当前窗口,而不是影响未来窗口的默认设置。使用以 def... 开头的命令更改默认设置。

如果您将此视为 screen 的“Ex 命令模式”,则可以将 C-a esc(复制模式)视为其“Vi 命令模式”。

command [ -c class"]"

此命令与键入 screen 转义字符 (^A) 具有相同的效果。它可能仅对按键绑定有用。如果提供了 -c 选项,则选择指定的命令类。请参阅 bindbindkey

compacthist [ on | off ]

这告诉 screen 在向上滚动文本到历史记录缓冲区时是否应抑制尾随的空白行。

console [ on | off ]

捕获或取消捕获机器的控制台输出到窗口。请注意:只有 /dev/console 的所有者才能捕获控制台输出。此命令仅在机器支持 ioctl TIOCCONS 时可用。

copy

进入复制/滚动模式。这允许您将当前窗口及其历史记录中的文本复制到粘贴缓冲区中。在此模式下,一个类似 vi 的“全屏编辑器”处于活动状态:

编辑器的移动键是:

h, C-h,        将光标向左移动。
left arrow

j, C-n,        将光标向下移动。
down arrow

k, C-p,        将光标向上移动。
up arrow

l ('el'),      将光标向右移动。
right arrow

0(zero) C-a   移动到最左侧的列。

+ 和 -        将光标向上和向下移动一行。

H、M 和 L     将光标移动到窗口顶部、中心或底部的最左侧列。

|              移动到指定的绝对列。

g 或 home      移动到缓冲区的开头。

G 或 end       移动到指定的绝对行(默认值:缓冲区末尾)。

%              跳转到缓冲区的指定百分比。

^ 或 $         移动到最左侧的列,移动到行上的第一个或最后一个非空白字符。

w、b 和 e    按单词移动光标。

B、E           按单词移动光标(如在 vi 中)。

f/F、t/T       将光标向前/向后移动到目标字符的下一个出现位置。(例如,`3fy` 将光标移动到右侧的第三个 `y` 字符。)

; 和 ,        重复上一个 f/F/t/T 命令,方向相同/相反。

C-e 和 C-y    在保持光标位置的同时,将显示向上/向下滚动一行。

C-u 和 C-d    在保持光标位置的同时,将显示向上/向下滚动指定的行数。(默认值:半屏幕-全屏幕)。

C-b 和 C-f:将显示向上/向下滚动一整屏幕。

注意:Emacs 风格的移动键可以通过 .screenrc 命令进行自定义。(例如:markkeys "h=^B:l=^F:$=^E")没有简单的方法可以实现完整的 Emacs 风格键映射,因为这涉及到多字符代码。

一些键被定义用于执行标记和替换操作。

复制范围是通过设置两个标记来指定的。这两个标记之间的文本将被高亮显示。按:

空格或回车键来设置第一个或第二个标记。如果 mousetrack 设置为 `on`,则也可以使用鼠标左键单击来设置标记。

Y 和 y 用于标记整行或从行首开始标记。

W 标记恰好一个单词。

任何这些命令都可以通过按数字作为重复计数前缀。 .9,将其视为重复计数。

例如:C-a C-[ H 10 j 5 Y 将复制第 11 到 15 行到粘贴缓冲区。

以下是定义的搜索键:

/ Vi 风格的正向搜索。

? Vi 风格的反向搜索。

C-a s Emacs 风格的增量正向搜索。

C-r Emacs 风格的反向增量搜索。

n 查找下一个搜索模式。

N 查找上一个搜索模式。

但是,有一些键的行为与 vi 不同。vi 不允许复制矩形文本块,但 screen 允许。按:c 或 C 来分别设置左侧或右侧边距。如果没有给出重复计数,则两者都默认为当前光标位置。

示例:在包含大量文本的屏幕上尝试:

C-a [ M 20 l SPACE c 10 l 5 j C SPACE。

这将移动到屏幕的中间行,向左移动 20 列,标记粘贴缓冲区的开头,设置左侧列,向下移动 5 行,设置右侧列,然后标记粘贴缓冲区的结尾。现在尝试:

C-a [ M 20 l SPACE 10 l 5 j SPACE

并注意复制的文本量的差异。

J 用于连接行。它在 4 种模式之间切换:用换行符分隔的行 (012)、无缝连接的行、用单个空格分隔的行以及用逗号分隔的行。请注意,可以通过发出 crlf on 命令,在换行符前附加回车符。

v 或 V 适用于所有使用 :set numbers 的 vi 用户 - 它在第 9 列和第 1 列之间切换左边距。按

a 放在最后一个空格键之前,以切换到追加模式。因此,粘贴缓冲区的内容不会被覆盖,而是追加到缓冲区中。

A 切换到追加模式并设置(第二个)标记。

> 设置(第二个)标记,并将粘贴缓冲区的内容写入屏幕交换文件(默认情况下为 /tmp/screen-exchange),一旦复制模式结束。

此示例演示了如何将整个滚动缓冲区转储到该文件:C-A [ g SPACE G $ >。

C-g 显示当前行和列的信息。

x 或 o 交换第一个标记和当前光标位置。您可以使用它来调整已放置的标记。

C-l(“el”)将重新绘制屏幕。

@ 什么也不做。甚至不会退出复制模式。

所有未在此处描述的键都将退出复制模式。

copy_reg [key]

不再存在,请使用 readreg。

crlf [ on | off ]

这会影响使用 C-a [ 命令复制文本区域。如果设置为 on,则行将由两个字符序列 CR - LF 分隔。否则(默认情况下),仅使用 LF。如果没有提供参数,则状态将被切换。

debug [ on | off ]

启用或禁用运行时调试。如果屏幕已使用选项 -DDEBUG 进行编译,则调试可用并且默认情况下已启用。请注意,此命令仅影响来自主 SCREEN 进程的调试输出。来自附加进程的调试输出只能一次且永久地关闭。

defc1 [ on | off ]

与 c1 命令相同,只是新窗口的默认设置已更改。初始设置为 on

defautonuke [ on | off ]

与 autonuke 命令相同,只是新显示的默认设置已更改。初始设置为 off。请注意,您可以使用特殊终端功能 AN,以便依赖于终端类型。

defbce [ on | off ]

与 bce 命令相同,只是新窗口的默认设置已更改。初始设置为 off

defbreaktype [tcsendbreak|TIOCSBRK|TCSBRK]

选择用于生成终端设备中断信号的可用方法之一。首选方法是 tcsendbreak 和 TIOCSBRK。第三种方法,TCSBRK,会阻止整个屏幕会话,直到中断结束,但它可能是生成长中断的唯一方法。tcsendbreak 和 TIOCSBRK 可能或可能不会产生带有尖峰的长中断(例如,每秒 4 个)。这不仅取决于系统,还取决于串行板驱动程序。调用 defbreaktype 时不带参数,将显示当前设置。

defcharset [set]

与 charset 命令类似,只是新窗口的默认设置已更改。调用时不带参数时,会显示当前的默认值。

defdynamictitle [ on | off ]

设置新窗口的默认行为,以确定是否应在看到适当的转义序列时更改屏幕窗口标题。另请参见“窗口标题(命名窗口)”部分。

defescape xy

设置默认命令字符。这与 escape 命令相同,但仅在多用户会话中才有用。在多用户会话中,escape 会更改调用用户的命令字符,而 defescape 会更改稍后添加的用户使用的默认命令字符。

defflow [ on | off | auto [ interrupt ]]

与 flow 命令相同,只是新窗口的默认设置已更改。初始设置为 auto。指定 defflow auto interrupt 与命令行选项 -fa 和 -i 相同。

defgr [ on | off ]

与 gr 命令相同,只是新窗口的默认设置已更改。初始设置为 off

defhstatus [status]

所有新窗口的硬状态行都设置为 status。此命令用于使每个窗口的硬状态显示窗口编号或标题等。status 可以包含与窗口消息中相同的指令,但指令转义字符是 ^E(八进制 005),而不是 %。这样做是为了防止对程序生成的硬状态行进行错误的解释。如果省略参数 status,则显示当前的默认字符串。默认情况下,新窗口的硬状态行为空。


defencoding enc

与 encoding 命令相同,只是新窗口的默认设置已更改。初始设置是从终端获取的编码。

deflog [ on | off ]

与 log 命令相同,只是新窗口的默认设置已更改。初始设置为 off

deflogin [ on | off ]

与 login 命令相同,只是新窗口的默认设置已更改。此设置在分发时初始化为 on(请参阅 config.h.in)。

defmode mode

每个新分配的伪终端的模式设置为 mode。Mode 是一个八进制数字。如果未提供 defmode 命令,则使用模式 0622。

defmonitor [ on | off]

与 monitor 命令相同,只是新窗口的默认设置已更改。初始设置为 off

defmousetrack [ on | off ]

与 mousetrack 命令相同,只是新窗口的默认设置已更改。初始设置为 off

defnonblock [ on | off | numsecs]

与 nonblock 命令相同,只是显示器的默认设置已更改。初始设置为 off

defobuflimit limit

与 obuflimit 命令相同,只是新显示器的默认设置已更改。初始设置为 256 字节。请注意,如果您希望依赖于终端类型,可以使用特殊“OL”终端功能。

defscrollback num

与 scrollback 命令相同,只是新窗口的默认设置已更改。初始设置为 100。

defshell command

是 shell .screenrc 命令的同义词。请参见那里。

defsilence [ on | off ]

与 silence 命令相同,只是新窗口的默认设置已更改。初始设置为 off

defslowpaste msec

与 slowpaste 命令相同,只是新窗口的默认设置已更改。初始设置为 0 毫秒,这意味着 off

defutf8 [ on | off ]

与 utf8 命令相同,只是新窗口的默认设置已更改。如果使用 -U 启动 screen,则初始设置为 on,否则设置为 off

defwrap [ on | off ]

与 wrap 命令相同,只是新窗口的默认设置已更改。最初行尾换行是开启的,可以通过 wrap 命令(C-a r)或通过“C-a : wrap on|off”来切换。

defwritelock [ on | off | auto ]

与 writelock 命令相同,只是新窗口的默认设置已更改。最初,写入锁定将关闭。

detach [-h]

分离 screen 会话(将其与终端断开连接并置于后台)。这会将您返回到调用 screen 的 shell。可以使用带 -r 选项的 screen 命令来恢复分离的 screen(另请参见“命令行选项”部分)。-h 选项告诉 screen 立即关闭与终端的连接(挂断)。


dinfo

显示 screen 如何看待您的终端。如果您想知道为什么某些功能(如颜色或替代字符集)无法正常工作,这将很有用。

displays

显示当前所有连接的用户前端(显示器)的表格列表。这在多用户会话中最为有用。您可以使用以下按键在“显示器”列表中进行操作:

k、C-p 或向上箭头 移动到上一行。

j、C-n 或向下箭头 移动到下一行。

C-a 或 Home 移动到第一行。

C-e 或 End 移动到最后一行。

C-u 或 C-d 向上或向下移动半页。

C-b 或 C-f 向上或向下移动一页。

鼠标单击 移动到所选行。当 mousetrack 设置为 on 时可用。

空格 刷新列表

d 从该显示器分离。

D 强制从该显示器分离。

C-g、Enter 或 Escape 退出列表。

以下是“显示器”可能呈现的示例: xterm 80x42 jnweiger@/dev/ttyp4 0(m11) &rWx facit 80x24 mlschroe@/dev/ttyhf nb 11(tcsh) rwx xterm 80x42 jnhollma@/dev/ttyp5 0(m11) &R.x (A) (B) (C) (D) (E) (F)(G) (H)(I)

图例如下:

(A) screen 识别的该显示器的终端类型。

(B) 显示器的几何尺寸,格式为宽度 x 高度。

(C) 登录到该显示器的用户名。

(D) 显示器的设备名称或附加的设备。

(E) 显示器处于阻塞模式还是非阻塞模式。可用的模式是“nb”、“NB”、“Z<”、“Z>”和“BL”。

(F) 窗口编号。

(G) 窗口名称/标题。

(H) 窗口是否共享。

(I) 窗口权限。由三个字符组成。

┌─────────────────────────────────────────────────────────┐
│              窗口权限指示符              │
├──────────────────┬──────────────────┬───────────────────┤
│  第一个字符   │  第二个字符   │   第三个字符   │
├─────┬────────────┼─────┬────────────┼─────┬─────────────┤
│ -   │无读取权限    │ -   │无写入权限    │ -   │无执行权限   │
├─────┼────────────┼─────┼────────────┼─────┼─────────────┤
│ r   │读取权限    │ w   │写入权限    │ x   │执行权限   │
├─────┼────────────┼─────┼────────────┼─────┼─────────────┤
│     │            │ W   │拥有 wlock    │     │             │
├─────┴────────────┴─────┴────────────┴─────┴─────────────┤
│ 由外部 wlock 抑制的权限指示符 │
├─────┬────────────┬─────┬────────────┬─────┬─────────────┤
│ R   │仅读取权限    │ .   │无写入权限    │     │             │
└─────┴────────────┴─────┴────────────┴─────┴─────────────┘

显示区域需要至少 10 个字符宽和 5 个字符高才能显示。

digraph [preset[unicode-value]]

此命令提示用户输入一个双字母序列。接下来输入的两个字符会在内置表中查找,并将结果字符插入到输入流中。例如,如果用户输入 'a"', 就会插入一个带重音的字母 a。如果输入的第一个字符是 0(零),screen 会将接下来的字符(最多三个)视为八进制数。可选参数 preset 被视为用户输入,因此可以创建一个带重音的字母键。例如,命令 "bindkey ^K digraph '"'" 可以启用用户通过按 CTRL-K a 来生成带重音的字母 a。当指定非零的 unicode-value 时,会创建一个新的双字母,并使用指定的 preset。如果为 unicode-value 提供零值,则会取消设置该双字母。

dumptermcap

将针对当前活动的窗口进行优化的虚拟终端的 termcap 条目写入用户 $HOME/.screen 目录(或者 screen 存储其套接字的任何位置)中的 .termcap 文件。此 termcap 条目与 screen 为每个窗口设置的环境变量 $TERMCAP 的值相同。对于基于 terminfo 的系统,您需要运行一个转换器(如 captoinfo),然后使用 tic 编译该条目。

dynamictitle [on | off]

更改窗口的行为,以确定 screen 是否应该在检测到适当的转义序列时更改窗口标题。请参阅“窗口命名 (TITLES)”部分。

echo [-n] message

echo 命令可用于向 screen 用户显示“每日消息”,通常安装在全局 /etc/screenrc 中。可以使用 -n 选项来禁止换行符。请参阅 sleep。echo 还可以用于在线检查环境变量。

encoding enc [enc]

告诉 screen 如何解释输入/输出。第一个参数设置当前窗口的编码。每个窗口都可以模拟不同的编码。可选的第二个参数会覆盖连接的终端的编码。通常不需要这样做,因为 screen 使用区域设置来检测编码。还有一种方法可以使用 KJ termcap 条目,根据终端类型选择终端编码。


支持的编码包括:eucJP、SJIS、eucKR、eucCN、Big5、GBK、KOI8-R、KOI8-U、CP1251、UTF-8、 ISO8859-2、ISO8859-3、ISO8859-4、ISO8859-5、ISO8859-6、ISO8859-7、ISO8859-8、ISO8859-9、 ISO8859-10、ISO8859-15、jis。

另请参阅 defencoding,它会更改新窗口的默认设置。

^ scape xy

将命令字符设置为 x,并将生成文字命令字符(通过触发元命令)的字符设置为 y(类似于 -e 选项)。每个参数都是单个字符、形式为 ^x 的双字符序列(表示 Ctrl+x)、后跟八进制数字的反斜杠(指定字符的 ASCII 代码),或者后跟第二个字符的反斜杠,例如 \^\\。默认值为 ^Aa

^ val command1[command2 ...]

将每个参数解析并作为单独的命令执行。

^ xec [[fdpat]newcommand [args ...]]

在当前窗口中运行一个 Unix 子进程(由可执行路径 newcommand 及其可选参数指定)。newcommandstdin/stdout/stderr、最初在窗口中启动的进程(我们称之为“应用程序进程”)以及 screen 本身(窗口)之间的数据流由文件描述符模式 fdpat 控制。该模式基本上是一个三字符序列,表示 newcommandstdinstdoutstderr。一个点 (.) 将文件描述符连接到 screen。一个感叹号 (!) 使文件描述符连接到“应用程序进程”。一个冒号 (:) 同时连接两者。用户输入将发送到 newcommand,除非 newcommand 接收“应用程序进程”的输出(fdpat 的第一个字符是 !:),或者添加了一个管道符号 (|)(作为第四个字符)到 fdpat 的末尾。

在没有参数的情况下调用 exec 会显示当前窗口中正在运行的子进程的名称和参数。每个窗口一次只能运行一个子进程。

当运行子进程时,kill 命令将影响它,而不是窗口进程。

请参阅 doc/fdpat.ps 文件,其中包含所有 21 种可能组合的令人困惑的说明。每个图显示了数字 2、1、0,它们代表 newcommand 的三个文件描述符。标记为 W 的框是通常的 pty,其从属端连接着“应用程序进程”。标记为 P 的框是辅助 pty,现在其主端连接着 screen

缩写:可以在 exec 单词和 fdpat 以及命令之间省略空格。可以省略尾随的点,并且仅由点组成的 fdpat 也可以省略。一个简单的 | 与模式 !..| 同义。exec 单词可以省略,并且始终可以替换为 !


示例:

exec ... /bin/sh

exec /bin/sh

!/bin/sh

在同一个窗口中创建另一个 shell,同时原始 shell 仍然在运行。两个 shell 的输出都会显示,并且用户输入会发送到新的 /bin/sh。

exec !.. stty 19200

exec ! stty 19200

!!stty 19200

设置窗口的 tty 速度。如果你的 stty 命令作用于 stdout,则添加另一个 !

exec !..| less

|less

将分页器添加到窗口输出。需要使用特殊字符 | 来让用户控制分页器,尽管分页器是从窗口进程接收输入。这是可行的,因为 less 会监听 stderr(一个 screen 不会预期的行为,除非使用 |),当其 stdin 不是 tty 时。较新版本的 less(177 之后)会在这里失败;旧版本的 pg 仍然有效。

!:sed -n s/.*Error.*/\007/p

将窗口输出发送到用户和 sed 命令。sed 会在窗口输出中插入额外的铃声字符(八进制 007)。每当字符串“Error”出现在窗口中时,这将导致“窗口 x 中有铃声”消息。

fit

将窗口大小更改为当前区域的大小。此命令是必需的,因为如果窗口显示超过一次,screen 不会自动调整窗口大小。

flow [ on | off | auto]

设置此窗口的流控制模式。不带参数时,它会在“自动”和“打开”和“关闭”之间循环切换当前窗口的流控制设置。有关完整详细信息,请参见稍后文档中的“流控制”部分,请注意,这可能会在未来的版本中更改。默认值由 defflow 设置。

focus [ next | prev | up | down | left | right | top | bottom ]

将输入焦点移动到下一个区域。这是以循环方式完成的,因此在从左上角开始,循环到右下角之后,将选择左上角区域。如果没有提供选项,则默认为 next。要选择的下一个区域由区域的层叠方式决定。通常,将选择同一层中的下一个区域。但是,如果该下一个区域包含一个或多个层,则首先选择最高层中的第一个区域。如果你位于当前层的最后一个区域,则 next 将将焦点移动到下一层的下一个区域(如果有下一层)。Prev 以相反的顺序循环。有关更多信息,请参见 split。

其余选项(updownleftrighttopbottom)对层的影响较小。up 选项会将焦点向上移动到与当前区域的左上角相接的区域。Down 将向下移动到与当前区域的左下角相接的区域。left 选项会将焦点向左移动到与当前区域的左上角相接的区域,而 right 将向右移动到与当前区域的右上角相接的区域。从最左边的区域向左移动,或从最右边的区域向右移动,将不会执行任何操作。


^ op 选项会将焦点移动到屏幕左上角的第一个区域,bottom 选项会将焦点移动到屏幕右下角的区域。从最顶部的区域向上移动或从最底部的区域向下移动不会执行任何操作。

有用的绑定是(h、j、k 和 l,类似于 vi): bind h focus left bind j focus down bind k focus up bind l focus right bind t focus top bind b focus bottom 请注意,k 通常绑定到 kill 命令。

focusminsize [ ( width|max|_ ) ( height|max|_ ) ]

这会强制任何当前选定的区域自动调整到至少指定的宽度和高度。所有其他相邻区域都会被调整大小以适应。此约束每次使用 focus 命令时都会生效。resize 命令可用于增加区域的任一维度,但不能减少到低于 focusminsize 设置的值。下划线 _ 是 max 的同义词。设置宽度和高度为 0 0(零零)将撤消任何约束,并允许手动调整大小。不带任何参数,将显示最小宽度和高度。

gr [ on | off ]

启用或禁用 GR 字符集切换。每当 screen 看到输入字符的第 8 位被设置时,它将使用存储在 GR 插槽中的字符集,并打印该字符并去除第 8 位。默认情况下(另请参见 defgr),不处理 GR 切换,因为否则 ISO88591 字符集将无法工作。

group [grouptitle]

更改或显示当前窗口所属的组。可以通过指定目标组的名称,将窗口在不同的组之间移动。不指定组时,将显示当前组的标题。

hardcopy [-h] [file]

将当前显示的图像写入文件 file,或者如果没有指定文件名,则写入 hardcopy.n,其中 n 是当前窗口的编号。这会附加或覆盖文件(如果文件存在)。请参阅下文。如果指定了 -h 选项,则还会转储滚动缓冲区的内容。

hardcopy_append [ on | off ]

如果设置为“on”,screen 将附加到由命令 C-a h 创建的“hardcopy.n”文件,否则每次都会覆盖这些文件。默认设置为“off”。

hardcopydir directory

定义将放置 hardcopy 文件的目录。如果未设置,hardcopy 将转储到 screen 的当前工作目录中。

hardstatus [ on | off ]

hardstatus [ always ] firstline | lastline | message | ignore [ string ]

hardstatus string [ string ]

此命令配置终端硬状态行的使用和模拟。第一种形式会切换 screen 是否使用硬件状态行来显示消息。如果该标志设置为“off”,则这些消息将以反向视频模式覆盖在显示行中。默认设置为“on”。


第二种形式告诉 screen 如果终端没有硬状态行(即 termcap/terminfo 功能“hs”、“ts”、“fs”和“ds”未设置),该如何操作。当使用 firstline/lastline 时,screen 将为硬状态保留显示的第一行/最后一行。message 使用 screen 的消息机制,ignore 告诉 screen 永远不要显示硬状态。如果将 always 作为前缀添加到类型中(例如,alwayslastline),screen 即使终端支持硬状态也会使用该类型。

第三种形式指定硬状态行的内容。'%h' 用作默认字符串,即显示存储的当前窗口的硬状态(可以通过 ESC]0;<string>^G 或 ESC_<string>ESC\ 设置)。您可以将其自定义为任何字符串,包括 STRING ESCAPES 章节中的转义字符。如果您省略字符串参数,则显示当前字符串。

您可以通过提供字符串作为附加参数来混合使用第二种和第三种形式。

height [-w|-d] [lines [cols]]

将显示高度设置为指定的行数。如果没有提供参数,则在 24 行和 42 行显示之间切换。您还可以指定宽度,以更改这两个值。-w 选项告诉 screen 不要更改显示大小,只需设置窗口大小,-d 反之亦然。

help[class]

这实际上不是一个在线帮助,而是显示一个帮助屏幕,显示所有按键绑定。第一页列出了所有内部命令及其当前的绑定。后续页面将显示自定义命令,每个命令对应一个按键。完成每个页面的阅读后按空格键,或按回车键提前退出。所有其他字符都将被忽略。如果给出了 -c 选项,则显示指定命令类中所有绑定的命令。请参阅 DEFAULT KEY BINDINGS 部分。

history

通常,用户使用一个允许轻松访问以前命令的 shell。例如,csh 具有命令 !! 来重复执行最后一个命令。screen 允许您有一种原始的方式来重新调用启动命令……:您只需键入该命令的第一个字母,然后按 C-a {,screen 将尝试找到与光标左侧的“提示符字符”匹配的先前行。该行将粘贴到当前窗口的输入队列中。因此,您可以使用一个简单的命令历史记录(由可见窗口及其滚动缓冲区组成)。

hstatus status

将窗口的硬状态行更改为字符串 status。

idle [timeout[cmd-args]]

设置一个命令,该命令在达到指定的非活动秒数后运行。该命令通常是空白命令,用于创建一个屏幕保护程序,但它可以是任何 screen 命令。如果没有指定命令,则仅设置超时时间。超时时间为零(或使用特殊超时 off),则会禁用计时器。如果没有提供任何参数,则显示当前设置。


ignorecase [ on | off ]

告诉 screen 忽略搜索中字符的大小写。默认值为 off。如果不带任何选项,则会切换 ignorecase 的状态。

info

使用消息行显示有关当前窗口的一些信息:光标位置,格式为 (列, 行),从 (1, 1) 开始,终端的宽度和高度,以及回滚缓冲区中的行数,例如 (80, 24)+50。当前窗口的 XON/XOFF 流量控制状态也会显示,如下所示(请参阅“流量控制”部分):

┌──────────┬──────────────────────────────────────────────────────────┐
│ +flow    │ 自动流量控制,当前已启用。                            │
├──────────┼──────────────────────────────────────────────────────────┤
│ -flow    │ 自动流量控制,当前已禁用。                            │
├──────────┼──────────────────────────────────────────────────────────┤
│ +(+)flow │ 流量控制已启用。与自动控制一致。                          │
├──────────┼──────────────────────────────────────────────────────────┤
│ -(+)flow │ 流量控制已禁用。与自动控制不一致。                          │
├──────────┼──────────────────────────────────────────────────────────┤
│ +(-)flow │ 流量控制已启用。与自动控制不一致。                          │
├──────────┼──────────────────────────────────────────────────────────┤
│ -(-)flow │ 流量控制已禁用。与自动控制一致。                          │
└──────────┴──────────────────────────────────────────────────────────┘

当前行尾换行设置(+wrap 表示已启用,-wrap 表示已禁用)也会显示。当窗口处于插入模式、原始模式、应用程序键盘模式、已启用输出日志记录、活动监视或部分重绘模式时,将显示标志 insorgapplogmonnored

当前活动字符集(G0、G1、G2 或 G3)以及方括号中当前指定为 G0 到 G3 的终端字符集也会显示。如果窗口处于 UTF-8 模式,则显示字符串 UTF-8。


根据窗口类型,附加模式会在状态行的末尾显示 (请参阅“窗口类型”章节)。

如果终端模拟器的状态机处于非默认状态,则信息行将以标识当前状态的字符串开头。

要获取系统信息,请使用 time 命令。

ins_reg [key]

不再存在,请使用 paste 代替。

kill

关闭当前窗口。

如果有正在运行的 exec 命令,则会将其关闭。否则,在窗口中运行的进程(shell)将收到 HANGUP 信号,窗口结构将被删除,screen(您的显示器)将切换到另一个窗口。当最后一个窗口被销毁时,screen 将退出。在 kill 命令执行后,screen 将切换到之前显示的窗口。

注意:Emacs 用户在使用时应记住此命令,以用于删除一行。建议不要将 C-a 作为 screen 的转义键,或将 kill 命令重新绑定到 C-a K。

lastmsg

重新显示消息/状态行的最后一个内容。如果您在显示消息时正在输入,这将非常有用,因为消息会在您按下键时消失(除非您的终端具有硬件状态行)。有关更精细的调整,请参阅 msgwait 和 msgminwait 命令。

layout new [title]

创建一个新的布局。screen 将更改为一个完整的区域,并切换到空白窗口。从这里开始,您可以根据需要构建区域和显示在其中的窗口。新的布局将编号为最小的可用整数,从零开始。您可以选择为新的布局指定一个标题。否则,它将具有默认标题“layout”。您可以使用 layout title 命令稍后更改标题。

layout remove [n|title]

删除指定的布局。您可以指定数字或标题。如果没有指定任何内容,screen 将删除当前的布局。

删除布局不会影响您设置的窗口或区域。

layout next

切换到下一个可用的布局。

layout prev

切换到上一个可用的布局。

layout select [n|title]

选择所需的布局。您可以指定数字或标题。如果没有指定任何内容,screen 将提示并询问所需的布局。要查看可用的布局,请使用 layout show 命令。

layout show

在消息行上列出可用布局的编号和标题。当前布局将被标记。

layout title [title]

更改或显示当前布局的标题。给定的字符串将用于命名布局。如果没有指定任何选项,则当前标题和编号将显示在消息行上。

layout number [n]

更改或显示当前布局的编号。给定的整数将用于对布局进行编号。如果没有指定任何选项,则当前编号和标题将显示在消息行上。


layout attach [title|:last]

更改或显示要重新连接的布局。默认值为 :last,这会告诉 screen 重新连接到在分离之前使用的最后一个布局。通过提供标题,您可以指示 screen 重新连接到特定的布局,无论当时使用了哪个布局。如果不使用任何选项,将在消息行中显示要重新连接的布局。

layout save [n|title]

记住当前区域的排列方式。使用后,screen 将记住垂直和水平分割的区域的排列方式。当 screen 会话重新连接或从不同的布局切换回来时,会恢复这种排列方式。如果会话结束或 screen 进程终止,布局排列将被丢失。在这种情况下,布局转储命令可能会有所帮助。如果提供数字或标题,screen 将记住该特定布局的排列方式。如果不使用任何选项,screen 将记住当前的布局。

您可以使用 layout autosave 命令自动保存区域。

layout autosave [on | off]

更改或显示自动保存布局的状态。默认值为 on,这意味着当 screen 被分离或更改为不同的布局时,将记住此时区域和窗口的排列方式,并在返回时恢复。如果 autosave 设置为 off,则该排列方式仅在手动使用 layout save 保存时或当布局最初创建为具有单个区域和单个窗口时才会恢复。如果不使用 on 或 off,则将在消息行中显示当前状态。

layout dump [filename]

将当前布局中进行的分割顺序写入文件。这对于重新创建当前布局中使用的区域顺序很有用。仅记录当前布局。虽然记录了区域的顺序,但不会记录这些区域的大小以及哪些窗口对应于哪些区域。如果未指定文件名,则默认文件名为 layout-dump,并保存在启动 screen 进程的目录中。如果该文件已存在,layout dump 将追加到该文件中。例如:

C-a : layout dump /home/user/.screenrc

将布局保存或追加到用户的 .screenrc 文件中。

license

显示免责声明页面。每当在没有选项的情况下启动 screen 时,都会这样做,这应该足够了。请参阅 startup_message 命令。

lockscreen

锁定此显示器。调用一个 screenlock 程序。在 screenlock 程序终止之前,screen 不会接受任何命令键。同时,窗口中的进程可能会继续运行,因为窗口处于“分离”状态。screenlock 程序可以通过环境变量 $LOCKPRG 更改(必须在启动 screen 的 shell 中设置),并以用户的 uid 和 gid 身份执行。

警告:如果您在其他未锁定的 shell 中工作并且在 screen 上没有设置密码,则锁定将无效:可以很容易地从未锁定的 shell 中重新连接。此功能应该更恰当地称为“lockterminal”。


log [on | off]

开始/停止将当前窗口的输出写入文件 screenlog.n,该文件位于窗口的默认目录中,其中 n 是当前窗口的编号。可以使用 logfile 命令更改此文件名。如果未提供参数,则切换日志记录的状态。会话日志将附加到文件中的先前内容(如果该文件已存在)。当前内容和滚动历史记录不包含在会话日志中。默认值为 off

logfile filename

logfile flush secs

定义日志文件将使用的名称。默认值为 screenlog.%n。第二种形式更改 screen 在将日志文件缓冲区刷新到文件系统之前等待的秒数。默认值为 10 秒。

login [on | off]

在当前窗口中添加或删除 utmp 数据库文件中的条目。这控制着窗口是否“已登录”。如果未提供参数,则切换窗口的登录状态。此外,可以方便地使用“登录”和“注销”键。例如,bind I login onbind O login off 将这些键映射为 C-a I 和 C-a O。默认设置(在 config.h.in 中)对于在 suid-root 下运行的 screen 应该为 on。使用 deflogin 命令更改新窗口的默认登录状态。这两个命令仅在 screen 编译了 utmp 支持时才存在。

logtstamp [on|off]

logtstamp after [secs]

logtstamp string
[string]

此命令控制 screen 的日志文件时间戳机制。如果时间戳已启用,则 screen 会在两分钟不活动后将包含当前时间的字符串添加到日志文件中。当输出继续进行,并且又过去了两分钟后,将添加第二个时间戳,以记录输出的重新开始。可以使用该命令的第二种形式来更改此超时时间。第三种形式用于自定义时间戳字符串(默认情况下为“-- %n:%t -- time-stamp -%M/%d/%y %c:%s --\n”)。

mapdefault

告诉 screen,下一个输入字符应仅在默认的 bindkey 表中查找。请参阅 bindkey。

mapnotnext

类似于 mapdefault,但甚至不在默认的 bindkey 表中查找。

maptimeout [timeout]

将输入序列检测的字符间计时器设置为 timeout 毫秒。默认超时时间为 300 毫秒。不带参数的 maptimeout 显示当前设置。请参阅 bindkey。

markkeys string

这是一种更改用于复制/历史记录模式的键映射的方法。该字符串由 oldchar=newchar 对组成,这些对由“:”分隔。例如,字符串 B=^B:F=^F 将更改键“C-b”和“C-f”为 vi 样式的绑定(向上/向下滚动填充页面)。这碰巧是“B”和“F”的默认绑定。命令 markkeys h=^B:l=^F:$=^E 将为 emacs 样式的绑定设置模式。如果您的终端发送导致您中止复制模式的字符,则此命令可能会有所帮助,方法是将这些字符绑定为不执行任何操作。不执行任何操作的字符是“@”,并且像这样使用:markkeys @=L=H,如果您不再想使用“H”或“L”命令。如本示例所示,可以在单个语句中将多个键分配给一个函数。


maxwin num

设置屏幕将创建的最大窗口数量。 不会影响已存在的窗口。 只有在没有现有窗口时,才能增加该数字。

meta

将命令字符(C-a)插入到当前窗口的输入流中。

monitor [ on | off ]

切换窗口的活动监视。 当启用监视时,并且将受影响的窗口切换到后台时,您将在状态行中收到活动通知消息,并且该窗口还将用 `@` 标记在窗口状态显示中。 默认情况下,所有窗口的监视功能都处于关闭状态。

mousetrack [ on | off ]

此命令确定屏幕是否会监视鼠标点击。 当启用此命令时,可以通过使用鼠标指向并在其上单击来选择以各种方式分割的区域。 如果不指定 on 或 off,则将显示当前状态。 默认状态由 defmousetrack 命令确定。

msgminwait sec

定义屏幕在显示新消息时延迟的时间,前提是当前正在显示一条消息。 默认值为 1 秒。

msgwait sec

定义在屏幕未被其他活动干扰时,消息显示的持续时间。 默认值为 5 秒。

multiuser [ on | off ]

在单用户和多用户模式之间切换。 标准的屏幕操作是单用户模式。 在多用户模式下,可以使用命令 `acladd`、`aclchg`、`aclgrp` 和 `acldel` 来启用(和禁用)其他用户访问此屏幕会话。

nethack [ on | off ]

更改屏幕使用的错误消息类型。 如果您熟悉游戏 nethack,您可能会喜欢 nethack 风格的消息,这些消息通常会模糊事实,但读起来更有趣。 无论如何,标准消息通常也很不清楚。
只有在编译屏幕时定义了 NETHACK 标志,此选项才可用。 默认设置由环境变量 `$NETHACKOPTIONS` 和文件 `~/.nethackrc` 的存在决定——如果两者中的任何一个存在,则默认设置为 on。

next

切换到下一个窗口。 可以重复使用此命令来循环浏览窗口列表。

nonblock [ on | off | numsecs ]

告诉屏幕如何处理不再接受输出的用户界面(显示)。 这种情况可能会发生,例如,如果用户按下 ^S 或 TCP/调制解调器连接中断但未收到挂断信号。 如果 nonblock 处于关闭状态(这是默认状态),屏幕将等待显示重新启动以接受输出。
如果 nonblock 处于打开状态,屏幕将等待直到达到超时时间(on 被视为 1s)。 如果显示仍然无法接收字符,屏幕将认为它已阻止并停止向其发送字符。 如果在某个时候它重新启动并开始接受字符,屏幕将取消阻止该显示并重新显示更新后的窗口内容。

number [[+|-]n]

更改当前窗口的编号。如果给定的数字 n 已经被另一个窗口使用,则两个窗口会交换它们的编号。如果未指定参数,则会显示当前窗口的编号(和标题)。使用 +- 会将窗口的编号更改为指定的相对量。

obuflimit [limit]

如果输出缓冲区包含的字节数超过指定的限制,则不再从窗口读取更多数据。默认值为 256。如果您有快速显示器(如 xterm),您可以将其设置为较高的值。如果未指定参数,则会显示当前的设置。

only

删除所有区域,但保留当前区域。

other

切换到先前显示的窗口。如果该窗口不再存在,则 other 命令与 next 命令的效果相同。

partial [on | off]

定义在切换到当前窗口后是否应刷新显示(如使用 redisplay 命令)。此命令仅影响当前窗口。要立即影响所有窗口,请使用 allpartial 命令。默认值为 off,这个默认值是固定的,因为当前没有 defpartial 命令。

password [crypted_pw]

在您的 .screenrc 文件中提供一个加密的密码,每当有人尝试恢复分离的会话时,screen 都会提示输入密码。这对于在 screen 下运行具有特权的程序,并保护您的会话免受其他用户以您的 uid 身份(即任何超级用户)尝试重新连接的攻击非常有用。如果未指定加密密码,screen 将提示您两次输入密码,并将加密后的密码放置在剪贴板中。默认值为 none,这将禁用密码检查。

paste [registers [dest_reg]]

将指定寄存器的内容(连接起来)写入当前窗口的 stdin 队列。. 寄存器被视为剪贴板。如果未提供参数,则会提示用户输入一个要粘贴的寄存器。剪贴板可以通过 copyhistoryreadbuf 命令填充。其他寄存器可以通过 registerreadregpaste 命令填充。如果使用第二个参数调用 paste,则会将指定寄存器的内容粘贴到指定的命名目标寄存器中,而不是粘贴到窗口中。如果使用 . 作为第二个参数,则显示剪贴板将作为目标。请注意,paste 命令会使用各种资源:每当指定第二个参数时,就不需要当前窗口。当源规范仅包含寄存器(不包含剪贴板)时,则不需要当前显示(终端连接),因为寄存器是全局资源。剪贴板为每个用户存在一个。


pastefont [ on | off ]

告诉 screen 在粘贴缓冲区中包含字体信息。默认情况下,不包含。此命令对于多字符字体(如汉字)特别有用。

pow_break

重新打开窗口的终端行,并发送中断信号。请参阅 \`break'。

pow_detach

强制断开连接。与 detach 命令大致相同,但也会向 screen 的父进程发送 HANGUP 信号。警告:如果 screen 是从您的登录 shell 启动的,这将导致注销。

pow_detach_msg [message]

每次执行“强制断开连接”时,都会输出此处指定的消息。可以用作注销消息的替代,或者用于重置波特率等。不带参数时,会显示当前消息。

prev

切换到编号较低的窗口。此命令可以重复使用,以循环浏览窗口列表。

printcmd [cmd]

如果 cmd 不是空字符串,screen 不会使用终端功能 po/pf,而是在检测到 ANSI 打印序列 ESC [ 5 i 时,将输出管道传输到 cmd。这通常应该是一个类似于 lpr 或 printcmd 的命令。不带命令时,会显示当前设置。ANSI 序列 ESC [ 4 i 结束打印并关闭管道。

警告:请谨慎使用此命令!如果其他用户对您的终端具有写入权限,他们将能够启动打印命令。

process [key]

将指定寄存器中的内容放入 screen 的输入队列中。如果没有提供参数,则会提示您输入寄存器名称。文本将像从用户键盘输入一样进行解析。此命令可用于将多个操作绑定到单个按键。

quit

关闭所有窗口并终止 screen。请注意,在 VT100 风格的终端上,按键 C-4 和 C-\ 是相同的。这使得默认绑定变得危险:请注意不要在选择窗口编号 4 时输入 C-a C-4。使用空 bind 命令(如 bind '^\')删除按键绑定。

readbuf [encoding] [filename]

将指定文件中的内容读取到粘贴缓冲区中。您可以通过 -e 选项告诉 screen 文件的编码。如果没有指定文件,则使用 screen-exchange 文件名。请参阅 bufferfile 命令。

readreg [encoding] [register [filename]]

根据参数数量,执行以下操作之一:如果没有或只有一个参数,它会将粘贴缓冲区的内容复制到指定的寄存器或提示符中输入的寄存器。如果有两个参数,它会将指定文件中的内容读取到寄存器中,就像 readbuf 将 screen-exchange 文件读取到粘贴缓冲区一样。您可以通过 -e 选项告诉 screen 文件的编码。以下示例会将系统的密码文件粘贴到 screen 窗口中(并在寄存器 p 中保留一份副本):

C-a : readreg p /etc/passwd
C-a : paste p

redisplay

重新显示当前窗口。在部分重绘模式下,需要完全重新显示。

register [-eencoding]key-string

将指定的字符串保存到 register 键中。可以通过 -e 选项指定字符串的编码。另请参见 paste 命令。

remove

删除当前区域。如果只有一个区域,则此操作无效。

removebuf

取消链接用于 writebuf 和 readbuf 命令的屏幕交换文件。

rendition [ bell | monitor | silence | so ] attr [ color ]

更改屏幕呈现具有 monitor 或 bell 标志的窗口标题的方式,这些标志在 caption 或 hardstatus 或 windowlist 中设置。有关修饰符的语法,请参见 STRING ESCAPES 章节。 monitor 的默认值为 =b(粗体、活动颜色),bell 的默认值为 =ub(下划线、粗体和活动颜色),silence 的默认值为 =u。

reset

将虚拟终端重置为其通电时的值。当应用程序留下奇怪的设置(如滚动区域或图形字符集)时,此操作很有用。

resize [-h|-v|-b|-l|-p] [[+|-] n[%] |=|max|min|_|0]

调整当前区域的大小。根据拆分顺序,空间将从周围区域中移除或添加到周围区域中。可用的调整大小选项为:`-h'(水平), -v'(垂直),-b'(两者),-l'(局部于图层),和-p'(垂直)。水平调整大小 将添加或删除区域的宽度,垂直调整大小将添加或删除区域的高度,两者将添加或 删除两个尺寸的大小。局部和垂直与水平和垂直类似, 但它们会考虑到区域的拆分方式。如果区域的最后一次拆分是水平的,则局部调整大小将类似于垂直调整大小。如果区域的最后一次拆分是垂直的,则垂直调整大小将类似于水平调整大小。

如果没有指定任何选项,则局部调整大小为默认设置。

可以以几种不同的方式表达要添加或删除的行数。通过指定一个数字 n 本身,将按该绝对数量调整区域的大小。可以通过在数量前添加加号 +' 或减号-' 来指定相对数量,例如添加 +n 行或删除 -n 行。调整大小也可以通过在百分号 % 后附加来表示绝对或相对百分比。使用零 0min 的同义词,使用下划线 _max 的同义词。

以下是一些示例:

resize +N
将当前区域增加 N

resize -N
将当前区域减少 N

resize  N
将当前区域设置为 N

resize 20%
将当前区域设置为原始大小的 20%

resize +20%
将当前区域增加 20%

resize -b =
使所有窗口大小相等

resize  max
最大化当前区域

resize  min
最小化当前区域

如果不带任何参数,screen 将提示您如何调整当前区域的大小。

如果想限制区域可以具有的最小大小,请参见 focusminsize。

screen [-opts] [n] [cmd [args]|//group]

建立一个新窗口。可以为每个命令指定流控制选项 (-f、-fn 和 -fa)、标题选项 (-t)、登录选项 (-l 和 -ln)、终端类型选项 (-T <term>)、所有功能标志 (-a) 和回滚选项 (-h <num>)。选项 (-M) 为此窗口启用监视。选项 (-L) 为此窗口启用输出日志记录。如果给出了可选数字 n,其范围为 0..MAXWIN-1,则将窗口号 n 分配给新创建的窗口(或者,如果此数字已被占用,则分配下一个可用的数字)。如果在 screen 之后指定了命令,则将使用给定的参数在窗口中启动此命令;否则,将创建一个 shell。如果提供了 //group,则会创建一个容器类型的窗口,可以在其中创建其他窗口。

因此,如果您的 .screenrc 包含以下行:

# .screenrc 示例:
screen 1
screen -fn -t foobar -L 2 telnet foobar

screen 会创建一个 shell 窗口(在窗口 #1 中)和一个具有 TELNET 连接的窗口,连接到机器 foobar(不使用流控制,标题为 foobar,在窗口 #2 中),并将 telnet 会话的日志文件(screenlog.2)写入。请注意,与 screen 的早期版本不同,当 .screenrc 文件中包含 screen 命令时,不会创建额外的默认窗口。初始化完成后,screen 将切换到 .screenrc 文件中指定的最后一个窗口,或者(如果没有指定),则打开默认窗口 #0。

Screen 具有 cu 和 telnet 的一些内置功能。另请参阅“窗口类型”章节。

scrollback num

将当前窗口的回滚缓冲区大小设置为 num 行。默认回滚缓冲区大小为 100 行。另请参阅 defscrollback 命令,并使用 info 查看当前设置。要访问和使用回滚缓冲区中的内容,请使用 copy 命令。

select [WindowID]

切换到由 WindowID 标识的窗口。这可以是窗口标题(字母数字窗口名称)或窗口号的前缀。该参数是可选的,如果省略,则会提示您输入一个标识符。当建立新窗口时,将为该窗口分配第一个可用的数字。因此,可以通过 select 0 激活第一个窗口。窗口数量由 MAXWIN 配置参数设置(默认值为 100),但可以通过使用“maxwin”命令进行更改。有两个特殊的 WindowID,- 选择内部空白窗口,. 选择当前窗口。后者在使用 screen 的 -X 选项时非常有用。

sessionname [name]

重命名当前会话。请注意,对于 screen -list,名称将与进程 ID 附加在一起。如果省略参数名称,则将显示此会话的名称。警告:$STY 环境变量仍然会反映预先存在的 shell 中的旧名称。这可能会导致混淆。通常不建议使用此命令。如果您希望命名一个新会话,请使用 -S 命令行选项。默认情况下,它将由 tty 和主机名称构成。


setenv [var [string]]

将环境变量 var 设置为 string。如果仅指定 var,则会提示用户输入值。如果未指定任何参数,则会提示用户输入变量和值。环境由后续所有分叉的 shell 继承。

setsid [ on | off ]

通常,screen 为窗口使用不同的会话和进程组。如果 setsid 设置为 off,则不再这样做,并且所有窗口都将位于与 screen 后端进程相同的进程组中。这也会破坏作业控制,因此请小心。默认值为 on。此命令可能仅在罕见情况下有用。

shell command

设置用于创建新 shell 的命令。这将覆盖环境变量 $SHELL 的值。如果您想运行一个 tty 增强程序,并且它期望执行 $SHELL 中指定的程序,这将很有用。如果命令以“-”字符开头,则 shell 将作为登录 shell 启动。典型的 shell 在未作为登录 shell 启动时只会执行最少的初始化。例如,除非是登录 shell,否则 Bash 不会读取您的 ~/.bash_profile。

shelltitle title

设置在启动期间或通过 C-A C-c 命令创建的所有 shell 的标题。有关标题的详细信息,请参阅题为“标题(命名窗口)”的部分。

silence [ on | off | sec ]

切换窗口的静默监控。当静默设置为 on 并且受影响的窗口切换到后台时,您将在状态行中收到静默通知消息,并在指定的非活动时间(静默)之后。默认超时可以通过 silencewait 命令或通过指定数字(秒)而不是 onoff 来更改。所有窗口的静默最初都设置为 off。

silencewait sec

定义所有窗口在显示消息之前,应为静默监控等待的时间。默认值为 30 秒。

sleep num

此命令将暂停 .screenrc 文件的执行 num 秒。键盘活动将结束睡眠。它可用于让用户有时间阅读 echo 命令的输出。

slowpaste msec

定义通过粘贴命令(“C-a ]”)将文本插入当前窗口的速度。如果 slowpaste 值为非零,则文本将逐个字符写入。screen 会在每个单个字符写入后暂停 msec 毫秒,以允许应用程序处理其输入。仅当您的底层系统在粘贴大量文本时显示出流控制问题时,才使用 slowpaste。

sort

按窗口标题的字母顺序对窗口进行排序。

source file

读取并执行文件 file 中的命令。可以嵌套 source 命令,最大递归级别为十。如果文件不是绝对路径,并且 screen 已经在处理 source 命令,则在搜索新的命令文件之前,screen 将使用正在运行的 source 命令文件的父目录来搜索。


请注意,termcap/terminfo/termcapinfo 命令仅在启动和重新连接时有效,因此必须通过默认的 screenrc 文件来使用它们,才能使其生效。

sorendition [attr[color]]

此命令已弃用。请参阅“rendition so”。

split[-v]

将当前区域拆分为两个新区域。显示屏上的所有区域都会被调整大小以腾出空间给新区域。空白窗口将显示在新区域中。默认情况下,会创建水平拆分,将新区域放置在彼此的上方和下方。使用 -v 将创建垂直拆分,导致新区域并排显示。使用 remove 或 only 命令删除区域。使用 focus 在区域之间切换。

当区域与之前拆分的方式相反(即,先垂直后水平或先水平后垂直)时,将创建一个新层。该层用于将以相同方式拆分的区域分组在一起。通常,作为用户,您不必关心或注意到层,但它会影响某些命令(focus 和 resize)的行为。

在这种当前的 screen 实现中,在垂直拆分的区域中,滚动数据将比在未拆分的区域中显示得慢得多。如果需要使用 cat 或 tail -f 等系统命令,则应考虑到这一点。

startup_message [on | off]

选择是否希望在启动期间查看版权声明。默认值为“on”,您可能已经注意到了。

status [top | up | down | bottom] [left | right]

默认情况下,状态窗口位于屏幕的左下角。此命令可以将状态消息移动到屏幕的任何角落。top 与 up 相同,down 与 bottom 相同。

stuff [string]

将字符串 string 放入当前窗口的输入缓冲区中。这类似于 paste 命令,但开销更小。如果没有参数,screen 将提示输入要放入的字符串。您不能使用 stuff 命令粘贴大型缓冲区。它最适用于键绑定。请参阅 bindkey。

su [username [password [password2]]]

替换显示的用户。该命令会提示输入所有省略的参数。如果密码作为参数指定,则必须以未加密的形式指定。第一个密码与系统密码数据库进行匹配,第二个密码与使用 acladd 或 password 命令设置的 screen 密码进行匹配。su 可能对 screen 管理员测试多用户设置很有用。当身份验证失败时,用户可以访问为用户 nobody 提供的命令。这些命令是 detach、license、version、help 和 displays。

suspend

暂停 screen。窗口处于“分离”状态,而 screen 处于暂停状态。此功能依赖于 shell 是否能够进行作业控制。

term term

在 screen 打开的每个窗口的环境中,默认情况下,$TERM 变量设置为 screen。但是,如果未在本地 termcap 或 terminfo 数据库中安装 screen 的描述,则可以将 $TERM 设置为 - 比如 vt100。这不会造成太大问题,因为 screen 与 VT100/ANSI 兼容。不建议将 term 命令用于非默认目的。也就是说,您可能希望为下一个 screen rlogin othermachine 命令指定特殊的 $TERM 设置(例如 vt100)。使用命令 screen -T vt100 rlogin othermachine,而不是设置和重置默认值。


termcap term terminal-tweaks[window-tweaks]

terminfo term terminal-tweaks[window-tweaks]

termcapinfo term terminal-tweaks[window-tweaks]

使用此命令来修改您的终端的 termcap 条目,而无需进行创建自定义 termcap 条目所涉及的所有繁琐操作。此外,您可以选择性地自定义为窗口生成的 termcap。您必须将这些命令放置在 screenrc 启动文件之一中,因为一旦终端模拟器启动,这些命令就没有意义。

如果您的系统使用 terminfo 数据库而不是 termcap,则 screen 将理解 terminfo 命令,该命令与 termcap 命令具有相同的效果。提供了两个单独的命令,因为存在细微的语法差异,例如,当需要参数插值(使用 %)时。请注意,使用 terminfo 命令时必须使用 termcap 格式的名称。

在许多情况下,如果参数在 terminfo 和 termcap 语法中都是有效的,则可以使用 termcapinfo 命令,它只是具有相同参数的一对 termcapterminfo 命令的简写。

第一个参数指定应受此定义影响的终端。您可以通过用 | 分隔终端名称来指定多个终端。使用 * 来匹配所有终端,使用 vt* 来匹配所有以 vt 开头的终端。

每个调整参数包含一个或多个 termcap 定义(由 : 分隔),这些定义将插入到相应的 termcap 条目的开头,以增强或覆盖现有值。第一个调整修改您的终端的 termcap,其中包含终端用于执行某些功能的定义。指定一个空字符串以保持不变(例如 '')。第二个(可选)调整修改所有窗口 termcap,应包含 screen 可以理解的定义(请参见“虚拟终端”部分)。

一些例子:

termcap xterm*  LP:hs@

通知 screen,所有以 xterm 开头的终端都具有坚定的自动边距,允许更新屏幕上的最后一个位置(LP),但实际上并没有状态行(没有 hs - 附加 \@` 以关闭条目)。请注意,我们假定所有以 vt 开头的终端名称都具有 LP 功能,但前提是您没有为该终端指定 termcap 命令。 termcap vt* LP

termcap vt102|vt220  Z0=\E[?3h:Z1=\E[?3l

为所有以 vt 开头的终端指定了坚定的边距 LP 功能,并且第二行还将添加转义序列,以便在 VT102 或 VT220 中切换到(Z0)和退出(Z1)132 个字符/行的模式。(您必须在 termcap 中指定 Z0Z1 才能使用更改宽度的命令。)


termcap vt100  ""  l0=PF1:l1=PF2:l2=PF3:l3=PF4

这会保留您现有的 vt100 termcap,并将功能键标签添加到每个窗口的 termcap 条目中。

termcap h19|z19  am@:im=\E@:ei=\EO  dc=\E[P

这会获取一个 h19 或 z19 termcap,并关闭自动边距 (am@),启用插入模式 (im) 和结束插入 (ei) 功能(im 字符串中的 @ 位于 = 之后,因此它是字符串的一部分)。 将 imei 定义添加到您的终端的 termcap 中,将导致 screen 在每个窗口的 termcap 中自动宣传字符插入功能。 每个窗口还将获得删除字符功能 (dc) 添加到其 termcap 中,screen 会将其转换为终端的行更新(我们假装它不支持字符删除)。

如果您希望完全指定每个窗口的 termcap 条目,则应在运行 screen 之前设置 $SCREENCAP 变量。 请参阅本手册中关于虚拟终端的讨论,以及 termcap(5) 手册页,以获取有关 termcap 定义的更多信息。

time   [字符串]

使用消息行显示当前时间、主机名以及 1 分钟、5 分钟和 15 分钟的平均负载(如果您的系统上可用)。 对于特定于窗口的信息,请使用 info。

如果指定了一个字符串,它会更改时间报告的格式,如字符串转义章节中所述。 Screen 使用默认值 "%c:%s %M %d %H%? %l%?"。

title [窗口标题]

将当前窗口的名称设置为窗口标题。 如果未指定名称,screen 将提示您输入。 此命令在早期版本中被称为 aka

unbindall

取消绑定所有绑定。 当 screen 仅用于其分离功能时,这会很有用,例如,当让控制台应用程序作为守护程序运行时。 如果出于某种原因,有必要在此之后绑定命令,请使用 screen -X

unsetenv var

取消设置环境变量。

utf8 [启用 | 禁用 [启用 | 禁用]]

更改当前窗口中使用的编码。 如果启用 utf8,则发送到窗口的字符串将进行 UTF-8 编码,反之亦然。 省略参数会切换设置。 如果给出了第二个参数,则还会更改显示的编码(这最好使用 screen 的 -U 选项来完成)。 另请参阅 defutf8,它会更改新窗口的默认设置。

vbell [启用 | 禁用]

设置此窗口的视觉铃声设置。 省略参数会切换设置。 如果启用 vbell,但您的终端不支持视觉铃声,则会在状态行中显示一个“vbell-message”,以指示何时收到铃声字符 (^G)。 终端的视觉铃声支持由 termcap 变量 vb (terminfo: 'flash') 定义。


默认情况下,vbell 处于关闭状态,因此使用可听的铃声。 另请参阅 bell_msg

vbell_msg [message]

设置视觉铃声消息。 如果窗口接收到铃声字符 (^G),并且 vbell 设置为开启,但终端不支持视觉铃声,则会将消息打印到状态行。 默认消息为 Wuff, Wuff!!。 不带参数时,将显示当前消息。

vbellwait sec

定义每次显示屏幕视觉铃声消息后的延迟(以秒为单位)。 默认值为 1 秒。

verbose [ on | off ]

如果 verbose 切换为 on,则每次创建窗口(或从僵尸状态恢复窗口)时,都会回显命令名称。 默认值为 off。 不带参数时,将显示当前设置。

version

在状态行中打印当前版本和编译日期。

wall message

向所有显示器发送消息。 该消息将出现在终端的状态行中。

width [-w|-d] [cols [lines]]

在 80 列和 132 列之间切换窗口宽度,或者如果指定了参数,则将其设置为 cols 列。 这需要一个功能强大的终端以及 termcap 条目 Z0 和 Z1。 请参阅 termcap 命令以获取更多信息。 您还可以指定新的高度,如果需要更改这两个值。 -w 选项告诉 screen 保持显示大小不变,只需设置窗口大小,-d 则反之。

windowlist [ -b ] [ -m ] [ -g ]

windowlist string [string]

windowlist title [title]

以表格形式显示所有窗口,以便进行视觉窗口选择。 如果 screen 处于窗口组中,则 screen 将退出该组,然后显示该组中的窗口。 如果给出了 -b 选项,则 screen 将在显示列表之前切换到空白窗口,以便当前窗口也可以选择。 -m 选项更改窗口的顺序;screen 不按窗口编号排序,而是使用其内部的最近使用列表。 -g 选项将显示该级别及其下方的任何组中的窗口。

以下键用于在 windowlist 中导航:

k, C-p 或向上箭头    向上移动一行。

j, C-n 或向下箭头    向下移动一行。

C-g 或 escape    退出 windowlist。

C-a 或 home  移动到第一行。

C-e 或 end   移动到最后一行。

C-u 或 C-d   向上或向下移动半页。

C-b 或 C-f   向上或向下移动一页。

.9  使用数字键,移动到所选行。

鼠标点击    移动到所选行。 当 mousetrack 设置为 on 时可用。

/   搜索。

n   正向重复搜索。

N   反向重复搜索。

m   切换 MRU(最近使用列表)。

g   切换组嵌套。

a   所有窗口视图。

C-h 或退格键    退出组。

,   与上一个窗口交换编号。

.   与下一个窗口交换编号。

K   删除该窗口。

空格或回车键:选择该窗口。

表格格式可以通过字符串和标题选项进行更改,标题显示为表格标题,而行则使用字符串设置来创建。默认设置是 Num Name%=Flags 作为标题,%3n %t%=%f 作为行。请参阅“字符串转义”章节以获取更多代码(例如颜色设置)。

窗口列表需要至少 10 个字符宽和 6 个字符高的区域大小才能显示。

windows [ 字符串 ]

使用消息行显示所有窗口的列表。每个窗口都按编号列出,并显示启动该窗口的进程的名称(或其标题);当前窗口以 * 标记;上一个窗口以 - 标记;所有已登录的窗口都以 $ 标记;接收到提示音的后台窗口以 ! 标记;正在监视且发生过活动的后台窗口以 @ 标记;已启用输出日志记录的窗口以 (L) 标记;被其他用户占用的窗口以 & 标记;处于僵尸状态的窗口以 Z 标记。如果此列表太长而无法适应终端的状态行,则仅显示当前窗口周围的部分。可选的字符串参数遵循“字符串转义”格式。如果传递了字符串参数,则输出大小不受限制。不带任何参数的默认命令限制为 1024 字节。

wrap [ 开启 | 关闭 ]

设置当前窗口的行换行设置。当行换行设置为“开启”时,连续的第二个可打印字符输出到行的最后一列时,将换行到下一行的开头。作为一项附加功能,退格键 (^H) 还会换行到左边距之前的行。默认值为“开启”。不带任何选项,将切换换行状态。

writebuf [-e 编码] [文件名]

将粘贴缓冲区的内容写入指定的文件,或者如果未提供文件名,则写入公共可访问的屏幕交换文件。这被认为是在同一主机上的屏幕用户之间进行原始通信的一种方式。如果指定了编码,则粘贴缓冲区将动态地重新编码以匹配该编码。可以使用 bufferfile 命令设置文件名,默认值为 /tmp/screen-exchange。

writelock [ 开启 | 关闭 | 自动 ]

除了访问控制列表之外,并非所有用户都能同时写入同一个窗口。默认情况下,writelock 处于“自动”模式,并授予第一个切换到特定窗口的用户独占输入权限。当他离开该窗口时,其他用户可以获得 writelock(自动)。通过 writelock off 命令禁用当前窗口的 writelock。如果用户发出 writelock on 命令,则在切换到其他窗口时,他将保留独占写入权限。

xoff

xon

将 CTRL-s / CTRL-q 字符插入到当前窗口的 stdin 队列中。


zmodem [ off | auto | catch | pass ]

zmodem sendcmd [string]

zmodem recvcmd [string]

定义 screen 的 zmodem 支持。当 screen 检测到 zmodem 请求时,它理解两种不同的模式:pass 和 catch。如果模式设置为 pass,screen 将会将所有数据中继到 attacher,直到传输结束。在 catch 模式下,screen 充当 zmodem 端点,并启动相应的 rz/sz 命令。如果模式设置为 auto,screen 将在窗口为 tty 时使用 catch(例如,串行端口),否则将使用 pass。

您可以通过第二种和第三种形式定义 screen 在 catch 模式下使用的模板。

请注意,这是一个实验性功能。

zombie [keys[onerror]]

默认情况下,当窗口进程(例如,shell)退出时,screen 窗口将从窗口列表中删除。如果指定了两个键的字符串到 zombie 命令,则“已死”窗口将保留在列表中。可以使用 kill 命令删除此类窗口。在已死窗口中按第一个键,其效果相同。按下第二个键时,screen 将尝试重新启动该窗口。最初在窗口中运行的进程将被重新启动。 调用 zombie 且不带参数将清除 zombie 设置,从而使窗口在进程退出时消失。

由于 zombie 设置是全局应用于所有窗口的,因此该命令可能应该被称为 defzombie,但实际上并没有。

您可以选择在 keys 之后放置单词 onerror。这将导致 screen 监视在窗口中运行的进程的退出状态。如果进程正常退出(“0”),则窗口将消失。任何其他退出值都将导致窗口成为 zombie。

zombie_timeout[seconds]

默认情况下,当窗口进程(例如,shell)退出时,screen 窗口将从窗口列表中删除。如果定义了 zombie 键(请参阅上面的 zombie 命令),也可以设置一个超时时间,screen 将尝试自动重新连接已死的 screen 窗口。

消息行

Screen 在消息行中显示信息消息和其他诊断信息。虽然此行被分布在屏幕底部显示,但也可以在编译期间定义为在屏幕顶部显示。如果您的终端在其 termcap 中定义了状态行,screen 将使用此状态行来显示其消息,否则将暂时覆盖当前屏幕的行,并且输出将被暂时中断。消息行会在几秒钟的延迟后自动删除,但也可以在终端没有状态行的情况下,通过开始键入来提前删除。

当前窗口中的应用程序可以通过 ANSI Privacy 消息控制序列,使用消息行功能。例如,在 shell 中,尝试如下操作:

echo '<esc>^Hello world from window '$WINDOW'<esc>\\'

其中 '<esc>' 是转义字符,'^' 是一个字面上的向上箭头,而 '\' 变成一个反斜杠。


窗口类型

Screen 提供三种不同的窗口类型。 新窗口通过 screen 命令创建(请参阅“自定义”章节中的相关条目)。screen 命令的第一个参数定义了要创建的窗口类型。 不同的窗口类型都是普通窗口的特殊情况。 它们被添加,以便能够有效地将 screen 用作具有 100 个或更多窗口的控制台多路复用器。

普通窗口包含一个 shell(默认,如果没有提供参数),或者任何可以从 shell 执行的系统命令(例如,slogin 等)。

如果将 tty(字符特殊设备)名称(例如 /dev/ttya)指定为第一个参数,则窗口将直接连接到该设备。 此窗口类型类似于 screen cu -l /dev/ttya。 需要对设备节点具有读写访问权限,并且会尝试对节点进行独占打开,以标记连接线路为繁忙状态。 允许使用可选参数,该参数由逗号分隔的标志列表组成,格式与 stty(1) 中使用的格式相同:

<baud_rate>

通常为 300、1200、9600 或 19200。 这会影响传输以及接收速度。

cs8 或 cs7

指定每字节传输八位(或七位)数据。

cstopb 或 -cstopb

指定每个字符使用两个停止位(使用“-”表示一个)。

parenb 或 -parenb

在输出中生成奇偶校验位,并在输入中期望奇偶校验位。

parodd 或 -parodd

设置奇数奇偶校验(或使用“-”表示偶数奇偶校验)。

ixon 或 -ixon

启用(或禁用)发送数据的软件流量控制(CTRL-S/CTRL-Q)。

ixoff 或 -ixoff

启用(或禁用)接收数据的软件流量控制。

istrip 或 -istrip

清除(或保留)每个接收字节中的八位。

您可以指定尽可能多的适用选项。 未指定的选项将导致终端驱动程序确定连接的参数值。 这些值取决于系统,可能是默认值或从先前的连接中保存的值。

对于 tty 窗口,info 命令会在状态行中显示一些调制解调器控制线路。 这些可能包括 RTSCTSDTRDSRCD 等。 这取决于可用的 ioctl() 和系统头文件,以及串行板的物理功能。 逻辑电平低的(非活动)信号在其名称前带有感叹号 (!),否则该信号为逻辑电平高(活动)。 硬件不支持但可用于 ioctl() 接口的信号通常显示为低电平。

当 CLOCAL 状态位为真时,整个调制解调器信号集都放在花括号 ({ 和 }) 内。 当设置 CRTSCTS 或 TIOCSOFTCAR 位时,CTSCD 信号将分别显示在括号中。

对于 tty 窗口,command break 命令会导致数据传输线路(TxD)在指定的时间段内变为低电平。 预期对方将其解释为中断信号。 发送中断时,不会发送任何数据,并且不会更改任何调制解调器控制线路。


如果第一个参数是 //telnet,则第二个参数应该是主机名,并且可以选择性地指定第三个参数作为 TCP 端口号(默认十进制 23)。Screen 将连接到远程主机上侦听的服务器,并使用 telnet 协议与该服务器进行通信。

对于 telnet 窗口,命令信息会在状态行的末尾,用方括号 ([ 和 ]) 显示有关连接的详细信息。

b      BINARY。连接处于二进制模式。

e      ECHO。本地回显已禁用。

c      SGA。连接处于“字符模式”(默认:”行模式“)。

t      TTYPE。远程主机已请求终端类型。Screen 会发送名称为 screen,除非另有指示(请参阅命令 `term`)。

w      NAWS。远程站点会收到有关窗口大小更改的通知。

f      LFLOW。远程主机将发送流量控制信息。(当前忽略。)

用于调试的附加标志是 x、t 和 n(XDISPLOC、TSPEED 和 NEWENV)。

对于 telnet 窗口,命令 break 会将 telnet 代码 IAC BREAK(十进制 243)发送到远程主机。

只有在编译 Screen 时定义了 ENABLE_TELNET 选项,此窗口类型才可用。

字符串转义

Screen 提供了一种转义机制,用于将当前时间等信息插入到消息或文件名中。转义字符是“%”,但有一个例外:在窗口的 hardstatus 中,使用“^%”(“^E”)代替。

以下是受支持的完整转义列表:

%      转义字符本身

E      如果已按下转义字符,则将 %? 设置为 true。

e      编码

f      窗口的标志,有关各种标志的含义,请参阅窗口。

F      如果窗口具有焦点,则将 %? 设置为 true。

h      窗口的 hardstatus

H      系统的hostname

n      窗口编号

P      如果当前区域处于剪贴/粘贴模式,则将 %? 设置为 true。

S      会话名称

s      窗口大小

t      窗口标题

u      在此窗口上的所有其他用户

w      所有窗口编号和名称。带有“-”限定符:最多到当前窗口;带有“+”限定符:从当前窗口之后的窗口开始。

W      所有窗口编号和名称,不包括当前窗口

x      在此窗口中运行的带参数的已执行命令

X      在此窗口中运行的无参数的已执行命令

?      从下一个“%?”开始的部分,仅当该部分中的“%”转义扩展为非空字符串时才显示。

:      “%?”的 else 部分

=      将字符串填充到显示屏的宽度(类似于 TeX 的 hfill)。如果指定了数字,则填充到窗口宽度的百分比。 “0”限定符告诉 Screen 将数字视为绝对位置。 可以通过添加“+”限定符来指定相对于最后一个绝对填充位置进行填充,或者通过使用“-”来相对于右边距进行填充。如果指定的位​​置位于当前位置之前,则填充将截断字符串。添加“L”限定符可更改此行为。

<      与 '%=' 相同,但仅执行截断,不填充空格

>      标记当前文本位置,以便进行下一次截断。当屏幕需要进行截断时,它会尝试以使标记的位置移动到输出区域指定百分比的位置的方式进行截断。(该区域从最后一个绝对填充位置开始,到截断运算符指定的位置结束。)'L' 限定符告诉屏幕用 '...' 标记截断的部分。

{      属性/颜色修饰符字符串,以下一个 } 结尾

`      用“反引号”命令的输出进行替换。长度限定符被滥用,用于标识命令之一。

'c' 和 'C' 转义字符可以带有 '0' 限定符,以使屏幕使用零而不是空格作为填充字符。'0' 限定符还使 '=' 转义字符使用绝对位置。'n' 和 '=' 转义字符可以带有长度限定符(例如 '%3n'),'D' 和 'M' 可以在前面加上 'L' 以生成长名称,'w' 和 'W' 也可以在前面加上 'L' 以显示窗口标志。

属性/颜色修饰符用于更改属性或颜色设置。其格式为: [属性修饰符] [颜色描述]。如果属性修饰符可能与颜色描述混淆,则必须通过更改类型指示符进行前缀。以下更改类型是已知的:

+      将指定的集合添加到当前属性

-      从当前属性中删除指定的集合

!      反转当前属性中的指定集合

=      将当前属性更改为指定的集合

属性集合可以指定为十六进制数字,也可以指定为以下字母的组合:

d      暗
u      下划线
b      粗体
r      反显
s      /突出显示
B      闪烁

颜色可以编码为十六进制数字,也可以编码为两个字母,指定所需的背景色和前景色(按该顺序)。以下颜色是已知的:

k      黑色
r      红色
g      绿色
y      黄色
b      蓝色
m      洋红色
c      青色
w      白色
d      默认颜色
.      保持颜色不变

字母的大写形式指定明亮的颜色。还可以使用伪颜色“i”仅设置亮度并保持颜色不变。 一个数字/字母颜色描述被视为前景色或背景色,具体取决于当前属性:如果设置了反显模式,则更改背景色而不是前景色。如果您不喜欢这种行为,请在颜色前面加上 ..。如果您希望对双字母颜色描述采用相同的行为,请也用 .. 进行前缀。 作为一种特殊情况,%{−} 恢复在上次更改之前设置的属性和颜色(即,弹出颜色更改堆栈中的一个级别)。

示例:


G      将颜色设置为亮绿色

+b r   使用粗体红色

= yd   清除所有属性,以默认颜色在黄色背景上书写。

%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<
当前窗口以白色在蓝色背景上显示。这可以与 hardstatus alwayslastline 一起使用。

%?%F%{.R.}%?%3n %t%? [%h]%?
显示窗口编号、标题以及窗口的 hardstatus(如果有)。如果这是活动焦点,则使用红色背景。这对于标题字符串很有用。

流控制

每个窗口都有一个流控制设置,用于确定 screen 如何处理 XON 和 XOFF 字符(以及可能的中断字符)。当流控制关闭时,screen 会忽略 XON 和 XOFF 字符,允许用户通过直接键入这些字符将它们发送到当前程序(例如,对于 emacs 编辑器很有用)。缺点是,来自普通程序的输出在响应 XOFF 时需要更长的时间才能暂停。当流控制打开时,XON 和 XOFF 字符用于立即暂停当前窗口的输出。你仍然可以发送这些字符到当前程序,但你必须使用适当的两个字符 screen 命令(通常是 C-a q (xon) 和 C-a s (xoff))。xon/xoff 命令也用于键入 C-s 和 C-q,以绕过终端拦截这些字符。

每个窗口都有一个初始流控制值,该值使用 -f 选项或 defflow .screenrc 命令进行设置。默认情况下,窗口设置为自动流切换。然后,可以使用 flow 命令(绑定到 "C-a f")在三种状态之间进行交互式切换:'固定开启'、'固定关闭'和'自动'。

自动流切换模式使用 TIOCPKT 模式处理流控制(就像 rlogin 那样)。如果 tty 驱动程序不支持 TIOCPKT,screen 会尝试根据应用程序键盘的当前设置来确定正确的模式——当启用时,流控制会关闭,反之亦然。当然,你仍然可以在需要时手动操作流控制。

如果你运行的是启用了流控制的 screen,并且发现按下中断键(通常是 Cc)不会立即中断显示,直到再滚动 6-8 行,请尝试使用中断选项运行 screen(将中断标志添加到你的 .screenrc 中的 flow 命令中,或者使用 -i 命令行选项)。这将导致 screen 刷新从中断程序中累积的输出。一个缺点是,虚拟终端的内存包含未刷新的输出版本,这在极少数情况下可能会导致输出出现轻微的不准确。例如,如果你切换屏幕并返回,或者使用 C-a l 更新屏幕,你将看到没有启用中断时的输出版本。此外,你可能需要在流控制打开的情况下关闭流控制(或者使用自动流模式以自动关闭它),以便运行需要你键入中断字符作为输入的程序,因为当流控制启用时,有可能中断从虚拟终端到物理终端的输出。如果发生这种情况,只需使用 C-a l 刷新屏幕即可恢复。尝试每种模式,并使用你觉得最舒适的模式。


标题(命名窗口)

你可以通过使用标题命令来自定义每个窗口在窗口显示中的名称(通过 windows 命令(C-a w)查看)。通常,显示的名称是窗口中创建的程序的实际命令名称。但是,有时区分具有相同名称的各个程序或更改名称以反映窗口的当前状态会很有用。

所有 shell 窗口的默认名称可以通过在 .screenrc 文件中使用 shelltitle 命令来设置,而所有其他窗口都是通过 screen 命令创建的,因此可以使用 -t 选项来设置它们的名称。交互式地,可以使用标题字符串转义序列(<esc>kname<esc>\)和 title 命令(C-a A)。前者可以由应用程序输出以在软件控制下控制窗口的名称,后者将在键入时提示输入名称。你还可以使用 title 命令将预定义的名称绑定到按键,以便快速设置名称,而无需提示。可以通过 defdynamictitledynamictitle 命令来控制通过此转义序列更改标题。

最后,screen 具有特定于 shell 的启发式方法,该方法通过将窗口的名称设置为 search|name 并安排将 null 标题转义序列作为提示符的一部分来启用。search 部分指定提示符末尾的搜索字符串,而 name 部分指定窗口的默认 shell 名称。如果名称以 : 结尾,screen 将认为当前在窗口中运行的命令,并将其添加到窗口的 shell 名称的末尾(例如 name:cmd)。否则,当前命令名称将取代 shell 名称,直到它正在运行时。

其工作原理如下:你必须修改 shell 提示符,以便在提示符中输出 null 标题转义序列(<esc>k<esc>\)。提示符的最后一部分必须与你为标题的 search 部分指定的字符串相同。设置完成后,screen 将使用标题转义序列来清除先前的命令名称,并准备好下一个命令。然后,当从 shell 接收到换行符时,将搜索提示符的末尾。如果找到,它将获取匹配字符串后的第一个单词,并将其用作命令名称。如果命令名称以 !%^ 开头,screen 将使用下一行(如果找到)上的第一个单词,而不是刚刚找到的名称。这有助于 csh 用户在使用作业控制或历史记录调用命令时获得更好的命令名称。

以下是一些 .screenrc 示例:

screen -t top 2 nice top

将此行添加到您的 .screenrc 中,将在窗口 2 中启动一个 nice 版本的 top 命令,并将其命名为 top,而不是 nice

shelltitle '> |csh'
screen 1

这些命令将启动一个具有给定 shelltitle 的 shell。指定的标题是一个自动标题,它期望提示符和键入的命令看起来像下面这样:

/usr/joe/src/dir> trn

(它在 > 之后查找命令名)。当命令运行时,窗口状态栏将显示名称 trn,并在命令完成时恢复为 csh

bind R screen -t '% |root:' su

将此命令添加到您的 .screenrc 中,会将按键序列 C-a R 绑定到 su 命令,并为其提供一个自动标题名称 root:。为了使此自动标题起作用,屏幕可能看起来像这样:

% !em
emacs file.c

这里,用户键入了 csh 历史命令 !em,它运行了之前输入的 emacs 命令。在命令执行期间,窗口状态栏将显示 root:emacs,并在其完成时恢复为仅 root:

bind o title
bind E title ""
bind u title (unknown)

第一个绑定没有参数,因此在您键入 Ca o 时,它会提示您输入标题。第二个绑定将清除自动标题的当前设置(C-a E)。第三个绑定会将当前窗口的标题设置为 (unknown)(C-a u)。

在将空标题转义序列添加到您的提示符中时,需要记住一件事,即一些 shell(如 csh)会将所有非控制字符都算作提示符长度的一部分。如果这些不可见字符不是 8 的倍数,那么在制表符上回退会导致显示不正确。一种解决方法是使用如下提示符:

set prompt='^[[0000m^[k^[\% '

转义序列 <esc\>[0000m 不仅可以规范化字符属性,还可以将所有零的长度向上调整到 8。Bash 用户可能希望在 PROMPT_COMMAND 中回显此转义序列:

PROMPT_COMMAND='printf "\033k\033\134"'

(我使用 \134 来输出一个 \,因为 bash v1.04 中存在一个错误)。

虚拟终端

屏幕会话中的每个窗口都模拟一个 VT100 终端,并添加了一些额外的功能。VT100 模拟器是硬编码的,不能模拟其他终端类型。通常,屏幕会尝试模拟尽可能多的 VT100/ANSI 标准。但是,如果您的终端缺少某些功能,则模拟可能不完整。在这种情况下,屏幕需要告诉应用程序某些功能缺失。在具有 termcap 的机器上,这不是问题,因为屏幕可以使用 $TERMCAP 变量来自定义标准屏幕 termcap。

但是,如果您通过 rlogin 登录到另一台机器,或者您的机器仅支持 terminfo,则此方法将失败。因此,屏幕提供了一种处理这些情况的方法。工作原理如下:

当屏幕尝试为自身确定终端名称时,它首先查找一个名为 screen.<term> 的条目,其中 <term>$TERM 变量的内容。如果不存在这样的条目,屏幕将尝试 screen(或者,如果终端是宽的(132 列或更多),则尝试 screen-w)。如果甚至找不到此条目,则将使用 vt100 作为替代。


其思想是,如果你的终端不支持一个重要的功能(例如,删除字符或清除到 EOS),你可以为 screen 构建一个新的 termcap/terminfo 条目(名为 screen.<dumbterm>),并在该条目中禁用此功能。如果将此条目安装在你的机器上,你就可以执行 rlogin,同时仍然保留正确的 termcap/terminfo 条目。终端名称将放入所有新窗口的 $TERM 变量中。Screen 还会设置 $TERMCAP 变量,以反映虚拟终端所模拟的功能。请注意,但是,在系统使用 terminfo 数据库的机器上,此变量不起作用。此外,还会为每个窗口设置 $WINDOW 变量,表示窗口编号。

虚拟终端所支持的实际功能集取决于物理终端所支持的功能。例如,如果物理终端不支持下划线模式,则 screen 不会将 usue 功能放入窗口的 $TERMCAP 变量中。但是,为了运行 screen,终端必须支持最少数量的功能;即滚动、清除屏幕和直接光标寻址(此外,screen 不在硬拷贝终端或会进行重叠打印的终端上运行)。

你还可以通过使用 termcap .screenrc 命令,或者在启动之前定义 $SCREENCAP 变量来定制 screen 使用的 $TERMCAP 值。当定义了后者时,其值将逐字复制到每个窗口的 $TERMCAP 变量中。这可以是完整的终端定义,也可以是定义终端 screen(和/或 screen-w)的文件名。

请注意,如果系统使用 terminfo 数据库而不是 termcap,则 screen 会遵守 terminfo .screenrc 命令。

当终端的 termcap 条目中存在布尔值 G0 功能时,screen 的终端仿真支持多个字符集。这允许应用程序使用 VT100 图形字符集或国家字符集。支持以下 ISO 2022 控制功能:锁定移位 G0 (SI)、锁定移位 G1 (SO)、锁定移位 G2、锁定移位 G3、单移位 G2 和单移位 G3。当创建或重置虚拟终端时,ASCII 字符集被指定为 G0 到 G3。当存在 G0 功能时,screen 会评估 S0E0C0 功能(如果存在)。S0 是终端用于启用和启动图形字符集而不是 SI 的序列。E0 是 SO 的相应替代。C0 提供一个逐字符转换字符串,该字符串在半图形模式期间使用。此字符串的构建方式与 terminfo 功能 acsc 类似。

当终端的 termcap 条目中存在 popf 功能时,在 screen 窗口中运行的应用程序可以将输出发送到终端的打印机端口。 这允许用户在一个窗口中运行一个应用程序,并将输出发送到连接到终端的打印机,同时所有其他窗口仍然处于活动状态(打印机端口会为每个输出块启用和禁用)。 作为副作用,在不同窗口中运行的程序可以同时将输出发送到打印机。 发送到打印机的 data 不会在窗口中显示。 info 命令会显示以 PRIN 开头的一行,表示打印机处于活动状态。

Screen 为每个窗口维护一个 hardstatus 行。 当选择一个窗口时,显示的 hardstatus 将更新以匹配窗口的 hardstatus 行。 如果显示没有 hardstatus,则该行将显示为标准的 screen 消息。 hardstatus 行可以使用 ANSI 应用程序程序命令 (APC) 进行更改:ESC_<string>ESC\. 作为对 xterm 用户的便利,序列 ESC]0..2;<string>^G 也可以接受。

某些功能仅在虚拟终端的 $TERMCAP 变量中设置,如果物理终端可以有效地实现这些功能。 例如,dl(删除行)仅在终端支持删除行本身或滚动区域时才放入 $TERMCAP 变量中。 请注意,这可能会引起混淆,当会话重新连接到不同的终端时,因为 $TERMCAP 的值不能由父进程修改。

“备用屏幕”功能默认情况下未启用。 设置 altscreen .screenrc 命令以启用它。

以下是 screen 识别的控制序列列表。 (V) 和 (A) 分别表示 VT100 特定的功能和 ANSI 或 ISO 特定的功能。

ESC E                      下一行

ESC D                      索引

ESC M                      反向索引

ESC H                      水平制表符设置

ESC Z                      发送 VT100 标识字符串

ESC 7                 (V)  保存光标和属性

ESC 8                 (V)  恢复光标和属性

ESC [s                (A)  保存光标和属性

ESC [u                (A)  恢复光标和属性

ESC c                      重置为初始状态

ESC g                      视觉铃声

ESC Pn p                   光标可见性 (97801)

Pn = 6                     不可见

Pn = 7                     可见

ESC =                 (V)  应用程序小键盘模式

ESC >                 (V)  数字小键盘模式

ESC # 8               (V)  用 E 填充屏幕

ESC \                 (A)  字符串终止符

ESC ^                 (A)  隐私消息字符串(消息行)

ESC !                      全局消息字符串(消息行)

ESC k                      又名:定义字符串

ESC P                 (A)  设备控制字符串。直接将字符串输出到主机终端,不进行解释。

ESC _                 (A)  应用程序命令(硬状态)

ESC ] 0 ; string ^G   (A)  操作系统命令(硬状态,xterm 标题技巧)

ESC ] 83 ; cmd ^G     (A)  执行 screen 命令。只有当 screen 编译了多用户支持时,此命令才有效。伪用户 :window: 用于检查访问控制列表。使用 addacl :window: -rwx #? 创建一个没有权限的用户,并仅允许所需的命令。

Control-N             (A)  锁定 Shift G1 (SO)

Control-O             (A)  锁定 Shift G0 (SI)

ESC n                 (A)  锁定 Shift G2

ESC o                 (A)  锁定 Shift G3

ESC N                 (A)  单次 Shift G2

ESC O                 (A)  单次 Shift G3

ESC ( Pcs             (A)  将字符集指定为 G0

ESC ) Pcs             (A)  将字符集指定为 G1

ESC * Pcs             (A)  将字符集指定为 G2

ESC + Pcs             (A)  将字符集指定为 G3

ESC [ Pn ; Pn H            直接光标寻址

ESC [ Pn ; Pn f            与上面相同

ESC [ Pn J                 擦除显示

Pn = None 或 0             从光标到屏幕末尾

Pn = 1                     从屏幕开头到光标

Pn = 2                     整个屏幕

ESC [ Pn K                 擦除行

Pn = None 或 0             从光标到行末

Pn = 1                     从行首到光标

Pn = 2                     整行

ESC [ Pn X                 擦除字符

ESC [ Pn A                 光标向上

ESC [ Pn B                 光标向下

ESC [ Pn C                 光标向右

ESC [ Pn D                 光标向左

ESC [ Pn E                 光标移动到下一行

ESC [ Pn F                 光标移动到上一行

ESC [ Pn G                 光标水平位置

ESC [ Pn `                 与上面相同

ESC [ Pn d                 光标垂直位置

ESC [ Ps ;...; Ps m        选择图形渲染

Ps = None 或 0             默认渲染

Ps = 1                     粗体

Ps = 2                (A)  浅色

Ps = 3                (A)  突出显示模式(ANSI:斜体)

Ps = 4                     下划线

Ps = 5                     闪烁

Ps = 7                     负像

Ps = 22               (A)  正常亮度

Ps = 23               (A)  突出显示模式关闭(ANSI:斜体关闭)

Ps = 24               (A)  不带下划线

Ps = 25               (A)  不闪烁

Ps = 27               (A)  正像

Ps = 30               (A)  前景色:黑色

Ps = 31               (A)  前景色:红色

Ps = 32               (A)  前景色:绿色

Ps = 33               (A)  前景色:黄色

Ps = 34               (A)  前景色:蓝色

Ps = 35               (A)  前景色洋红色

Ps = 36               (A)  前景色青色

Ps = 37               (A)  前景色白色

Ps = 39               (A)  前景色默认

Ps = 40               (A)  背景色黑色

Ps = ...

Ps = 49               (A)  背景色默认

ESC [ Pn g                 制表符清除

Pn = None 或 0             清除当前位置的制表符

Pn = 3                     清除所有制表符

ESC [ Pn ; Pn r       (V)  设置滚动区域

ESC [ Pn I            (A)  水平制表符

ESC [ Pn Z            (A)  向后制表符

ESC [ Pn L            (A)  插入行

ESC [ Pn M            (A)  删除行

ESC [ Pn @            (A)  插入字符

ESC [ Pn P            (A)  删除字符

ESC [ Pn S                 滚动区域向上滚动

ESC [ Pn T                 滚动区域向下滚动

ESC [ Pn ^                 与上面相同

ESC [ Ps ;...; Ps h        设置模式

ESC [ Ps ;...; Ps l        重置模式

Ps = 4                (A)  插入模式

Ps = 20               (A)  自动换行模式

Ps = 34                    普通光标可见性

Ps = ?1               (V)  应用程序光标键

Ps = ?3               (V)  将终端宽度更改为 132 列

Ps = ?5               (V)  反转视频

Ps = ?6               (V)  原点模式

Ps = ?7               (V)  自动换行模式

Ps = ?9                    X10 鼠标跟踪

Ps = ?25              (V)  可见光标

Ps = ?47              (V)  备用屏幕(旧 xterm 代码)

Ps = ?1000            (V)  VT200 鼠标跟踪

Ps = ?1047                 备用屏幕(新 xterm 代码)

Ps = ?1049                 备用屏幕(新 xterm 代码)

ESC [ 5 i             (A)  开始中继到打印机(ANSI 媒体复制)

ESC [ 4 i             (A)  停止中继到打印机(ANSI 媒体复制)

ESC [ 8 ; Ph ; Pw t        调整窗口大小为 `Ph` 行和 `Pw` 列(SunView 特殊)

ESC [ c                    发送 VT100 标识字符串

ESC [ x                    发送终端参数报告

ESC [ > c                  发送 VT220 二级设备属性字符串

ESC [ 6 n                  发送光标位置报告

输入转换

为了实现完整的 VT100 仿真,屏幕必须检测到输入流中的字符序列是由用户键盘上的按键生成的,并插入 VT100 样式的转义序列。屏幕通过一种非常灵活的方式来实现这一点,即可以映射任意命令到任意字符序列。对于标准的 VT100 仿真,命令将始终将字符串插入到窗口的输入缓冲区中(另请参见命令表中的命令填充)。由于在与不同终端类型重新连接后,按键生成的序列可能会发生变化,因此可以绑定命令到键的 termcap 名称。屏幕将在每次重新连接后插入正确的绑定。有关语法和示例的更多信息,请参见 bindkey 命令。

以下是默认按键绑定的表格。第四列是当键盘切换到应用程序模式时执行的命令。

┌─────────────────┬──────────────┬──────────┬──────────┐
│ 键名            │ Termcap 名称 │ 命令      │ 应用模式 │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 光标向上        │ ku           │ \033[A   │ \033OA   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 光标向下        │ kd           │ \033[B   │ \033OB   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 光标向右        │ kr           │ \033[C   │ \033OC   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 光标向左        │ kl           │ \033[D   │ \033OD   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 0        │ k0           │ \033[10~ │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 1        │ k1           │ \033OP   │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 2        │ k2           │ \033OQ   │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 3        │ k3           │ \033OR   │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 4        │ k4           │ \033OS   │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 5        │ k5           │ \033[15~ │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 6        │ k6           │ \033[17~ │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 7        │ k7           │ \033[18~ │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 8        │ k8           │ \033[19~ │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 9        │ k9           │ \033[20~ │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 10       │ k;           │ \033[21~ │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 11       │ F1           │ \033[23~ │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 功能键 12       │ F2           │ \033[24~ │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ Home            │ kh           │ \033[1~  │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ End             │ kH           │ \033[4~  │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ Insert          │ kI           │ \033[2~  │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ Delete          │ kD           │ \033[3~  │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ Page up         │ kP           │ \033[5~  │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ Page down       │ kN           │ \033[6~  │          │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 0        │ f0           │ 0        │ \033Op   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 1        │ f1           │ 1        │ \033Oq   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 2        │ f2           │ 2        │ \033Or   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 3        │ f3           │ 3        │ \033Os   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 4        │ f4           │ 4        │ \033Ot   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 5        │ f5           │ 5        │ \033Ou   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 6        │ f6           │ 6        │ \033Ov   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 7        │ f7           │ 7        │ \033Ow   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 8        │ f8           │ 8        │ \033Ox   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 9        │ f9           │ 9        │ \033Oy   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 +        │ f+           │ +        │ \033Ok   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 -        │ f-           │ -        │ \033Om   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 *        │ f*           │ *        │ \033Oj   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 /        │ f/           │ /        │ \033Oo   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 =        │ fq           │ =        │ \033OX   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 .        │ f.           │ .        │ \033On   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 ,        │ f,           │ ,        │ \033Ol   │
├─────────────────┼──────────────┼──────────┼──────────┤
│ 小键盘 回车    │ fe           │ \015     │ \033OM   │
└─────────────────┴──────────────┴──────────┴──────────┘

特殊终端功能

以下表格描述了所有被 screen 识别的终端功能,这些功能不在 termcap(5) 手册中。你可以将这些功能放置在你的 termcap 条目中(位于 /etc/termcap),或者在你的 screenrc 文件中使用 termcapterminfotermcapinfo 命令来使用它们。通常,将这些功能放置在 terminfo 数据库中是不可能的。

LP (bool) 终端具有 VT100 风格的边距(“魔术边距”)。请注意,此功能已过时,因为 screen 使用标准的 'xn'。

Z0 (str) 将宽度更改为 132 列。

Z1 (str) 将宽度更改为 80 列。

WS (str) 调整显示大小。此功能将所需的宽度和高度作为参数。SunView(tm) 示例:`\E[8;%d;%dt`。

NF (bool) 终端不需要流控制。直接将 ^S 和 ^Q 发送到应用程序。与 'nx' 相反。

G0 (bool) 终端可以处理 ISO 2022 字体选择序列。

S0 (str) 将字符集 'G0' 切换到指定的字符集。默认值为 `\E(%.`。

E0 (str) 将字符集 'G0' 切换回标准字符集。默认值为 `\E(B`。

C0   (str)   使用字符串作为字体 '0' 的转换表。有关更多详细信息,请参见 'ac' 功能。

CS   (str)   将光标键切换到应用程序模式。

CE   (str)   将光标键切换回正常模式。

AN   (bool)  启用自动清除。有关更多详细信息,请参见 'autonuke' 命令。

OL   (num)   设置输出缓冲区限制。有关更多详细信息,请参见 'obuflimit' 命令。

KJ   (str)   设置终端的编码。有关有效编码,请参见 'encoding' 命令。

AF   (str)   以 ANSI 兼容的方式更改字符前景颜色。此功能几乎总是设置为 '\E[3%dm'(在 terminfo 机器上为 '\E[3%p1%dm')。

AB   (str)   与 'AF' 相同,但更改背景颜色。

AX   (bool)  是否理解 ANSI 设置默认前景色/背景色 (\E[39m / \E[49m)。

XC   (str)   描述一种基于当前字体和终端类型的字符到字符串的转换。更多详细信息请参见下一部分。

XT   (bool)  终端是否理解特殊的 xterm 序列(OSC、鼠标跟踪)。

C8   (bool)  终端是否需要使用粗体来显示高强度颜色(例如 Eterm)。

TF   (bool)  添加缺少的 termcap/info 条目功能。(默认设置)。

字符转换

Screen 具有强大的机制,可以根据当前字体和终端类型将字符转换为任意字符串。如果希望即使在将更多不常用的字符分散到几个国家/地区语言字体页面的终端上,也能使用通用的标准字符集(例如 ISO8851-latin1),请使用此功能。

语法:
XC=<charset-mapping>{,,<charset-mapping>}
<charset-mapping> := <designator><template>{,<mapping>}
<mapping> := <char-to-be-mapped><template-arg>

花括号中的内容可以重复任意次数。

一个 <charset-mapping> 告诉 Screen 如何将字体 <designator>('B':ASCII、'A':英国、'K':德国等)中的字符映射到字符串。每个 <mapping> 描述了单个字符将被转换为哪个字符串。使用模板机制,因为大多数情况下,代码有很多共同之处(例如,用于切换到另一个字符集以及切换回的字符串)。每个 <template> 中的 '%' 都会被指定的 <template-arg> 替换。如果字符串完全不同,则将 '%' 视为模板,并将完整字符串放在 <template-arg> 中。添加了引用机制,以便可以使用真实的 '%'。'\ ' 字符引用特殊字符 '\'、'%' 和 ' '。

这是一个例子:

termcap hp700 'XC=B\E(K%\E(B,\304[,\326\\\\,\334]'

这告诉 Screen 如何将 ISOlatin1(字符集 'B')在具有德语字符集的 hp700 终端上的大写变音字符进行转换。'\304' 被转换为 '\E(K[\E(B',依此类推。请注意,在构建内部查找表之前,此行将被解析 *三次*,因此需要大量的引用才能创建一个单字符 '\'。

添加了另一个扩展,以允许更多的模拟:如果映射转换了未引用的 '%' 字符,则每当 Screen 切换到相应的 <designator> 时,它都将被发送到终端。在这种特殊情况下,模板被假定为只是 '%',因为字符集切换序列和字符映射通常没有太多的共同之处。

此示例展示了扩展的一种用法:

termcap xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334'

此处,在 xterm 上模拟了德语 ('K') 字符集的一部分。如果 screen 需要切换到 'K' 字符集,则会发送 '\E(B' 到终端,即使用 ASCII 字符集。模板只是 '%', 因此映射非常简单:'[' 映射到 '\304','\' 映射到 '\326','[' 映射到 '\334'。

环境变量

COLUMNS        终端上的列数(覆盖 termcap 条目)。
HOME           查找 .screenrc 的目录。
LINES          终端上的行数(覆盖 termcap 条目)。
LOCKPRG        Screen 锁屏程序。
NETHACKOPTIONS 启用 nethack 选项。
PATH           用于查找要运行的程序。
SCREENCAP      用于自定义终端的 TERMCAP 值。
SCREENDIR      备用套接字目录。
SCREENRC       备用用户 screenrc 文件。
SHELL          用于打开窗口的默认 shell 程序(默认 /bin/sh)。 另请参见 .screenrc 命令。
STY            备用套接字名称。
SYSSCREENRC    备用系统 screenrc 文件。
TERM           终端名称。
TERMCAP        终端描述。
WINDOW         窗口创建时的窗口编号。

文件

.../screen-4.?.??/etc/screenrc
.../screen-4.?.??/etc/etcscreenrc screen 发行包中包含的私有和全局初始化文件的示例。
$SYSSCREENRC
/etc/screenrc                     screen 初始化命令
$SCREENRC
$HOME/.screenrc                   在 /etc/screenrc 之后读取
$SCREENDIR/S-<登录名>
/run/screen/S-<登录名>             套接字目录(默认)
/usr/tmp/screens/S-<登录名>        备用套接字目录。
<套接字目录>/.termcap             由 "termcap" 输出函数写入
/usr/tmp/screens/screen-exchange 或
/tmp/screen-exchange              screen 进程间通信缓冲区
hardcopy.[0-9]                    由 hardcopy 函数创建的屏幕图像
screenlog.[0-9]                   由 log 函数创建的输出日志文件
/usr/lib/terminfo/?/* 或
/etc/termcap                      终端功能数据库
/run/utmp                         登录记录
$LOCKPRG                          锁定终端的程序。

作者

最初由 Oliver Laumann 创建。长期由 Juergen Weigert、Michael Schroeder、Micah Cowan 和 Sadrul Habib Chowdhury 维护和开发。自 2015 年以来,由 Amadeusz Slawinski <_> 和 Alexander Naumov <_> 维护和开发。

版权所有

版权所有 (c) 2018-2023 Alexander Naumov <_> Amadeusz Slawinski <_> 版权所有 (c) 2015-2017 Juergen Weigert <_> Alexander Naumov <_> Amadeusz Slawinski <_> 版权所有 (c) 2010-2015 Juergen Weigert <_> Sadrul Habib Chowdhury <_> 版权所有 (c) 2008, 2009 Juergen Weigert <_> Michael Schroeder <_> Micah Cowan <_> Sadrul Habib Chowdhury <_> 版权所有 (C) 1993-2003 Juergen Weigert <_> Michael Schroeder <_> 版权所有 (C) 1987 Oliver Laumann


本程序是自由软件;您可以根据 GNU 通用公共许可证的条款(由自由软件基金会发布),重新分发和/或修改它;可以是版本 3,或者(如果您愿意)任何更高版本。 本程序以希望它对您有所帮助为目的进行分发,但不提供任何担保;即使没有暗示的适销性和特定用途适用性的担保。请参阅 GNU 通用公共许可证以获取更多详细信息。 您应该已经收到一份 GNU 通用公共许可证的副本,以及本程序(请参阅 COPYING 文件);如果没有,请写信给自由软件基金会,地址为:59 Temple Place - Suite 330 Boston, MA 02111-1307, USA。

贡献者

Vincent Lefevre <_>, Carl Drougge <_>, Maarten ter Huurne <_>, Jussi Kukkonen <_>, Eric S. Raymond <_>, Thomas Renninger <_>, Axel Beckert <_>, Ken Beal <_>, Rudolf Koenig <_>, Toerless Eckert <_>, Wayne Davison <_>, Patrick Wolfe <_>, Bart Schaefer <_>, Nathan Glasser <_>, Larry W. Virden <_>, Howard Chu <_>, Tim MacKenzie <_>, Markku Jarvinen <_>, Marc Boucher <_>, Doug Siebert <_>, Ken Stillson <_>, Ian Frechett <_>, Brian Koehmstedt <_>, Don Smith <_>, Frank van der Linden <_>, Martin Schweikert <_>, David Vrona <_>, E. Tye McQueen <_>, Matthew Green <_>, Christopher Williams <_>, Matt Mosley <_>, Gregory Neil Shapiro <_>, Johannes Zellner <_>, Pablo Averbuj <_>.

可用性

screen 的最新官方版本可以通过匿名 ftp 从 ftp.gnu.org/gnu/screen/ 或任何其他 GNU 发行站点获取。screen 的主页是 https://savannah.gnu.org/projects/screen/,git 仓库是 https://git.savannah.gnu.org/cgit/screen.git。 如果您想提供帮助,请发送一封邮件到 _.

错误

`dm'(删除模式)和 `xs' 没有被正确处理(它们被忽略)。`xn' 被视为一个 magic-margin 指示符。

Screen 不知道双高或双宽字符。但是,这是 vttest 允许失败的唯一区域。

在重新连接到不同终端类型时,无法更改环境变量 $TERMCAP。

对 terminfo 系统的支持非常有限。将额外的功能添加到 $TERMCAP 可能没有任何效果。

Screen 不使用硬件制表符。

为了能够正确更改每个窗口的 tty 设备文件的所有者,Screen 必须安装为 set-uid,且所有者为 root。 此外,可能需要特殊权限才能写入文件 /run/utmp。

当使用 SIGKILL 杀死 screen 时,/run/utmp 中的条目不会被删除。 这会导致某些程序(如“w”或“rwho”)显示用户已登录,但实际上用户并没有登录。

当您的 tty 没有 utmp 条目时,屏幕可能会显示一个奇怪的警告。

当调制解调器线路挂断时,除非设备驱动程序配置为发送 HANGUP 信号,否则屏幕可能不会自动分离(或退出)。要分离屏幕会话,请使用 -D 或 -d 命令行选项。

如果设置了密码,则命令行选项 -d 和 -D 仍然会分离会话,而无需提示。

breaktype 和 defbreaktype 都更改了所有终端设备使用的中断生成方法。第一个应该更改窗口特定的设置,而后者应该只更改新窗口的默认设置。

当连接到多用户会话时,用户的 .screenrc 文件不会被读取。每个用户的个人设置必须包含在启动会话的 .screenrc 文件中,或者必须手动更改。

拥有丰富的想象力对于充分利用所有功能最有帮助。

请将错误报告、补丁、增强功能、T 恤、钱、啤酒和披萨发送到 _。

参阅

termcap(5), utmp(5), vi(1), captoinfo(1), tic(1), tty(4), pty(7)