Linux无障碍环境搭建:零配置→语音导航全指南
|
跟人吵架——就昨天,三点十七分,我在机房第三排靠窗那台DELL OptiPlex上,把Orca配到第七遍的时候,隔壁工位老张接了个电话,声音特别响:“对对对,就是那个‘语音导航’……他们说Linux现在零配置?我刚试完Ubuntu 24.04,连GNOME的accessibility开关都没点开,Orca自己弹出来喊‘欢迎使用屏幕阅读器’——这算哪门子零配置?它连我笔记本合盖时是否休眠都管! 我原以为只要装好systemd-user-sessions+orca+speech-dispatcher+espeak-ng就完事了。结果第一件事:插USB盲文点显器,udev规则写到一半,发现/lib/udev/rules.d/99-orca.rules根本没加载——不是权限问题,是它压根不存在。查源码才发现,2025年3月起,gnome-orca主干已默认不带任何udev集成,全扔给PipeWire-a11y做runtime接管。我敢打包票,你grep -r “99-orca.rules”在任何新ISO镜像里都搜不到。但没人告诉你这个,官网FAQ还挂着2021年的截图。 桌上那盒凉透的黄焖鸡,酱汁渗进键盘缝隙里,黏住右Shift键。我按了十八秒才弹起来,语音导航刚好读到“设置 → 辅助功能 → 屏幕阅读器”,然后卡在“启用”复选框的灰色状态上。不是没勾,是它读得出来,但鼠标焦点死活落不进去。查dbus-monitor抓到signal发了三回,gdbus call却只响应第一回。第二回就静音,第三回直接抛SIGUSR1退出——Orca进程还在,可语音没了,只剩光标在跳。这时候窗外在下雨,雨刮器频率跟pulseaudio的latency检测间隔撞上了,哒、哒、哒、哒……每四下就漏一帧音频缓冲。
文章配图,仅供参考 老张挂完电话回头问我:“要不要试试KDE?听说Plasma 6加了Orca直通管道。”我点头。重装kubuntu-desktop包,结果第一个弹窗是“是否启用无障碍辅助服务?”——点“是”,系统重启后登录界面语音导航反而消失。翻journalctl -u gdm3,看见一行红字:“a11y bus name ‘org.a11y.Bus’ not owned by any service”。不是没启,是systemd --user session里,dbus-broker把org.a11y.Bus当保留名给屏蔽了。我们仨(老张、小陈、我)蹲在机柜后面拿ssh连同一台机器,各自跑不同shell:他跑loginctl show-session c1 --property Type,我跑dbus-run-session -- gnome-session,小陈一边啃鸭脖一边用socat转发/usr/tmp/dbus-XXXXX到/var/run/user/1000/bus——最后发现,KDE根本不走GSettings a11y backend,它用的是Qt自己的QAccessible,而Qt 6.8的QAccessible::setRootObject()调用顺序比GNOME晚470毫秒,这就导致Orca初始化时root为空,后续所有事件监听失效。 小陈手机突然震,是家里催他修洗衣机。他啪一下合上笔记本,屏幕合盖瞬间Orca尖叫一声“正在休眠”,但其实没有——systemd-logind被盲文设备中断打断三次,suspend.target卡在“waiting for device /dev/ttyS0”上。他手忙脚乱按Ctrl+Alt+F2切tty,结果F2键没反应。不是键盘坏了,是GNOME的keyboard shortcut manager根本没把F2映射进无障碍快捷键栈,它只认Ctrl+Option+T(终端)、Ctrl+Option+L(锁屏),但F2?它当你是想切VT——于是整个a11y总线断联十七秒。十七秒啊,足够Orca重连三次失败,重载两次配置,然后默默把自己进程优先级调到idle。我亲眼看着htop里它的%CPU从32%掉到0.1%,然后停在那儿,像条搁浅的鱼。 优胜劣汰?没错。但这淘汰机制不是看谁适配快,是看谁先扛不住崩溃。Debian testing的orca版本把speechd-python的依赖链砍了两层,但没动/usr/bin/speech-dispatcher二进制——你装完发现命令能跑,config也能生成,可语音就是不出声;debug发现它连socket都连不上,因为launchd替换了systemd socket activation逻辑,而speech-dispatcher.conf里的“ListenStream=/run/speech-dispatcher/speechd.sock”早被改成@speechd.socket,前面多一个@,但Orca配置里根本没见过这个符号。没人改文档,没人更新debconf模板。就硬等着你grep source、strace、然后手改systemd unit——这不叫淘汰,这叫甩锅式迭代。 说到甩锅……前天测试Raspberry Pi 5配NVMe SSD跑Orca+BrailleBack,插上电源那一刻风扇狂转,噪声大得必须开降噪耳机。降噪耳机一开,pulseaudio自动切到A2DP profile,Orca立刻失声。手动切回HSP/HFP,语音回来了,但盲文点显器刷新延迟从32ms飙到217ms——因为BlueZ 5.75的hidp通道和libbrlapi的buffer轮询有冲突。这事谁管?BlueZ团队说“这不是我们的API”,libbrlapi说“我们只支持内核hid-core”,kernel邮件列表里有人回:“建议用userspace hidraw + epoll,别赖驱动”。我当场笑出声。桌角那张皱巴巴的《Linux无障碍开发白皮书》扉页写着“2022年版”,封底印着“本文档内容与发行版无关”——关你屁事,你倒是别放官网首页啊。 我现在把GNOME Shell插件全禁了,就留orca+pipewire-a11y+espeak-ng;禁掉所有dbus policy override;把/etc/default/grub里的quiet splash删了,就为看kernel log里有没有a11y-related warning。至于“零配置”?呵。真零配置,应该我插上USB盲文设备,敲回车,语音念“已识别汉王B12,开始朗读桌面图标”,而不是先打开terminal输七行命令,再祈祷dbus reload别卡在第五行。我说不准GNOME 47会不会彻底弃用At-Spi2,但我敢打包票:今年下半年发布的任何新发行版,默认a11y stack里至少有一个组件是靠临时hack维持的——要么注释掉某段C++构造函数,要么在~/.profile里export一个不存在的env var骗过configure检查。 下一步?我把这次实测的全过程录像传到了internal NFS server /srv/a11y-2025-q1 下,带原始journalctl + dbus-monitor + strace + screenrecord。视频里有三处明显穿帮:一次是Orca报错时我顺手抹了下鼻梁,镜片上留下指纹;另一次老张把咖啡泼在小陈键盘上,小陈直接拔掉了USB hub;最后一次,我切到tty1输sudo reboot,语音导航在重启倒计时里突然插话:“检测到系统将重启,建议关闭正在编辑的文档”。我没编辑任何文档。它就是在胡说。但它胡说得太准了,准得让人后背发凉。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Linux新手避坑指南:12年工程师实战安装配置
Linux老手也常踩的5个Unix环境搭建坑
Linux安全环境搭建:零配置到生产就绪全指南
嵌入式Linux开发者Unix环境搭建避坑指南
15年录入员亲测:Linux数据库七步稳建指南
Linux下H5开发环境与数据库配置实践