辅助功能
有许多不同的方法可以为有身体或视觉障碍的用户提供无障碍功能。但是,除非使用桌面环境,否则配置可能需要一些调整才能使其正常工作。
桌面环境
大多数现代桌面环境都附带一套全面的功能,其中可以找到用于配置无障碍选项的工具。通常,这些选项会列在“无障碍”下,或列在相应输入设备(例如“键盘”和“鼠标”)的设置下。例如,对于GNOME和KDE。
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 会重置它。
要永久启用鼠标键,请添加
Option "XkbOptions" "keypad:pointerkeys"
到键盘配置文件。这将使 Shift+NumLock 快捷键切换鼠标键。
有关更多信息,请参阅 Xorg 键盘配置#使用 X 配置文件 和 X 键盘扩展#鼠标控制 以获取高级配置。
通用解决方案
以下解决方案与所选的显示服务器和桌面环境无关。
TTY 中的粘滞键
要在 TTY 中启用粘滞键,您需要知道要使用的键的确切键码。这些键码可以通过像 xorg-xev 或 xkeycaps 这样的工具找到。或者,您可以检查 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”表示我们想要该键的粘滞版本。
通过运行以下命令加载您的新映射
# 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。
已知问题
绕过软件层的软件(例如 Wine、VirtualBox 和 QEMU)无法识别输入设备的配置。
故障排除
大多数图形应用程序应该都能开箱即用,例如 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-bridge、OOO_FORCE_DESKTOP=gnome、GNOME_ACCESSIBILITY=1、QT_ACCESSIBILITY=1、QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1。
禁用无障碍功能
如果您不需要无障碍功能并希望节省一些进程,请设置 NO_AT_BRIDGE=1 和 GTK_A11Y=none 环境变量,并屏蔽 at-spi-dbus-bus.service 用户单元。