手册页部分 1M: 系统管理命令

退出打印视图

更新时间: 2014 年 7 月
 
 

ttymon(1M)

名称

ttymon - 终端端口的端口监视器

用法概要

/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 确定的波特率包括 1101200240048009600

SMF 服务说明

调用 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 调用。

svc:/system/console-login:default

该缺省实例始终代表在系统硬件控制台上提供登录的 ttymon

有关如何修改系统控制台设置的示例,请参见“示例”部分。

svc:/system/console-login:{vt2, vt3, vt4, vt5, vt6}

提供的其他服务实例用于系统的虚拟控制台。如果虚拟控制台不可用,则会自动禁用这些服务。请参见 vtdaemon(1M)

svc:/system/console-login:{terma, termb}

svc:/system/console-login:termasvc:/system/console-login:termb 是为了方便而提供的,可以帮助用户设置附加端口 /dev/term/a/dev/term/b 的登录服务。缺省情况下这两个服务处于禁用状态。

创建其他实例

用户可以为增加的设备配置额外的服务实例。可通过以下方式之一完成此操作:

  • 使用 svccfg(1M) 手动创建服务实例。

  • 在服务配置文件中创建服务(请参见 smf(5))。

  • 为增加的服务实例创建服务清单。

有关使用 svccfg 手动配置服务的示例,请参见“示例”部分。

SMF 服务错误

在大多数情况下,当控制台登录服务实例配置错误时,它会将自己转换到维护状态。使用 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

–g 选项是出于历史需要而设置的。

–ddevice

devicettymon 要连接到的端口的全路径名。如果未指定此选项,则调用进程必须将文件描述符 0 设置为 TTY 端口。

–h

如果未设置 -h 标志,ttymon 将强制挂断线路(将速度设置为零),然后将速度设置为缺省值或指定速度。

–lttylabel

ttylabel 是指向 ttydefs 文件中的速度和 TTY 定义的链接。此定义可确定 ttymon 的初始运行速度、初始 TTY 设置以及用户通过按 BREAK 键指示速度不合适时要尝试的下一个速度。缺省速度为 9600 波特。

–mmodules

在初始化端口时,ttymon 将弹出端口上的所有模块,然后按指定的顺序推送 modulesmodules 是以逗号分隔的可推送模块列表。端口上的缺省模块通常通过 Autopush 工具设置。

–pprompt

允许用户指定提示字符串。缺省提示符为 Login:

–ttimeout

指定如果在发送提示之后 timeout 秒内没有键入任何内容,就应退出 ttymon

–Ttermtype

将 TERM 环境变量设置为 termtype

–v

启用详细消息。

示例

示例 1 设置系统控制台的终端类型

以下示例为系统控制台 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”(美国样式)语言环境。

LC_CTYPE

确定 ttymon 如何处理字符。LC_CTYPE 设置为有效值时,ttymon 可以显示和处理包含适用于该语言环境的有效字符的文本和文件名。ttymon 可以显示和处理扩展 Unix 代码 (Extended Unix Code, EUC) 字符,其中任何单个字符的宽度可以为 1、2 或 3 个字节。ttymon 也可以处理宽度为 1、2 或更多列的 EUC 字符。在 “C” 语言环境中,只有 ISO 8859-1 中的字符有效。

文件

/etc/logindevperm

包含 login(1)ttymon 用于在登录或退出控制台设备时更改设备的所有者、组以及权限的信息。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
接口稳定性
Committed(已确定)

另请参见

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)

Oracle Solaris 11 管理介绍

附注

服务访问工具(SAF 和 SAC)

ttymon 以前是服务访问工具的一个组件,由 sac(服务访问控制器)调用。此 Solaris 发行版已经删除了该工具,并对相关部分执行了到 SMF 的转换。

端口竞争

如果某个端口由多个 ttymon 监视,则 ttymon 可能会以竞争输入的方式发出提示消息。

有可能出现两个 svc:/system/console-login 服务实例引用同一个底层设备的情况。例如,如果系统的硬件控制台(通过固件中的设置或自动检测)连接到串行端口 A,则 svc:/system/console-login:defaultsvc:/system/console-login:terma 服务将引用同一个底层硬件设备。在定义或启用额外的服务实例时应小心避免这种情况,否则两个 ttymon 将竞争输入。