通过SSH X11转发运行的应用如何访问AT-SPI2接口?
解决远程X转发应用无法在Accerciser中显示AT-SPI2元素的问题
问题核心是通过ssh -Y远程运行的应用,其AT-SPI2服务默认连接远程机器的D-Bus总线,而非本地总线,导致本地Accerciser无法探测到对应元素。以下是具体解决步骤:
1. 传递本地AT-SPI总线地址到远程会话
先在本地终端(非SSH远程终端)获取当前AT-SPI总线地址:
echo $AT_SPI_BUS_ADDRESS
输出通常类似 unix:path=/run/user/1000/at-spi/bus_0,其中1000是你的本地用户UID(可通过id -u在本地终端查看)。
方式一:手动在SSH终端设置环境变量
在远程SSH终端执行:
export AT_SPI_BUS_ADDRESS=unix:path=/run/user/你的本地UID/at-spi/bus_0
替换你的本地UID为实际数值,之后重启远程应用(比如关闭gnome-calculator后重新启动)。
方式二:SSH连接时自动传递环境变量
该方式无需每次手动设置,更持久:
- 在远程机器编辑
/etc/ssh/sshd_config,添加一行:
AcceptEnv AT_SPI_BUS_ADDRESS
- 重启远程机器的sshd服务:
sudo systemctl restart sshd
- 使用以下命令连接远程机器:
ssh -Y -o SendEnv=AT_SPI_BUS_ADDRESS user@host
之后在该会话中运行应用即可。
2. 确保远程机器安装AT-SPI2依赖
如果远程机器未安装AT-SPI2核心组件,执行对应系统的安装命令:
- Debian/Ubuntu系:
sudo apt install at-spi2-core
- RHEL/CentOS/Fedora系:
sudo dnf install at-spi2-core
3. 验证本地AT-SPI服务状态
在本地终端检查AT-SPI总线服务是否正常运行:
systemctl --user status at-spi-dbus-bus
如果未运行,启动服务:
systemctl --user start at-spi-dbus-bus
完成以上步骤后,重新运行远程应用,即可在本地Accerciser中看到对应的AT-SPI2元素。
内容的提问来源于stack exchange,提问作者Ugurcan Kaya
相关产品推荐
相关产品推荐

