拨号接入是指设置您的电脑,以便其他人可以拨入您的电脑(通过您的电话号码)并使用您的电脑。不幸的是,有些人使用术语“拨号接入”时,实际上指的是完全相反的意思:拨号呼出。
拨号接入的工作方式如下:某人使用调制解调器拨打您的电话号码。您的调制解调器应答电话铃声并建立连接。一旦呼叫者连接成功,getty
程序就会收到通知,并开始为呼叫者启动登录过程。在呼叫者登录后,呼叫者就可以使用您的电脑了。这几乎就像他们坐在您的显示器控制台前一样。
呼叫者可以使用脚本自动登录。此脚本将是 expect-send 类型。例如,它期望“login:”,然后在检测到“login:”后,将发送用户的登录名。接下来它期望密码,然后发送密码,等等。然后,一旦用户自动登录后,/etc/passwd(密码文件)可能会指定为用户启动一个 shell(例如 bash)。或者它可能会指定启动 PPP,以便用户可以连接到互联网。有关更多详细信息,请参阅 PPP-HOWTO。您在电脑上用于处理拨号接入的程序称为 getty
或 mgetty
。请参阅 Getty
高级 getty 程序(如 mgetty)可以监视另一端的电脑是否启动了 PPP。如果是,则会跳过登录提示,建立 PPP 连接,并且登录将通过 PPP 连接自动进行。
以下是拨号接入的更详细描述。所有这些都假设您正在使用 mgetty 或 uugetty。Agetty 较差,并且工作方式不完全相同(请参阅 关于 agetty)
为了使拨号接入工作,调制解调器必须监听振铃,并且 getty 必须正在运行并准备好响应呼叫。您的调制解调器通常监听来电,但它在收到振铃时执行的操作取决于其配置方式。调制解调器可以自动应答电话,也可以不直接应答。在后一种情况下,调制解调器向 getty 发送“RING”消息,然后 getty 告诉调制解调器应答振铃。在任何一种情况下,都可以将其设置为在例如第 4 声铃响时应答。这意味着如果呼叫不是给调制解调器的,则必须在第 4 声铃响之前走到电话旁手动拿起电话。然后可以在电话上进行普通的对话。如果有人太晚才拿到电话,就会听到调制解调器应答呼叫后发出的高音调。
一旦调制解调器应答呼叫,它会向另一个调制解调器发送音调(反之亦然)。两个调制解调器协商它们将如何通信,当协商完成后,您的调制解调器会向 getty
发送“CONNECT”消息(或类似的)。当 getty
收到此消息时,它会通过串行端口发送登录提示。一旦向此提示提供了用户名,getty
就可以调用名为 login
的程序来处理从那以后的登录过程。虽然 getty
通常在启动时开始运行,但它应该等到建立连接后才发送“login”提示。
现在更详细地介绍两种应答呼叫的方法。第一种方法是调制解调器自动应答呼叫。在这种情况下,调制解调器在应答之前响铃的次数由调制解调器的 S0 寄存器控制。如果 S0 设置为 3,则调制解调器将在第 3 声铃响时自动应答。如果 S0 设置为 0,则只有当 getty 在电话响铃时向调制解调器发送“A”(= 应答)AT 命令时,调制解调器才会应答呼叫。(实际上发送的是“ATA”,因为所有调制解调器命令都以“AT”为前缀。)这是第二种应答方法,称为“手动”应答,因为调制解调器本身不自动执行应答(但 getty 会执行)。您可能认为最好利用调制解调器硬件自动应答呼叫的能力,但实际上最好让 getty
“手动”应答。
对于“手动”应答的情况,getty
在启动时打开端口并监听。当电话响铃时,会向正在监听的 getty
发送“RING”消息。然后,如果 getty
想要应答此振铃,它会向调制解调器发送“A”命令。请注意,getty 可以设置为仅在例如 4 个“RING”消息(第 4 声铃响)后应答,类似于自动应答方法。然后调制解调器建立连接并向 getty
发送“CONNECT ...”消息,然后 getty
向呼叫者发送登录提示。这并非如此简单,因为有一些特殊技巧用于在等待呼叫时允许拨号呼出。请参阅 在等待来电时拨号呼出
自动应答情况使用来自调制解调器到串行端口的 CD(载波检测,也称为 DCD)线来告知何时建立连接。它的工作方式如下:在启动时,getty
尝试打开串行端口,但尝试失败,因为调制解调器已否定 CD(调制解调器处于空闲状态)。然后 getty
程序在程序中的 open 语句处等待,直到 CD 信号被置为高电平。当 CD 信号到达(可能在数小时后)时,端口被打开,并且 getty
发送登录提示。当 getty
在 open 语句处等待(休眠)时,其他进程可以运行,因此它不会降低计算机性能。实际上唤醒 getty
的是中断,该中断在来自调制解调器的 CD 线路将其状态更改为开启时发出。
您可能想知道在“手动”应答情况下,getty 如何能够打开串行端口,因为 CD 可能会被否定。嗯,有一种编写程序的方法可以强制端口打开,即使没有 CD 信号被置为高电平。
如果您期望人们能够以 56k 的速度拨入您,除非您拥有以下所有条件,否则无法实现
getty
程序(包括 agetty、mgetty 等)是您为拨号接入运行的程序。您不需要它用于拨号呼出。除了显示登录提示外,它还可以帮助应答来电。最初,getty 用于从哑终端登录到计算机。如今,它的主要用途是在控制台上登录到 Linux 系统。有几种不同的 getty 程序,其中一些程序可以与调制解调器一起用于拨号接入。getty 程序通常在启动时或有人拨入您的计算机时启动。它必须从 /etc/inittab 文件中调用。在此文件中,您可能会找到一些示例,您可能需要对其进行少量编辑。
有四种不同的 getty 程序可供选择,可与调制解调器一起用于拨号接入:mgetty
、uugetty
、getty_em
和 agetty
。以下小节简要概述了它们。agetty
是四者中最弱的,它主要用于直接连接的文本终端。mgetty
包括对传真和语音邮件的支持,但 uugetty
没有。但是,据称 mgetty
缺少 uugetty
的一些功能。getty_em
是 uugetty
的简化版本。因此,mgetty
可能是您的最佳选择,除非您已经熟悉 uugetty
(或发现 mgetty
难以使用)。这些 getty 程序的语法有所不同,因此请确保在您使用的任何 getty 的 /etc/inittab
中使用正确的语法。
为了查看您的计算机上有关各种 getty 的文档,请使用“locate”命令。键入:locate "*getty*"(包括引号可能会有所帮助)。请注意,许多发行版只是将程序称为 getty,即使它实际上可能是 agetty、uugetty 等。但是,如果您阅读手册页(键入:man getty),它可能会透露它是哪个 getty。这应该是路径为 /sbin/getty
的 getty 程序。
登录后,您会注意到(通过使用“top”、“ps -ax”或“ptree”)getty 进程不再运行。它怎么了?如果您的 shell 被终止,为什么 getty 会再次重启?原因如下。
在您键入用户名后,getty 会获取它并调用登录程序,告诉它您的用户名。getty 进程被登录进程替换。登录进程会询问您的密码,检查密码,并启动密码文件中指定的任何进程。此进程通常是 bash shell。如果是这样,bash 启动并替换登录进程。请注意,一个进程替换另一个进程,并且 bash shell 进程最初是作为 getty 进程启动的。下面将解释其含义。
现在,在 /etc/inittab 文件中,getty 应该在被终止时重新生成(重启)。它在调用 getty 的行中说明了这一点。但是,如果 bash shell(或登录进程)被终止,getty 会重新生成(重启)。为什么?嗯,登录进程和 bash 都是 getty 的替代品,并继承了其前任建立的信号连接。事实上,如果您观察细节,您会注意到替换进程将具有与原始进程相同的进程 ID。因此,bash 有点像伪装的 getty,具有相同的进程 ID 号。如果 bash 被终止,就好像 getty 被终止一样(即使 getty 不再运行)。这会导致 getty 重新生成。
当有人注销时,该串行端口上的所有进程(包括 bash shell)都会被终止。如果启用了此功能,则当调制解调器 DCD 电压下降时,也可能发生这种情况,从而向串行端口发送挂断信号。注销或 DCD 下降都将导致 getty 重新生成。可以通过手动终止 bash(或登录),或者在“top”中按 k 键等,或者使用“kill”命令来强制 getty 重新生成。您可能需要使用信号 9(无法忽略)终止它。
mgetty
是作为 uugetty
的替代品编写的,uugetty
早在 mgetty
之前就已存在。两者都用于调制解调器,但 mgetty 是最佳选择(除非您已经习惯使用 uugetty
)。mgetty
也可用于直接连接的终端,但没有太多用于此目的的功能。除了允许拨号登录外,mgetty
还提供传真支持、自动 PPP 检测和来电显示支持。它允许在 mgetty 等待来电时拨号呼出。有一个名为 vgetty
的补充程序,用于处理某些调制解调器的语音邮件。mgetty
文档尚可(语音邮件除外),并且未在此 HOWTO 中补充。要自动启动 PPP,必须编辑 /etc/mgetty/login.conf 以使用“AutoPPP”(有示例)。您可以在 http://www.leo.org/~doering/mgetty/ 和 http://alpha.greenie.net/mgetty/ 找到有关 mgetty
的最新信息
getty_ps
包含两个程序:getty
用于控制台和终端设备,uugetty
用于调制解调器。Greg Hankins(Serial-HOWTO 的前作者)使用 uugetty
,因此此处包含了他关于它的著作。请参阅 Uugetty。
这是“uugetty”的简化版本。它是 Vern Hoxie 在完全对 getty_ps 和 uugetty 所需的复杂支持文件感到困惑后编写的。
它是 Vern Hoxie 的串行端口实用程序和信息集合的一部分,可通过 ftp 从 scicom.alphacdc.com/pub/linux 获取。该集合的名称是“serial_suite.tgz”。
本小节很长,因为作者尝试使用 agetty 进行拨号接入。agetty
看起来很简单,因为没有初始化文件。但是,当我尝试使用它时,即使没有 CD 信号,它也打开了串行端口。然后在建立连接之前,它在 AT 命令状态下向调制解调器发送了登录提示和 /etc/issue 文件。调制解调器认为所有这些都是 AT 命令,如果它确实包含任何“at”字符串(意外),则很可能会对您的调制解调器配置文件产生不利影响。可能会开始回显冲突,其中 getty 和调制解调器来回重复发送相同的字符串。如果发生这种情况,您可能会看到“respawning too rapidly”错误消息。为了防止这种情况发生,您需要禁用调制解调器的所有回显和结果代码(E0 和 Q1)。还要将 -i 选项与 agetty 一起使用,以防止发送任何 /etc/issue 文件。
如果您在调制解调器端口上启动 getty,并在几秒钟后发现登录进程正在该端口上运行而不是 getty,则意味着已从调制解调器向 agetty 发送了伪造的用户名。为了防止这种情况发生,我必须将我的拨号接入配置文件保存在调制解调器中,以便它在开机时生效。另一个保存的配置文件用于拨号呼出。然后,任何使用调制解调器的拨号呼出程序都必须在其初始化字符串中使用 Z、Z0 或 Z1 来初始化调制解调器以进行拨号呼出(通过加载保存的拨号呼出配置文件)。如果 1-profile 用于拨号接入,则使用 Z1 加载它,等等。如果您想稍后监听拨号接入,则需要将调制解调器重置为拨号接入配置文件。并非所有拨号呼出程序都可以在退出时执行此重置。
因此,虽然如果您在调制解调器硬件中正确设置了拨号接入配置文件,agetty 可能会正常工作,但它可能最适合虚拟控制台或终端,而不是调制解调器。如果 agetty 正在运行以进行拨号接入,则没有简单的方法可以拨号呼出。当有人第一次拨入 agetty 时,他们应该按回车键以获取登录提示。Debian 发行版中的 agetty
仅命名为 getty
。
mingetty
是一个小型 getty,仅适用于监视器(通常的控制台),因此您不能将其与调制解调器一起用于拨号接入。fbgetty
与上述相同,但支持帧缓冲。
当计算机碰巧关闭但调制解调器仍在工作时,两种应答方式之间的差异就会显现出来。对于手动情况,会将“RING”消息发送到 getty,但由于计算机已关闭,getty 不在那里,因此电话永远不会被应答。没有应答时不会产生电话费。对于自动应答情况,调制解调器(仍然开启)应答电话,但由于计算机已关闭,因此永远不会发送登录消息。随着等待的继续,电话费会增加。如果电话是免费电话,则没有什么太大的区别,尽管等待永远不会出现的登录提示可能会令人沮丧。mgetty
使用手动应答。Uugetty
也可以通过使用配置文件来做到这一点。
以下是在简单的手动应答情况下可能出错的情况。假设另一个进程在 getty 监听来自其调制解调器在串行线上的“RING”消息时拨号呼出。然后,拨号呼出进程的传入字节从调制解调器流向串行端口。例如,当拨号呼出进程连接时,您的调制解调器可能会向您的串行端口发送“CONNECT”消息。如果 getty 读取了它,就会出现问题,因为读取是破坏性读取。一旦 getty 读取了它,则期望“CONNECT”(或其他内容)的拨号呼出进程就无法读取它。因此,拨号呼出进程很可能会失败。
有一种方法可以避免这种情况,以下是 mgetty 的做法。当 mgetty 列出传入呼叫时,它不会从端口读取任何内容,直到它认为字符是为 mgetty 准备的。Mgetty 监视端口,如果字符到达,它不会立即读取它们。相反,它首先检查是否有另一个进程正在使用该端口。如果是这样,mgetty 会退回并关闭端口(但该端口对另一个进程保持打开状态)。因此,如果另一个进程拨号呼出,mgetty 不会干扰它。当另一个进程最终关闭端口时,mgetty 会恢复“监听”。这是一种特殊的“监听”类型,它在 mgetty 认为它将读取的内容是为 mgetty 准备的(希望是“RING”消息)之前,会避免读取。
当 mgetty 检查是否有另一个进程正在使用端口时,它实际上会检查端口上是否存在有效的锁文件。如果另一个进程未能使用锁文件,那对它来说太糟糕了。有关更多详细信息,请参阅 mgetty 文档:“mgetty 的工作原理”。仅供程序员参考:“listening”实际上是使用系统调用“poll”或“select”来监视端口。当非 mgetty 进程正在使用端口时,它们也可能用于监视端口。
然后是在使用 mgetty 时调制解调器配置的问题。Mgetty 首先在启动时设置此配置,并使用用户指定的聊天脚本来执行此操作。因此,调制解调器现在配置为不自动应答,而是在电话响铃时向 mgetty 发送 RING 字符串。现在假设当 mgetty 等待来电时,另一个程序进行传出呼叫并将调制解调器重新配置为对 mgetty 不利的状态。为了防止这种情况发生,当 mgetty 检测到使用端口的某些其他程序已退出时,mgetty 只会自行退出。这会导致 mgetty 重新启动(根据 /etc/inittab 文件重新生成),然后 mgetty 重新配置调制解调器,以便将其全部设置为再次监听来电。
使用自动应答(mgetty 通常不使用),getty 等待 CD 被置为高电平,以便它可以打开端口。可以拨号呼出,但是一旦建立连接,调制解调器的 CD 就会被置为高电平。如果 getty 然后读取端口,它将占用旨在由拨号呼出连接读取的字符。虽然 agetty 会遇到此问题,但据称 uugetty 会在读取之前检查锁文件(类似于 mgetty)。
有两种主要方法可以结束拨号接入呼叫。呼叫者可以注销或只是挂断电话。对于挂断电话的情况,请参阅 呼叫者挂断电话
当呼叫结束时,结束连接的正常方法是远程用户注销。这将导致拨号接入电脑挂断电话线,稍后将对此进行解释。请注意,当从电脑注销时(不使用调制解调器时),通常不会发生此行为。在这种情况下,用户注销并立即获得登录提示,作为再次登录的邀请。但是,键入“logout”的远程用户会被挂断电话,并且如果他/她想再次登录,则必须重新拨号。如果在用户注销时没有挂断电话,则连接将保持,并且不会给其他人登录的机会。
远程用户注销您的拨号接入电脑将终止远程用户在您的拨号接入电脑上使用的 shell。现在,由于此端口上不再运行任何程序,端口关闭并通过否定 DTR 向调制解调器发送挂断信号。只有当 stty -a 显示 hupcl(默认值)时,才会发生这种情况。hupcl = 关闭时挂断 => 当在此端口上运行的最后一个程序关闭时,丢弃 DTR(“挂断”信号)。但是通常,当 shell 被终止时,就像 getty 被终止一样,getty 将重新生成(因为它在 /etc/inittab 中以这种方式设置)。这将几乎立即再次打开端口并置为高电平 DTR。因此,DTR 被称为眨眼(仅在很短的时间内(一秒的一小部分)丢弃,然后再重新声明自身)。对于现代快速计算机,此眨眼时间太短,无法被调制解调器识别,因此串行驱动程序应使此眨眼时间更长(前提是 stty 设置了 hupcl,并且前提是 ...)。但是 2003 年有人抱怨它不够长。
拨号接入电脑调制解调器收到挂断信号(否定 DTR 信号)后,将挂断电话线(前提是调制解调器已配置为执行此操作 - 请参见下文)。然后,调制解调器应准备好应答任何新的来电。对于 mgetty,如果存在用于初始化调制解调器的聊天脚本,并且可能会发生重置调制解调器的情况。如果调制解调器由于 DTR 眨眼时间太短而未挂断电话,则新生成的 getty 可能会挂断电话。mgetty 本身会在启动时创建一个较长的 DTR 眨眼时间来挂断调制解调器。据称,让重新生成的 getty 清理上一次呼叫留下的混乱(调制解调器仍然在线)不是处理此问题的正确方法。
在设置 mgetty 时,可以使用带有代码序列 +++ 的聊天脚本向调制解调器发送,以在 DTR 未工作时将其置于 AT 命令模式。+++ 必须具有初始和最终的最小时间延迟。一旦进入 AT 命令模式,就可以向调制解调器发送挂断命令 (H0) 以及其他 AT 命令。可以设置使用此方法和 DTR 方法,以便如果一种方法失败,另一种方法有望工作。如果 PC 未能成功地在注销发生时向调制解调器发出信号(或在重新启动 getty 时未能使用 +++ 转义),则调制解调器很可能保持在线模式,并且无法接收更多来电。据称这可能存在安全风险。
当 DTR(被否定时的“挂断”信号)下降(被否定)时,调制解调器执行的操作取决于调制解调器配置文件中 &D 选项的值。如果它是 &D0,则什么也不会发生(调制解调器忽略 DTR 的否定)。以下是当计算机丢弃 DTR 时发生的情况
&D2:
调制解调器将挂断并进入 AT 命令模式(离线)以等待下一个呼叫。除非它将无法自动应答电话,直到 DTR 再次被置为高电平。但是由于 mgetty 自动重新生成(如果在 /etc/inittab 中这样设置),则 mgetty 将在注销后立即重新启动,这将置为高电平 DTR。因此,当有人注销时发生的情况是,DTR 仅被否定一秒的一小部分(眨眼),然后再被置为高电平。在此眨眼期间,DTR 必须至少被否定寄存器 S25 指定的时间,否则调制解调器将不会挂断电话。
&D3:
或 S13 = 1。在这种情况下,调制解调器在 DTR 下降时执行硬重置:它挂断电话并恢复 &Y 指定的已保存配置文件。它现在应处于首次开机时的相同状态。但是 mgetty 可能有一个聊天脚本,它将向调制解调器发送初始化字符串,从而再次更改配置文件。由于配置文件中的这两个更改几乎同时发生,这可能是个问题吗(称为“竞争条件”)。
S25 限制可能无效,因此即使是非常短的 DTR“眨眼”也会被检测到。另一个品牌的调制解调器表示 S25 限制仍然有效。因此,&D3
比 &D2
更强的“重置”,后者不恢复已保存的配置文件,并且可能需要更长的眨眼时间才能工作。
在有利条件下,&D3
或 &D2
都应该可以正常工作。据报告,对于少数调制解调器,只有 &D2
可以正常工作。如果使用 &D3
,这可能与上面提到的可能的竞争条件有关吗?
呼叫者可以不以正常方式注销,而是只需挂断电话(通过关闭他/她正在使用的“终端”程序等)。这会导致连接丢失,当然也会导致载波丢失。其他问题也可能导致载波丢失。调制解调器挂断电话并等待下一个呼叫。除非还没有 getty 运行来启动登录过程。
以下是 getty 再次启动的方式:载波丢失应否定调制解调器发送到串行端口的 CD 信号(前提是已设置 &C1
)。当电脑的串行端口收到丢弃的 CD 信号时,它应该终止 shell,前提是 clocal 被否定 (-clocal),然后 getty 应该重新生成。mgetty 在启动时置为高电平 clocal。它稍后会丢弃 clocal 吗?
此段是关于其他发生但什么也不发生的事情。只有好奇的人才需要阅读它。当 shell 被终止时,会向调制解调器发送 DTR 眨眼信号,但由于调制解调器不再在线,并且由于载波丢失而已经挂断电话,因此调制解调器会忽略 DTR 的丢弃。载波丢失还会否定调制解调器发送到串行端口的 DSR 信号(前提是设置了 &S1 或 &S2),但此信号被(Linux)忽略。“NO CARRIER”结果代码应由调制解调器生成,但它会发送到哪里?
getty 程序提供了一种向调制解调器发送初始化字符串以配置它的功能。但是您可能需要对其进行编辑。另一种方法是将合适的初始化字符串保存在调制解调器内部(有关如何将其保存在调制解调器中,请参阅 初始化字符串:保存和调用)。
拨号接入的配置取决于您使用的 getty 以及您的调制解调器。如果您在其他文档中找不到建议的配置,以下是使用 Hayes AT 命令的一些提示
&C1
使到串行端口的 CD 线跟踪载波的实际状态(仅当有载波时才置为高电平 CD)。Getty_em 需要 &C0(CD 始终置为高电平)&D3
当有人注销(或挂断电话)时,对调制解调器执行硬重置。据报告,对于某些调制解调器,需要 &D2,因为它们无法容忍硬重置??E0
不要将 AT 命令回显到串行端口。这对于 agetty 是必须的。有些人建议为 mgetty 使用 E1(回显 AT 命令)。对于拨号呼出,您需要 E1,以便可以看到发送的内容。&K3
使用硬件流控制Q0
回显结果字(如 CONNECT)。大多数 getty 都使用它们。但据报告,AT&T 版本的 uugetty 和 agetty 需要 Q2(拨号接入没有结果字)。S0=?
mgetty 建议 S0=0(手动应答),但您在 mgetty 命令行中给出响铃次数。如果您设置 S0=3,调制解调器将在第 3 声铃响时自动应答,等等。Agetty 使用自动应答。uugetty(通常)也是如此。V1
以单词形式(而不是代码形式)显示结果(如 CONNECT)X4
检查拨号音和忙音信号回拨是指有人首先拨号连接到您的调制解调器。然后,您从呼叫者处获取一些信息,然后立即回拨。您为什么要这样做呢?一个原因是,如果您可以比呼叫者更便宜地呼叫他们,则可以节省电话费。另一个原因是确保呼叫者确实是他们声称的那个人。如果呼叫者呼叫您并声称是从其常用电话号码呼叫,那么验证这一点的一种方法实际上是向该号码发起新的呼叫。
有一个名为“callback”的 Linux 程序,可以与 mgetty 一起使用。它位于 ftp://ftp.rug.nl/contrib/frank/software/linux/callback/ 关于某人如何安装它(以及 PPP)的逐步说明位于 http://www.stokely.com/unix.serial.port.resources/callback.html
“特殊振铃”是指您希望调制解调器仅接听特定类型的振铃,例如长、短、长、短等。为此,您首先需要一个支持特殊振铃的调制解调器。例如,可以使用 AT 命令设置 Netcomm Roadster 调制解调器来执行以下操作:它将发送到 mgetty:DROF=14 DRON=4 RING DROF=4 DRON=2 RING ... 这意味着初始静音为 1.4 秒 (DROF=14),然后是 0.4 秒的振铃 (DRON=4) 等。每次振铃后也会报告 RING。请注意,调制解调器不能设置为应答某种类型的振铃,它只会告知串行端口上监听的程序(例如 mgetty)振铃序列是什么。然后,如果程序喜欢该序列,它会向调制解调器发送 AT 命令以应答呼叫。不幸的是,mgetty 无法识别此类振铃序列,但有一种可能有效的权宜之计。
Mgetty 仅等待“RING”,并将忽略 DRON 和 DROF(特殊振铃关闭)字。对于 Netcomm Roadster 调制解调器,您可以设置发送 DRON= 和 RING 之间的延迟。例如,您可以将延迟设置为 2.0 秒。但是,如果在此 2.0 秒期间发生另一次实际振铃,则调制解调器会取消延迟的 RING 消息,并且永远不会发送它。因此,您或许可以将此延迟设置为您不希望调制解调器应答的呼叫永远不会向 mgetty 发送 RING 消息。但是对于您希望 mgetty 应答的呼叫,您可以使振铃之间的间隔足够长,以便将“RING”发送到 mgetty,并且 mgetty 应答呼叫。这种权宜之计并非总是可行,特别是如果电话公司没有给您太多特殊振铃的选择。以上方法是否适用于其他支持特殊振铃的调制解调器?
对于上述调制解调器,AT 命令:AT+VDR=1,24 将上述延迟设置为 2.4 秒。您可以将其放入 mgetty.config 中的“init-chat”参数中。
语音邮件就像由计算机运行的应答机。要做到这一点,您必须拥有支持“语音”和支持软件的调制解调器。消息不是存储在磁带上,而是以数字格式存储在硬盘驱动器上。当有人给您打电话时,他们会听到“问候”消息,然后可以给您留言。更高级的系统将具有呼叫者可选择的邮箱和呼叫者可选择收听的消息。Linux 中有免费软件可用于简单的应答,但似乎尚无适用于更高级功能的软件。
我知道 Linux 有两个不同的语音邮件软件包。一个是非常小的软件包(请参阅 语音邮件软件)。另一个更高级,但目前文档记录不完善的是 vgetty
,它支持所有 ELSA 调制解调器和 ITU v.253 标准。它是文档完善且广泛分发的 mgetty
程序的可选附加组件。在 Debian 发行版中,您必须获取 mgetty-voice 软件包以及 mgetty 软件包和 mgetty-doc(文档)软件包。
这真的是手动操作!它甚至不允许呼叫者登录,但呼叫者可以与您“聊天”等。这是一种无需编辑任何拨号配置或启用 getty 即可应答呼叫的方法。要做到这一点,您可以运行终端程序,例如 minicom。通过键入“AT <enter>”并期望“OK”来确保它已连接到您的调制解调器。然后等待呼叫。然后在电话响铃时键入“ATA”来真正手动应答呼叫。这不会运行 getty,并且呼叫者无法登录。但是,如果呼叫者使用终端程序呼入,他们可能会在您的屏幕上键入消息(反之亦然)。你们都可以使用终端程序(例如 minicom)内置的命令来来回发送文件。另一种应答此类呼叫的方法是在呼叫到来之前键入例如“ATS0=3”,以使调制解调器在第三次振铃时自动应答。
这是使用 MS Windows PC 上使用超级终端或终端(适用于 Windows 3.x 或 DOS)的人员粗略传输文件的一种方法。这两个 MS 程序有点像 minicom。使用这种简单的手动方法(对于 Linux 到 Linux 或 MS 到 Linux)需要两个人同时在场,一个在电话线连接的每一端运行终端通信程序。请注意,如果两个人同时打字,那将会很混乱。这是在任何两个拥有 PC(Linux 或 MS Windows)的人之间传输文件的“最后手段”方法。它也可以用于测试您的调制解调器或作为设置拨号接入之前的初步测试。
与上面描述的简单(但劳动密集型)手动拨号接入相反的极端情况是,它会产生 Linux PC 的 GUI 图形界面。这通常需要两台计算机之间存在运行 TCP/IP 协议的网络。获得这种“网络”的一种方法是拨号连接到设置为拨号接入的 PC,然后在电话线上运行 PPP。PPP 将使用封装在 PPP 数据包内的 TCP/IP 协议。双方都必须运行 PPP,并且可以将 mgetty 配置为在呼叫者执行 PPP 时立即启动 PPP。呼叫者可以使用 PPP 拨号程序,就像他们拨号连接 ISP 一样。wvdial、eznet 或 chat 脚本等程序应该可以做到这一点。
通过 ISP 可以访问比电话连接上的这个小型网络更大的网络(整个世界)。对于他们最低费率的服务,他们中的许多人使用代理服务器,这些服务器不会让您访问您需要使用的端口。即使他们不使用代理服务器,他们给您的 IP 地址也只是会话的临时地址,因此您需要通过电子邮件将此 IP 发送给任何想要联系您的人。如果您获得更昂贵的 ISP 服务,那么您可以避免这些问题。
从远程 PC 获取 GUI 界面的方法之一是运行 GPL 许可的程序:AT&T 的虚拟网络计算机 (VNC)。它有一个服务器部分,您在 Linux PC 上运行用于拨号接入,以及一个查看器(客户端)部分,用于拨号连接。这两者实际上都不进行任何拨号或登录,而是假定您已经设置了网络。VNC 服务器内置了 X 服务器,并且可以使用 Linux 的 twm 窗口管理器。请参阅 Linux Magazine 中关于 VNC 的文章:http://www.linux-mag.com/2000-11/desktop_03.html。AT&T 的 VNC 站点是:http://www.uk.research.att.com/vnc/。
使用 VNC,还可以连接到远程 Windows PC,在 Linux PC 上获得 Windows GUI,并在远程 Windows PC 上运行 Windows 程序。当然,Windows PC 必须运行 VNC(作为服务器)。显然,通过调制解调器的 GUI 连接将比纯文本连接慢,特别是如果您运行 KDE 或 GNOME 或想要 16 位颜色。
设置拨号接入后,其他人可以使用来自类 Unix 系统的 minicom(或类似程序)呼叫您。从 MS Windows,可以使用“超级终端”(或 Windows 3.1 或 DOS 中的“终端”)呼叫您。
如果在 Windows 中想要通过电话线使用带有网络协议的拨号,则称为“拨号网络”。但它可能无法与 Linux 通信。要在 Windows 中设置此类拨号接入,在拨号连接时单击“服务器”,而拨号连接是“客户端”。这种拨号接入通常称为“远程控制”,意味着呼叫者可以使用您的 PC,在其上运行程序,从而远程控制它。
虽然从 MS Windows 呼叫到基于文本的 Linux 系统很容易,但反过来就不那么容易了(部分原因是 Windows 不是基于文本的,并且需要将呼叫者放入 DOS,在 DOS 中,文件不像在 Linux 中那样受到保护)。
但是,如果呼叫者通过电话线使用某些网络协议:MS 或 Novel 的协议(Linux 不喜欢的两种协议),Windows “拨号网络”可以建立拨号接入。因此,如果有人使用 Windows 98 启用了他们的拨号网络服务器,您就无法直接从 Linux 拨号连接到它。这种类型的拨号接入不允许呼叫者像 Linux 那样在主机上运行大多数程序。它被称为“远程访问”,并且可以传输文件、使用主机打印机、访问数据库等。有没有办法从 Linux 接口连接到拨号网络?
两个人可以通过 Linux 端的 Minicom 和 Windows 端的超级终端粗略地聊天和发送文件。这一切都是由两个活人手动完成的,一个在电话连接的每一端。请参阅 简单手动拨号接入。
与此相反的极端情况是,人们希望运行拨号接入,以便呼叫者获得 GUI 界面。为此,通常使用网络协议。可以使用 Windows 的 PC Anywhere 或 Linux 和 Windows 的 VNC。但是 PC Anywhere 似乎无法与 Linux 通信?其他用于“远程控制”的 Windows 程序包括 Laplink、Co-Session 和 Microcom。除了 VNC 之外,是否有任何此类程序支持 Linux?