AT-SPI2

This is over DBus, toolkit widgets provide their content to screen readers such as Orca.

http://www.linuxfoundation.org/collaborate/workgroups/accessibility/atkat-spiat-spiond-bus, http://a11y.org/d-bus

https://accessibility.kde.org/developer/atk.php

https://wiki.gnome.org/Accessibility/ATK/BestPractices

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


Wayland

Works just the same :D