This is over DBus, toolkit widgets provide their content to screen readers such as Orca.
Python bindings are available for screen readers: pyatspi2
The core that defines the protocol and starts the dbus accessibility bus is at-spi2-core , the formal definition of RPCs is available as xml files in at-spi2-core/xml/
The protocol essentially consists in dbus RPCs and notifications. For each application (seen as a dbus sender), its tree of widgets is represented as a tree of dbus paths.
A Walkthrough documents the RPC and function calls details.
Getting it started by hand (normally done by the Desktop Environment session manager):
- /usr/lib/at-spi2-core/at-spi-bus-launcher &
- /usr/lib/at-spi2-core/at-spi2-registryd &
one can make sure it got registered by using
$ xprop -root | grep SPI AT_SPI_BUS(STRING) = "unix:abstract=/tmp/dbus-6fNHBTP2lK,guid=9d17aaa3ca64ff4b66f0c5985442999e"
That was the bus address, one can watch what happens by spying on it:
$ dbus-monitor --address unix:abstract=/tmp/dbus-6fNHBTP2lK,guid=9d17aaa3ca64ff4b66f0c5985442999e
Some applications need explicit accessibility enabling:
export GTK_MODULES=gail:atk-bridge export OOO_FORCE_DESKTOP=gnome export GNOME_ACCESSIBILITY=1 export QT_ACCESSIBILITY=1
Accessibility enabling can be tested with this script:
$ git clone git://git.debian.org/git/pkg-a11y/check-a11y $ cd check-a11y $ ./troubleshoot
Accessibility working in toolkits can be tested with this script:
$ git clone git://git.debian.org/git/pkg-a11y/check-a11y $ sudo apt-get install build-essential pkg-config libdbus-1-dev libatspi2.0-dev libgtk2.0-dev libgtk-3-dev libqt4-dev qtbase5-dev $ cd check-a11y $ source env.sh $ make check
Accerciser to test the availability of the content
Works just the same :D