屏幕阅读器,例如 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 用法;有时需要多考虑一下,但通常会产生更简洁的代码、改进的系统资源使用和更好的逻辑。
如果您是网站开发者,请始终在文本浏览器(如 w3m-emacs、lynx 或 elinks)中检查您的网站。这不仅仅是一个有趣的“复古”噱头;这些浏览器是计算机(和像 flite 这样的语音合成器)“看到”您的网站的方式。如果您发现您的网站在文本界面中难以使用,盲人用户也会这样认为!
最后,如果您是教育工作者,请学习、推广和教授 Emacs。它提供了如此多的应用程序,使计算机对盲人用户(以及通过远程 shell 的有视觉用户)可访问,因此,关于消除其界面神秘性的信息越多越好!
4 条评论