Update README.md: - Add comprehensive Key Features section highlighting desktop-agnostic design - Document plugin system, D-Bus remote control, sleep mode, and self-voicing - Reorganize dependencies section with clear categories - Emphasize desktop neutrality and universal compatibility Update PKGBUILD: - Bump pkgrel to reflect new features - Improve package description to highlight desktop-agnostic nature - Organize dependencies with comments for clarity - Add optdepends for alternative TTS engines - Ensure all new dependencies (python-dasbus, python-pluggy) are included These updates reflect Cthulhu's evolution from a simple Orca fork to a feature-rich, desktop-agnostic screen reader with plugin capabilities. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Cthulhu
Note
If you somehow stumbled across this while looking for a desktop screen reader for Linux, you most likely want Orca instead. Cthulhu is currently a supplemental screen reader that fills a nitch for some advanced users. E.g. some older QT based programs may work with Cthulhu, and if you use certain window managers like i3, Mozilla applications like Firefox and Thunderbird may work better.
Introduction
Cthulhu is a free, open source, flexible, and extensible screen reader that provides access to the graphical desktop via user-customizable combinations of speech and/or braille.
Cthulhu works with applications and toolkits that support the assistive technology service provider interface (AT-SPI), which is the primary assistive technology infrastructure for the Solaris and Linux operating environments. Applications and toolkits supporting the AT-SPI include the GNOME GTK+ toolkit, the Java platform's Swing toolkit, OpenOffice/LibreOffice, Gecko, WebKitGtk, and KDE Qt toolkit.
Key Features
Desktop-Agnostic Design
- Universal compatibility: Works on KDE, XFCE, i3, Sway, and other desktop environments
- Minimal GNOME dependencies: Reduced reliance on GNOME-specific libraries
- Tiling window manager optimized: Enhanced support for i3, Sway, and similar WMs
Plugin System
- Extensible architecture: Plugin system using pluggy framework
- Hot-reloadable plugins: Add functionality without restarting
- Community plugins: User and system plugin directories
Remote Control
- D-Bus interface: External control via D-Bus service
- API access: Remote access to Cthulhu functions and settings
- Automation support: Script-friendly remote control
Sleep Mode
- Application-specific: Disable speech/events per application
- Toggle keybinding:
Cthulhu+Ctrl+Alt+Shift+Q
(matches Orca) - Preserves exit key: Only sleep toggle remains active
Self-Voicing
- Unix socket interface: Direct speech output via
/tmp/cthulhu.sock
- External integration: Other applications can speak through Cthulhu
- Simple protocol:
echo "text" | socat - UNIX-CLIENT:/tmp/cthulhu.sock
Dependencies
Core Requirements
- Python 3.3+ - Python platform
- pygobject-3.0 - Python bindings for the GObject library
- gtk+-3.0 - GTK+ toolkit (minimal usage for AT-SPI integration)
- AT-SPI2 - Assistive Technology Service Provider Interface
- ATK - Accessibility Toolkit
Desktop-Neutral Features
- pluggy - Plugin and hook calling mechanisms for Python
- python-dasbus - D-Bus remote control interface (optional)
- libpeas - Plugin loader library
Audio and Speech
- python-speechd - Python bindings for Speech Dispatcher (recommended)
- gstreamer-1.0 - GStreamer streaming media framework (for sounds)
Braille Support (Optional)
- BrlTTY - BrlTTY (https://mielke.cc/brltty/) braille terminal support
- BrlAPI - BrlAPI Python bindings for braille
- liblouis - Liblouis (http://liblouis.org/) contracted braille translation
System Integration
- py-setproctitle - Python library to set the process title (optional)
- socat - Used for self-voicing functionality
- xorg-xkbcomp - X keyboard compiler (for key remapping)
- xorg-xmodmap - X modifier map utility
You are strongly encouraged to also have the latest stable versions of AT-SPI2 and ATK.
Braille
Cthulhu depends upon the Python bindings for BrlAPI available in BrlTTY v4.5 or better. You can determine if the Python bindings for BrlAPI are installed by running the following command:
python -c "import brlapi"
If you get an error, the Python bindings for BrlAPI are not installed.
Running Cthulhu
If you wish to modify your Cthulhu preferences, you can press "Insert+space" while Cthulhu is running.
To get help while running Cthulhu, press "Insert+H". This will enable "learn mode", which provides a spoken and brailled description of what various keyboard and braille input device actions will do. To exit learn mode, press "Escape." Finally, the preferences dialog contains a "Key Bindings" tab that lists the keyboard binding for Cthulhu.
For more information, see the Cthulhu documentation which is available within Cthulhu.
Scripting Cthulhu
So, you want to write a script for Cthulhu? The best thing to do is start by looking at other scripts under the src/cthulhu/scripts/ hierarchy of the source tree. Cthulhu also has an excellent plugin system, more documentation and examples coming soon.
Self-voicing
Cthulhu offers a mechanism through which messages may be spoken directly by the screen reader. Usage is as follows:
# Speak hello world.
echo "Hello world." | socat - UNIX-CLIENT:/tmp/cthulhu.sock
# Speak Hello world without interrupting the previous speech.
echo "<!#APPEND#!>Hello world." | socat - UNIX-CLIENT:/tmp/cthulhu.sock
# Make hello world persistant in Braille.
echo "Hello world.<#APPEND#>" | socat - UNIX-CLIENT:/tmp/cthulhu.sock