屏幕阅读器,例如 Orca,通过向用户描述图形环境来工作。它们解构一个构建在固有的基于文本的系统之上的任意视觉环境。在某些系统中,这是必要的,因为除了图形界面之外,至少在实际上无法通过任何其他方式访问操作系统。然而,正如大多数 Linux 用户所知,在优秀的 Unix 系统上,图形界面从一开始就完全是可选的,因此无需生成一个、解构它并描述它;计算机可以直接输出文本。
我知道有两种为此努力的方法:Emacspeak 和 ADRIANE(在 Knoppix 上)。在本文中,我们将深入了解前者。
Emacspeak 是一个听觉界面,允许非视力用户完全通过文本输入和输出来独立且高效地与计算机交互。Emacspeak 使用“音频格式化”和 W3C 的 Aural 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
的 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,Emacs 和 Emacspeak 功能应该启动,并且您应该听到它按预期向您叙述。
现在去学习 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 条评论