Skip to content

host-guest: add an AT-SPI bridge over vsock - #243

Open
distantorigin wants to merge 1 commit into
AsahiLinux:mainfrom
distantorigin:atspi-bridge
Open

distantorigin wants to merge 1 commit into
AsahiLinux:mainfrom
distantorigin:atspi-bridge

Conversation

@distantorigin

@distantorigin distantorigin commented Sep 17, 2026

Copy link
Copy Markdown

Currently, assistive technologies cannot interact with or represent VM-bound applications.

Allow guest applications to use the host AT-SPI bus so assistive technologies on the host, such as Orca, can interact with them and receive accessibility events.

Use AT_SPI_BUS_ADDRESS when set; otherwise query org.a11y.Bus. If the address points to a reachable Unix socket, expose it through a dedicated vsock port. Skip the bridge when no supported socket is available.

muvm-guest provides a Unix socket under /run/user/{uid}, proxies connections to the host, and starts the bridge before user init commands. Set AT_SPI_BUS_ADDRESS, ATSPI_DISABLE_P2P, and GNOME_ACCESSIBILITY unless overridden with -e.

Rewrite EXTERNAL authentication to the VM owner identity and reject NEGOTIATE_UNIX_FD locally while preserving SASL reply order.

Testing

Tested on Fedora Asahi Remix with GNOME and KDE:

  1. Start Orca (Super+Alt+S). Press the same keystroke to disable Orca when finished.
  2. Run Steam through muvm. The Steam UI is read and navigable via the keyboard (arrow keys, tab, etc.). With muvm 0.6.0 it isn't exposed at all and only the window title will be announced.
  3. To check without a screen reader, list the host accessibility bus while a guest app is running:
busctl --address=unix:path=/run/user/$UID/at-spi/bus list

Please check all boxes that apply:

  • This code was developed in accordance with the Asahi Linux Copyright Policy
  • I have not used generative AI/LLMs to develop this code, in accordance with the Asahi Linux LLM Policy
  • I have certified the above by adding a Signed-off-by: trailer to every commit

All boxes must be checked before your pull request can be reviewed.

Allow guest applications to use the host AT-SPI bus so assistive technologies on the host, such as Orca, can interact with them and receive accessibility events.

Use AT_SPI_BUS_ADDRESS when set; otherwise query org.a11y.Bus. If the address points to a reachable Unix socket, expose it through a dedicated vsock port. Skip the bridge when no supported socket is available.

muvm-guest provides a Unix socket under /run/user/{uid}, proxies connections to the host, and starts the bridge before user init commands. Set AT_SPI_BUS_ADDRESS, ATSPI_DISABLE_P2P, and GNOME_ACCESSIBILITY unless overridden with -e.

Rewrite EXTERNAL authentication to the VM owner identity and reject NEGOTIATE_UNIX_FD locally while preserving SASL reply order.

Signed-off-by: distantorigin <distantorigin@distantorig.in>
@slp

slp commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator

Nice PR here, thanks @distantorigin. Could you please fix the clippy issues and write down some brief instructions for testing this feature?

@distantorigin

distantorigin commented Sep 22, 2026

Copy link
Copy Markdown
Author

Thanks for reviewing, happy to fix!

The clippy error seems to be caused by updates to Rust 1.98 and already existed in the repository before this pull request. Should I still fold that into this same PR?

https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#enhancements (#16746)

@slp

slp commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator

The clippy error seems to be caused by updates to Rust 1.98 and already existed in the repository before this pull request. Should I still fold that into this same PR?

Ah, yes, you're right. I've created #245 to address this. We'll rebase on top of that to get a green CI.

@distantorigin

Copy link
Copy Markdown
Author

PR text updated to include testing steps, let me know if anything is unclear.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants