跳转至内容

辅助功能

来自 ArchWiki

本文章或章节需要扩充。

原因: 根据最近一篇博客文章的快速阅读,我们可以提到 fenrirAUR 以及使 espeakup 能够同时从 TTY 和图形会话工作的配置。

(在 Talk:Accessibility 讨论)

有许多不同的方法可以为有身体或视觉障碍的用户提供无障碍功能。但是,除非使用桌面环境,否则配置可能需要一些调整才能使其正常工作。

桌面环境

大多数现代桌面环境都附带一套全面的功能,其中可以找到用于配置无障碍选项的工具。通常,这些选项会列在“无障碍”下,或列在相应输入设备(例如“键盘”和“鼠标”)的设置下。例如,对于GNOMEKDE

注意 使用桌面环境的配置工具时,请注意可能与桌面环境无关的工具的设置发生冲突。

Xorg 无障碍功能

Xorg 服务器具有(accessx)用于身体辅助的功能,通过X keyboard extension设置参数。本节介绍示例。

有关语音识别,请参阅文本转语音

使用 xserverrc 的粘滞键

启用桌面环境无关的无障碍功能的一种方法是通过 X 来实现,前提是它支持 XKB。这可以通过设置 X 服务器的参数来实现,如其 man 页中所述。

[+-]accessx [ timeout [ timeout_mask [ feedback [ options_mask ] ] ] ]
              enables(+) or disables(-) AccessX key sequences (Sticky Keys).

-ardelay milliseconds
              sets the autorepeat delay (length of time in milliseconds  that
              a key must be depressed before autorepeat starts).

-arinterval milliseconds
              sets  the  autorepeat  interval (length of time in milliseconds
              that should elapse between autorepeat-generated keystrokes).

这些参数必须放在文件 ~/.xserverrc 中,您可能需要创建该文件。

例如,要在没有超时且没有声音或视觉反馈的情况下启用粘滞键,可以使用以下方法

if [ -z "$XDG_VTNR" ]; then
  exec /usr/bin/X -nolisten tcp "$@" +accessx 0 0x1e 0 0xcef
else
  exec /usr/bin/X -nolisten tcp "$@" vt$XDG_VTNR +accessx 0 0x1e 0 0xcef
fi

请注意,一旦 X 启动,例如通过执行 startx,仍然需要您按 Shift 键 5 次才能启用粘滞键。不幸的是,每次 X 启动都需要这样做。或者,可以使用脚本来自动化此过程。

与大多数实现一样,可以通过同时按下修饰键和任何其他键来禁用粘滞键。

重新映射鼠标按钮

通过使用 xmodmap,您可以将功能映射到独立于图形环境的鼠标按钮。为此,您需要知道鼠标上的哪个物理按钮被读取为哪个数字,这可以通过像 xorg-xev 这样的工具找到。通常,左、中、右三个物理按钮分别被读取为第一个、第二个和第三个按钮。

获取这些信息后,继续在合适的位置创建一个配置文件,例如 ~/.mouseconfig。然后,使用您喜欢的编辑器打开文件,并输入关键字 pointer =,后跟之前找到的鼠标按钮数量的枚举。

例如,一个带滚轮的三按钮鼠标可以提供五个物理操作:左键单击、中键单击、右键单击,以及向上滚动和向下滚动。通过在配置文件中使用以下行,可以将其映射到相同的功能

pointer = 1 2 3 4 5

在这里,位置将指示执行内部鼠标按钮功能所需的操作。例如,为左撇子(左右按钮互换)映射可能看起来像

pointer = 3 2 1 4 5

完成后,您可以运行 xmodmap 来测试和检查您的映射。

$ xmodmap ~/.mouseconfig
$ xmodmap -pp

满意后,可以通过将第一行放入 ~/.xinitrc 来在启动时启用它。

鼠标键

鼠标键是 Xorg 的一项功能(类似 StickyKeys),用于使用键盘(尤其是数字键盘)作为指针设备。它可以替代鼠标,或与其同时使用。它默认禁用。您可以使用

$ xset q | grep "Mouse Keys"

来查看状态。要为一个会话启用它

$ setxkbmap -option keypad:pointerkeys

如果您使用 xmodmap 配置,请注意 setxkbmap 会重置它。

提示 一些第三方键盘布局,例如 德语 Neo 布局,可能使用不同的方法来激活鼠标键。

要永久启用鼠标键,请添加

Option "XkbOptions" "keypad:pointerkeys" 

到键盘配置文件。这将使 Shift+NumLock 快捷键切换鼠标键。

有关更多信息,请参阅 Xorg 键盘配置#使用 X 配置文件X 键盘扩展#鼠标控制 以获取高级配置。

通用解决方案

以下解决方案与所选的显示服务器和桌面环境无关。

TTY 中的粘滞键

要在 TTY 中启用粘滞键,您需要知道要使用的键的确切键码。这些键码可以通过像 xorg-xevxkeycaps 这样的工具找到。或者,您可以检查 dumpkeys 的输出,前提是当前键映射是正确的。


例如,Logitech Ultra-X 将为修饰键提供以下键码

LCtrl = 29
LShift = 42
LAlt = 56
RShift = 54
RCtrl = 97

接下来,使用 dumpkeys 来确定键码的范围。

# dumpkeys | head -1
keymaps 0-63

继续创建一个具有合适名称的新文件,例如“stickyKeys”,并使用您喜欢的编辑器将先前找到的信息与所需的键功能结合起来。

如果使用了前面找到的键码,您将得到

keymaps 0-63
keycode 29 = SCtrl
keycode 42 = SShift
keycode 56 = SAlt
keycode 54 = SShift
keycode 97 = SCtrl

这里,修饰键前面的字母“S”表示我们想要该键的粘滞版本。

注意 下一步将更改所有 TTY 中的键映射。请确保您的键码正确,否则您可能会失去使用某些重要键的能力。

通过运行以下命令加载您的新映射

# loadkeys ./stickyKeys

如果您对结果满意,请将文件移至合适目录。要在启动时启用,请参阅以下 systemd 单元

/etc/systemd/system/loadkeys.service
[Unit]
Description="load custom keymap (sticky keys)"

[Service]
Type=oneshot
ExecStart=/usr/bin/loadkeys /path/to/stickyKeys
StandardInput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target emergency.target rescue.target

使用 keyd 的粘滞键

keydkeyd)是 Linux 的一个系统级按键重映射守护程序,可以配置为 Xorg 和 Wayland 以及 Linux 虚拟控制台提供粘滞键功能。

要启用此功能,请先安装并启用 keyd。然后,创建配置文件

/etc/keyd/sticky_keys.conf
# Tapping the modifier once causes it to apply to the next key, tapping it twice
# activates it until it is pressed again, and holding it produces expected
# behaviour.

[ids]
*

[main]

control = oneshot(control)
meta = oneshot(meta)
shift = oneshot(shift)
leftalt = oneshot(alt)

[control]
control = toggle(control)

[meta]
meta = toggle(meta)

[shift]
shift = toggle(shift)

[alt]
leftalt = toggle(alt)

您现在可以启用/启动 keyd.service

视觉辅助

与物理辅助一样,大多数现代桌面环境都附带一套全面的功能来调整系统的视觉方面。通常,这些选项会列在“无障碍”或“视觉辅助”下。或者,可以在单个应用程序的设置中找到有用的选项。

语音识别

参见 语音识别

控制台和虚拟终端模拟器

  • 编辑 /etc/vconsole.conf
  • 编辑 ~/.Xresources

已知问题

绕过软件层的软件(例如 WineVirtualBoxQEMU)无法识别输入设备的配置。

故障排除

大多数图形应用程序应该都能开箱即用,例如 Gtk-、Qt- 或 Gecko- आधारित 的应用程序。您可以通过运行 accerciser 来验证其功能。选择的应用程序应该出现并具有深度嵌套的子级树结构。可能出现的问题是

  • 应用程序是 Chromium- 或 Electron-based 的。这些程序通常需要环境变量 ACCESSIBILITY_ENABLED=1,并且在启动时需要额外的参数 --force-renderer-accessibility。对于 Chrome,您可以将最后一步替换为在 chrome://accessibility 中启用无障碍选项,但这似乎在重启后不会保留。
  • 应用程序是 Java-based 的。在这种情况下,您需要安装 ATK 桥接器 java-atk-wrapper-openjdk8(取决于您的 Java 版本)。
  • 在极少数情况下,该应用程序是使用 qt4AUR 构建的、老旧且不常见的应用程序,例如一些自 2015 年以来未维护的程序,您需要安装 at-spi2-core
  • 作为最后的手段,以下任何环境变量都可能有所帮助:GTK_MODULES=gail:atk-bridgeOOO_FORCE_DESKTOP=gnomeGNOME_ACCESSIBILITY=1QT_ACCESSIBILITY=1QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1

禁用无障碍功能

如果您不需要无障碍功能并希望节省一些进程,请设置 NO_AT_BRIDGE=1GTK_A11Y=none 环境变量,并屏蔽 at-spi-dbus-bus.service 用户单元

参见