본문 바로가기

SW 지식/Accessibility 접근성

AT-SPI 정리

AT-SPI는 Assistive Technology Service Provider Interface의 약자로, 한국어로 '보조 기술 서비스 제공 인터페이스' 입니다.

GNOME 프로젝트에서 개발한 프로그램으로, 모든 application의 accessibility 기능들을 어떤 GUI toolkit을 사용하느냐에 구애받지 않고 제공하기 위해 만들어진 것입니다. AT-SPI는 DBus를 통한 프로토콜이며 Toolkit 위젯(component 등)은 이를 사용하여 screen reader와 같은 컨텐츠를 제공합니다.

  ※ D-Bus(Desktop Bus)는 같은 머신에서 동시에 실행 중인 여러 컴퓨터 프로그램(즉, 프로세스) 간의 통신을 가능케 하는 소프트웨어 버스, 프로세스 간 통신 (IPC), 원격 프로시저 호출 (RPC) 매커니즘이다
 ( DBus 관련 위키피디아 : https://ko.wikipedia.org/wiki/D-Bus )

아래 그림을 보면, 각 app (toolkit)에서 ATSPI와 통신하는 것을 볼 수 있는데
Qt5 app처럼 at-spi dbus 프로토콜 자체를 구현했거나, Atpk를 사용하여 AT-SPI 마샬링을 수행할 수 있습니다.

  ※ 컴퓨터 과학에서 마셜링(marshalling)이란 한 객체의 메모리에서 표현방식을 저장 또는 전송에 적합한 다른 데이터 형식으로 변환하는 과정이다. 
  ( Marshalling 관련 위키피디아 : https://ko.wikipedia.org/wiki/%EB%A7%88%EC%83%AC%EB%A7%81_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99) )

Client 측 library인 libatspi를 사용하여 구현할 수 있는데 그 중 'at-spi2-core'는 프로토콜을 정의하고 dbus accessibility bus를 시작하는 코어입니다. RPCs의 공식 정의는 at-spi2-core/xml/에서 확인하실 수 있습니다. 프로토콜은 기본적으로 dbus RPC와 notification으로 구성됩니다. 각 애플리케이션에 대해  위젯 트리는 dbus의 경로 트리로 표시됩니다.
(출처 : https://gitlab.gnome.org/GNOME/at-spi2-core/ )

 ※ 원격 프로시저 호출(Remote Procedure Call, RPC)은 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술이다.
 ( RPC 관련 위키피디아 : https://ko.wikipedia.org/wiki/%EC%9B%90%EA%B2%A9_%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80_%ED%98%B8%EC%B6%9C )


위에서 언급한 at-spi2-core/xml/ 을 보면, 통신을 위해 추가 및 정의해야하는 것들이 있습니다.

Accessible 모든 Accessibility object을 위해 구현되는 기본 interface 입니다.
Name / Description / Parent / Children / Locale / Id / Role / State / Attributes 등
Action 제공되는 action들을 수행할 수 있게 하는 interface 입니다.
Action description / name / DoAction 등
Application 현재 실행 중인 application과 연결된 root object를 식별하는 interface 입니다.
Toolkit name / Version / Atspi version 등
Cache Items / Add and remove Accessible
Collection Accessibility object의 고급 검색 기능을 가능하게 하는 interface 입니다.
Matches / Active descendant 등
Component 화면 좌표(screen coordinates)가 있는 object를 나타내는 interface 입니다.
Contains / AccessibleAtPoint / Extents / Position / Size / Layer / ScrollTo 등
DeviceEventController Register and deregister Keystroke, Device Event Listener / Generate Keyboard, Mouse event / Notify listeners
DeviceEventListener Notify event
Document Current page number / page count 등
EditableText 편집 가능한 텍스트를 저장하는 object를 나타내는 interface 입니다.
Text contents / Insert, Copy, Cut, Delete, and Paste text
Event Events for object, window, mouse, keyboard, terminal, document, and focus
HyperLink N-Anchors / Start, End Index / URI 등
HyperText N-Links / Link Index 등
Image Image description, locale, extents, position, and size
Registry Register and deregister event / registered event 등
Selection 선택된 항목 집합을 저장할 수 있는 object를 나타내는 interface 입니다.
N-Selected children / Select and deselect child / Select all 등
Socket Embed / unembed / available
Table N-Rows / N-Columns / Caption / Summary / Index 관련 등
TableCell Column span / Row span / Position / Table 등
Text 변경할 수 없는 텍스트를 저장하는 object를 나타내는 interface 입니다.
Character count / Caret offset / Text / Attribute value / Substring 등
Value 숫자로 표현된 값을 저장하는 object를 나타내는 interface 입니다.
Maximum value / Minimum value / Minimum increment / Current value

(출처 : https://gitlab.gnome.org/GNOME/at-spi2-core/-/tree/master/xml )

 

 

그 외
출처 : https://www.freedesktop.org/wiki/Accessibility/

 

'SW 지식 > Accessibility 접근성' 카테고리의 다른 글

그렇다면 ATK 란 무엇일까?  (0) 2021.09.01
Accessibility의 정의  (0) 2021.09.01