无障碍功能

出自 ArchWiki

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

桌面环境

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

注意: 当使用桌面环境的配置工具时,请注意可能与独立于桌面环境的工具设置冲突。

Xorg 无障碍功能

Xorg 服务器具有通过 X 键盘扩展设置参数来提供物理辅助的功能 (accessx)。本节介绍示例。

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

使用 xserverrc 实现粘滞键

启用独立于桌面环境的无障碍功能的一种方法是通过 X 传递它,前提是它是使用 XKB 支持构建的。这可以通过为 X 服务器设置参数来完成,如其手册页中所述

[+-]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 的一项功能(类似于粘滞键),用于将键盘(尤其是数字小键盘)用作指点设备。它可以替代鼠标,也可以与鼠标一起工作。默认情况下禁用它。您可以使用

$ xset q | grep "Mouse Keys"

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

$ setxkbmap -option keypad:pointerkeys

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

提示: 一些第三方键盘布局,例如 German Neo layout,可能会使用不同的方式来激活鼠标键。

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

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 实现粘滞键

keyd (keyd) 是 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 来验证功能。所选应用程序应出现并具有深度嵌套的子树结构。如果出现问题,可能是因为

  • 应用程序是基于 ChromiumElectron 的。这些程序通常需要环境变量 ACCESSIBILITY_ENABLED=1,以及启动时需要额外的参数 --force-renderer-accessibility。对于 Chrome,您可以使用启用 chrome://accessibility 中的无障碍选项来替换后一步,但是这似乎在重启后不会持久。
  • 应用程序是基于 Java 的。在这种情况下,您需要安装 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

参见