诸如 Orca 等屏幕阅读器通过向用户描述图形环境来工作。它们解构了一个建立在固有的基于文本的系统之上的任意视觉环境。在某些系统中,这是必要的,因为除了图形界面之外,至少在实际操作中,无法通过任何其他方式访问操作系统。然而,正如大多数 Linux 用户所知,在优秀的 Unix 系统上,图形界面首先是完全可选的,因此没有必要生成一个图形界面,然后解构它并描述它;计算机可以直接输出文本。
我了解两种正在开辟这条道路的努力:Emacspeak 和 ADRIANE(在 Knoppix 上)。在本文中,我们将深入探讨前者。
Emacspeak 是一种听觉界面,它允许非视觉用户完全通过文本输入和输出来独立且高效地与计算机交互。Emacspeak 使用“音频格式化”和 W3C 的 听觉 CSS 来生成输入和输出的完整音频表示。
使用 Emacspeak 系统的另一个优势是它继承了 Emacs 广泛的实用软件包集。正如任何认真的 Emacs 用户所知,完全有可能坐在电脑前,启动 Emacs,然后一直待到关机。Emacs 几乎可以满足您在电脑上日常想做的任何事情,包括使用 w3m 浏览网页,使用 rmail 发送和接收电子邮件,通过 erc 或 circe 进行 IRC 聊天,使用 emms 听有声读物和音乐,使用 dired 管理文件,使用 shell-mode 运行 Unix shell,使用内置的软件包管理器安装更多 Emacs 软件包,以及使用 elisp 编写几乎任何脚本并构建您自己的自定义模块。
是的,它还可以编辑文本。
当然,存在学习曲线,但是学习任何新的桌面(在这种模型中,Emacs 就是桌面)都需要学习一些新概念并培养新的肌肉记忆。但是,如果您将其作为操作环境来尝试,Emacs 很快就会证明自己是一个强大而实用的用户界面。
安装操作系统
由于 Emacs 几乎可以在所有系统上运行,因此至少在技术上有十几种不同的方法来安装、配置和使用 Emacspeak。网上有很多关于它的帖子,但是每个帖子都涵盖了不同的配置,而且似乎没有一个帖子是完整地涵盖的。然而,这是一个明确的往返教程。它的目标是不区分发行版,尽管一些花哨的启动过程可能会以这样或那样的方式实现,具体取决于您使用的是 Systemd 启动脚本、OpenRC 还是 BSD 风格的脚本。从概念上讲,无论如何,这些想法都将是相同的;重要的是不同组件如何组合在一起。
本指南配置一台计算机,使 emacspeak 成为系统上唯一的屏幕阅读器,并且只需要基于软件的组件(它将使用计算机扬声器来朗读文本,并且不需要任何外部“语音合成器”或盲文输出设备)。
请注意,这些安装说明是由有视觉的用户编写和执行的。它没有为非视觉用户进行优化,可能需要有视觉的人员协助安装。从那时起的日常使用只需要盲人用户(或蒙着眼睛的有视觉用户)和计算机即可。
安装 Linux
第一步是安装所选择的 Linux 发行版。我更喜欢 Slackware,因为它稳定,缺乏可能破坏 Emacspeak 关键任务环境的自动更新,并且在其安装 DVD 和软件包服务器上包含 Emacspeak 软件包。然而,Emacspeak 可以安装在任何 Linux 发行版上。
安装 Emacspeak
安装 Linux 后,登录并安装 emacspeak 软件包,如果可用,则安装 emacspeak-ss 软件包。不同的发行版以不同的方式打包它,但通常只需安装与 emacspeak 相关的所有内容即可。
要确认 emacspeak 已安装,请从终端启动它,输入
emacspeak
您可能会收到错误响应(除非您的发行版已为您配置了它),但是只要您从命令收到除 command not found
之外的响应,那么您就会知道 emacspeak 已安装并准备好进行配置。
是时候获取语音合成器了。
配置语音合成
网上有很多关于什么是语音合成器的困惑。第一个误解往往与音乐有关(语音合成器和声码器不是同一回事)。然后是旧的语音识别混淆(我们不想对我们的电脑说话,我们希望我们的电脑对我们说话)。甚至还有关于软件语音合成器和 硬件语音合成器 的问题。我们正在构建的系统使用软件语音合成器,成本为 0 美元。
如果您对术语“语音合成器”感到困惑,只需将其视为屏幕阅读器的声音即可。但在技术术语中,它是一个基于软件的语音合成器。想想史蒂芬·霍金。
维护最活跃的语音合成器是 Flite,它与 Emacs 配合良好。它不是计算机渲染过的最悦耳的声音,而且它往往非常快,但它是我们拥有的开源选项。设计闭源合成器的公司可以通过开源其合成器(或至少使其可以免费用于非商业用途)为世界做出巨大贡献。下次您与政府代表交谈时,您甚至可以问问为什么您在为盲人员工购买语音合成方面花费的税款中,没有一部分用于开发开源的、社区解决方案。(尽管对于它最初运行的操作系统也可以提出同样的问题。)
从您的发行版的软件存储库安装 flite,或者,如果您使用的是 Slackware,则从 SlackBuilds.org 安装。
链接声音服务器和 Emacspeak
下一步是配置一个名为“声音服务器”的东西,它基本上是 emacspeak 和软件合成器 flite 之间的中间链接。
如果没有声音服务器,Emacs 将坐在一个角落,而 Flite 将坐在另一个角落,它们之间永远无法相互通信,更不用说将文本读回给您了。
我们可以使用的声音服务器是 eflite。从您的发行版的存储库安装它,或者在 Slackware 上从 SlackBuilds.org 安装。
一旦 eflite 构建并安装完成,您应该能够使用如下命令测试 flite
$ flite -t foobar
您应该听到一个声音说“foobar”
如果此测试不起作用,最可能的问题是您计算机上的声音无法正常工作或已完全调低。配置声音,在 VLC 等多媒体应用程序中播放一些测试以确认您的声音正常工作,然后再次尝试 eflite 测试。
现在您已经安装了 emacspeak 音频桌面、flite 语音合成器和 eflite 语音服务器。下一步是将它们配置为协同工作。
将它们连接在一起
Emacspeak 从环境变量中发现要使用的声音服务器。
这些变量不会自行设置,因此您需要设置它们。在永久设置它们之前,请进行测试。在 BASH 提示符下,设置适当的环境变量以指向 eflite
$ DTK_PROGRAM=`which eflite`
使其对本次会话永久生效:$ export DTK_PROGRAM
并启动
$ emacspeak
当 Emacs 启动时,您应该听到 Emacs 向您叙述。
如果这对您不起作用,但到目前为止的所有测试都已成功,那么 emacspeak 可能没有使用正确的声音服务器。毕竟,如果各个组件已证明它们可以工作,那么问题不可能是各个部件。
需要检查和排除故障的事项
重要的是要设置 DTK_PROGRAM
环境变量,以便 Emacspeak 知道将信息发送到哪个声音服务器。要正确设置此变量,您必须在与您用于启动 emacspeak
的 BASH shell 相同的 BASH shell 中,完全按照上述步骤操作(设置变量,导出变量,启动)。如果您使用 BASH 以外的 shell,则过程可能会有所不同(取决于 shell)。
如果您在设置 DTK_PROGRAM 和启动 Emacspeak 之间更改 shell 或关闭该 shell,您将丢失变量设置,并且您将在 Emacspeak 不知道要使用哪个声音服务器的情况下启动它。您可以通过在启动 Emacspeak 之前运行 echo $DTK_PROGRAM
来测试是否已设置此变量。如果它返回 /usr/bin/eflite
(或类似的路径),则变量设置正确。如果它没有返回 eflite 的路径,请仔细检查 eflite 是否已正确安装,然后找到可执行文件的路径(它应该位于 bin
目录中的某个位置)。
假设您使其按预期工作,现在是时候使设置 DTK_PROGRAM 变量和启动 Emacspeak 更加透明了。为此,请将您运行的用于测试 Emacspeak 的命令添加到用户的 .bash_profile
中
echo "DTK_PROGRAM=`which eflite`" >> $HOME/.bash_profile echo "export DTK_PROGRAM" >> $HOME/.bash_profile
可选地,如果这真的是您使用 Emacs 的唯一方式,那么您可能想要创建一个别名,以便所有对 emacs
的调用实际上都打开 emacspeak
echo 'alias emacs="emacspeak"' >> $HOME/.bash_profile
注销并重新登录,然后键入 echo $DTK_PROGRAM
。如果它返回 /usr/bin/eflite
(或系统上 eflite 的路径),则 .bash_profile
正在工作。通过键入 emacs
启动 Emacspeak,具有 Emacspeak 功能的 emacs 应该启动,并且您应该听到它按预期向您叙述。
现在去学习 emacs 及其所有扩展。Emacs 拥有从 shell 到媒体播放器的所有功能,所有功能都将由 Emacspeak 叙述。因此,只要您永远不离开 emacs(并且有如此多的扩展,您会发现可能永远没有必要这样做),那么您的计算环境将被大声朗读给您。学习 GNU Emacs 的一个好资源是 emacswiki.org,并且可以在 Hacker Public Radio 找到一个非常好的播客形式的入门迷你系列;收听 第 1 部分、第 2 部分 和 第 3 部分。为了奖励,请使用 emms 收听它们!
为非视觉使用改进系统
如果您正在设置的 Emacspeak 系统是为盲人用户准备的,则可以对系统进行两项有用的修改以帮助提高可用性。就像现在这样,当系统启动时,它会运行通常的启动序列,然后静静地停留在登录提示符处,等待用户输入他们的登录信息。可能根本不需要启动 GUI;在 Slackware 上,这是默认行为,而在 Systemd 启动上,它可以成为默认行为
$ sudo systemctl set-default multi-user.target
或者,您可以允许图形化启动,但在桌面环境中配置为在登录后立即自动启动 Emacspeak。每个桌面管理方式对于桌面来说是独一无二的(通常它是系统设置中的一个选项,或在像启动应用程序这样的专用控制面板中),或者您可以将命令添加到 .xinitrc
。
如果您启动到没有 GUI 的环境,那么您应该为您的用户提供启动序列已结束并且登录提示符正在等待输入的通知。
要创建听觉登录提示符,我们修改启动脚本,以便在启动序列结束时启动某些音频命令。这意味着将有一个听觉提示,然后启动序列将正式结束,然后将出现登录提示符。传统上,init 序列由一系列 shell 脚本组成,这些脚本保存在 etc
中,最后执行的 shell 脚本是 rc.local
。Slackware 和其他一些系统仍然是这种情况,并且在 Systemd 上,通常内置了与 rc.local
的兼容性。
因此,添加到 rc.local
的命令将始终在启动序列结束时执行。任何听觉提示都应该有效;您可以使用 ogg123 或 sox 播放声音文件,或者仅使用 flite
播放短语
# echo 'exec /usr/bin/flite -t "please log in."' >> /etc/rc.d/rc.local
成功登录后,用户将被转到非听觉 bash 提示符。这是一个问题,尤其是当登录失败后也会发生同样的情况时。最简单的解决方案是在成功登录后自动启动 Emacspeak,同时确认成功并消除每次用户登录系统时手动启动 Emacspeak 的冗余。
要实现这一点
$ echo 'exec /usr/bin/emacspeak' >> $HOME/.bash_profile
通过这种设置,Emacspeak 会在用户打开新 shell 时自动生成,充当事实上的 shell 环境以及事实上的桌面。
如何提供帮助
我希望本指南有所帮助。欢迎通过您在 slackermedia.ml 或 Opensource.com 上找到的联系信息提出问题。
如果您想帮助推进盲人 Linux 的使用,那么您可以做一些事情!广义上讲,您始终可以通过实现 shell 脚本和基于 shell 或基于 elisp 的应用程序来提供帮助,这些应用程序尊重 Unix 自诞生以来建立的标准输入和输出期望。鼓励经典的 Unix 模型不仅仅是“老顽固”的骄傲,更是为了保护可以由人类和机器以可预测和可用的方式解析的数据。如果您正在编写 GUI 应用程序,请考虑将其代码分解为 shell 用法和 GUI 用法;有时这需要更多的思考,但通常会导致更简洁的代码、改进的系统资源利用率和更好的逻辑。
如果您是 Web 开发人员,请始终在文本浏览器(如 w3m-emacs、lynx 或 elinks)中检查您的网站。这不仅仅是一个有趣的“复古”噱头;这些浏览器是计算机(和像 flite 这样的语音合成器)“看到”您的网站的方式。如果您发现您的网站在文本界面中难以使用,那么盲人用户也会这样认为!
最后,如果您是教育工作者,请学习、推广和教授 Emacs。它提供了许多应用程序,使计算机可以供盲人用户(和通过远程 shell 的有视觉用户)访问,因此,关于消除其界面神秘性的信息越多越好!
4 条评论