/usr/sbin/ttymon -g [-d device] [-h] [-t timeout] [-l ttylabel] [-p prompt] [-m modules] [-T termtype]
ttymon 是一个基于 STREAMS 的 TTY 端口监视器。其功能是监视端口,设置终端模式、波特率以及端口的线路规程,以及将用户或应用程序连接到与端口关联的服务。每个 ttymon 实例监视一个端口(在启动时指定)。启动一个 ttymon 实例时,ttymon 会先初始化线路规程(如果已指定)以及速度和终端设置。对于在 /etc/logindevperm 中有条目的端口,要设置设备所有者、组和权限。(请参见 logindevperm(4)。)用于初始化的值取自 TTY 文件中的相应条目。此文件通过 sttydefs(1M) 命令维护。端口上的缺省线路规程一般通过 Autopush Facility 的 autopush(1M) 命令设置。
然后,ttymon 写入提示,并等待用户输入。如果用户通过按 BREAK 键指示速度不合适,则 ttymon 将尝试下一个速度,并再次写入提示。收到有效的输入时,ttymon 会创建一个 utmpx 条目(请参见 utmpx(4)),并对端口的登录服务执行 exec。有效输入包含一个至少由一个非换行符字符组成的字符串,并用回车结束。
如果为端口启用了 autobaud,则 ttymon 将尝试自动确定端口上的波特率。用户必须按回车,之后 ttymon 才能识别波特率并输出提示。当前,可通过 autobaud 确定的波特率包括 110、1200、2400、4800 和 9600。
调用 ttymon 的主 smf(5) 服务是 svc:/system/console-login,它可以有多个服务实例。下文中有对实例的更详细介绍。该服务提供了属性组 ttymon 中的大量属性来控制调用,如下所示:
NAME TYPE TTYMON OPTION ---------------------------------------------------------- device astring [-d device] nohangup boolean [-h] label astring [-l label] modules astring [-m module1,module2] prompt astring [-p prompt] timeout count [-t timeout] terminal_type astring [-T termtype]
如果某个值为空字符串或者设置为零的整数,则不会将该选项传递到 ttymon 调用。
该缺省实例始终代表在系统硬件控制台上提供登录的 ttymon。
有关如何修改系统控制台设置的示例,请参见“示例”部分。
提供的其他服务实例用于系统的虚拟控制台。如果虚拟控制台不可用,则会自动禁用这些服务。请参见 vtdaemon(1M)。
svc:/system/console-login:terma 和 svc:/system/console-login:termb 是为了方便而提供的,可以帮助用户设置附加端口 /dev/term/a 和 /dev/term/b 的登录服务。缺省情况下这两个服务处于禁用状态。
用户可以为增加的设备配置额外的服务实例。可通过以下方式之一完成此操作:
使用 svccfg(1M) 手动创建服务实例。
在服务配置文件中创建服务(请参见 smf(5))。
为增加的服务实例创建服务清单。
有关使用 svccfg 手动配置服务的示例,请参见“示例”部分。
在大多数情况下,当控制台登录服务实例配置错误时,它会将自己转换到维护状态。使用 svcs –l(请参见 svcs(1))可确定服务日志文件的位置,并可在日志中查询其他信息。
在某些出错情况下,服务可能会无限次地重新派生。使用 svcadm(1M) 可禁用服务,然后在服务日志中查看其他消息或信息以帮助解决问题。
ttymon 使用 pam(3PAM) 来进行会话管理。PAM 配置策略(在 /etc/pam.conf 中指定或在 /etc/pam.d/ 中按服务文件配置)指定要用于 ttymon 的模块。下面是部分 pam.conf 文件,其中包含针对使用 UNIX 会话管理模块的 ttymon 条目:
ttymon session required /usr/lib/security/pam_unix_session.so.1
使用 /etc/pam.d/ 的等效 PAM 配置将是 /etc/pam.d/ttymon 中的以下条目:
session required /usr/lib/security/pam_unix_session.so.1
如果在 /etc/pam.conf 中没有 ttymon 服务的条目,且不存在 /etc/pam.d/ttymon 文件,那么将使用 /etc/pam.conf 中的 "other" 服务的条目。如果 /etc/pam.conf 中没有 "other" 服务的条目,那么将使用 /etc/pam.d/other 中的条目。
支持以下选项:
–g 选项是出于历史需要而设置的。
device 是 ttymon 要连接到的端口的全路径名。如果未指定此选项,则调用进程必须将文件描述符 0 设置为 TTY 端口。
如果未设置 -h 标志,ttymon 将强制挂断线路(将速度设置为零),然后将速度设置为缺省值或指定速度。
ttylabel 是指向 ttydefs 文件中的速度和 TTY 定义的链接。此定义可确定 ttymon 的初始运行速度、初始 TTY 设置以及用户通过按 BREAK 键指示速度不合适时要尝试的下一个速度。缺省速度为 9600 波特。
在初始化端口时,ttymon 将弹出端口上的所有模块,然后按指定的顺序推送 modules。modules 是以逗号分隔的可推送模块列表。端口上的缺省模块通常通过 Autopush 工具设置。
允许用户指定提示字符串。缺省提示符为 Login:。
指定如果在发送提示之后 timeout 秒内没有键入任何内容,就应退出 ttymon。
将 TERM 环境变量设置为 termtype。
启用详细消息。
以下示例为系统控制台 ttymon 调用设置终端类型 (–T) 选项的值:
# svccfg -s svc:/system/console-login:default \ "setprop ttymon/terminal_type = xterm" # svcadm refresh svc:/system/console-login:default示例 2 为增加的串行设备创建服务实例
在此示例中,用户希望配置一个额外的 svc:/system/console-login 服务实例,以便在通过 USB 串行适配器连接的终端上提供登录服务。假定存在的 USB 串行端口为 /dev/term/1,用户计划将一个 vt100 终端连接到该端口上。在这种情况下,可以将服务实例命名为 term1(或任何其他名称)并进行如下定义:
# svccfg -s svc:/system/console-login "add term1" # SVC=svc:/system/console-login:term1 # svccfg -s $SVC "addpg ttymon application" # svccfg -s $SVC "setprop ttymon/device = /dev/term/1" # svccfg -s $SVC "setprop ttymon/terminal_type = vt100" # svcadm refresh $SVC # svcadm enable $SVC
如果未在此环境中设置任何 LC_* 变量(LC_CTYPE、LC_MESSAGES、LC_TIME、LC_COLLATE、LC_NUMERIC 和 LC_MONETARY)(请参见 environ(5)),则每个对应的语言环境类别的 ttymon 操作行为由 LANG 环境变量的值确定。如果设置了 LC_ALL,则会使用其内容覆盖 LANG 和其他 LC_* 变量。如果未在环境中设置以上任何变量,ttymon 的行为方式将取决于 “C”(美国样式)语言环境。
确定 ttymon 如何处理字符。LC_CTYPE 设置为有效值时,ttymon 可以显示和处理包含适用于该语言环境的有效字符的文本和文件名。ttymon 可以显示和处理扩展 Unix 代码 (Extended Unix Code, EUC) 字符,其中任何单个字符的宽度可以为 1、2 或 3 个字节。ttymon 也可以处理宽度为 1、2 或更多列的 EUC 字符。在 “C” 语言环境中,只有 ISO 8859-1 中的字符有效。
包含 login(1) 和 ttymon 用于在登录或退出控制台设备时更改设备的所有者、组以及权限的信息。
有关下列属性的说明,请参见 attributes(5):
|
svcs(1)、ct(1C)、cu(1C)、autopush(1M)、sttydefs(1M)、svcadm(1M)、svccfg(1M)、uucico(1M)、vtdaemon(1M)、pam(3PAM)、logindevperm(4)、pam.conf(4)、utmpx(4)、attributes(5)、environ(5)、pam_authtok_check(5)、pam_authtok_get(5)、pam_authtok_store(5)、pam_dhkeys(5)、pam_passwd_auth(5)、pam_unix_account(5)、pam_unix_auth(5)、pam_unix_session(5)、smf(5)
ttymon 以前是服务访问工具的一个组件,由 sac(服务访问控制器)调用。此 Solaris 发行版已经删除了该工具,并对相关部分执行了到 SMF 的转换。
如果某个端口由多个 ttymon 监视,则 ttymon 可能会以竞争输入的方式发出提示消息。
有可能出现两个 svc:/system/console-login 服务实例引用同一个底层设备的情况。例如,如果系统的硬件控制台(通过固件中的设置或自动检测)连接到串行端口 A,则 svc:/system/console-login:default 和 svc:/system/console-login:terma 服务将引用同一个底层硬件设备。在定义或启用额外的服务实例时应小心避免这种情况,否则两个 ttymon 将竞争输入。