9.4 KiB
Fenrir User Manual
Fenrir is a modern command line screen reader written in Python 3.
It has a modular structure, a flexible driver-based architecture, is highly configurable and easy to customize and extend.
Current maintainer: Storm Dragon
Previous developer: Chrys
Quick Start
- Installation: See the README.md for installation instructions
- First run:
sudo fenrir
(orsudo systemctl start fenrir
if installed) - Tutorial mode: Press
Fenrir + H
to learn all commands interactively - Basic navigation: Use numeric keypad for review (desktop layout)
- Stop speech: Press
Ctrl
at any time - Quit: Press
Fenrir + Q
Key Concepts
Fenrir Key
The Fenrir Key is used to invoke screen reader commands. By default:
- Insert
- Keypad Insert
- Meta (Super/Windows key)
You can configure multiple Fenrir keys to suit your preference.
Keyboard Layouts
- Desktop Layout: Uses numeric keypad (recommended for desktop users)
- Laptop Layout: Alternative bindings for keyboards without numeric keypad
Review Mode
Navigate the screen without moving the text cursor. Essential for examining content without disrupting your workflow.
Essential Commands
Navigation (Desktop Layout)
Ctrl
- Stop speech (shut up)Fenrir + H
- Tutorial modeFenrir + Q
- Quit FenrirFenrir + Keypad 5
- Read current screenKeypad 8
- Read current lineKeypad 5
- Read current wordKeypad 2
- Read current character
Review Commands
Keypad 7/9
- Previous/next lineKeypad 4/6
- Previous/next wordKeypad 1/3
- Previous/next characterFenrir + Keypad dot
- Exit review mode
Information
Fenrir + T
- Announce timeFenrir + T T
- Announce dateKeypad dot
- Cursor position
Clipboard
Fenrir + X
- Set markFenrir + C
- Copy marked textFenrir + V
- Paste clipboardFenrir + Shift + C
- Read current clipboard
Settings (Runtime Changes)
Fenrir + F3
- Toggle soundFenrir + F4
- Toggle speechFenrir + Up/Down
- Speech volumeFenrir + Right/Left
- Speech rateFenrir + Ctrl + P
- Punctuation level
Configuration
Settings File
Main configuration: /etc/fenrir/settings/settings.conf
Key Sections
[speech]
- Speech synthesis settings[sound]
- Sound output and icons[keyboard]
- Input and key bindings[screen]
- Screen reading configuration[general]
- General settings
Common Settings
[speech]
enabled=True
driver=speechdDriver
rate=0.5
pitch=0.5
volume=1.0
[sound]
enabled=True
driver=genericDriver
volume=0.7
[keyboard]
driver=evdevDriver
keyboardLayout=desktop
[screen]
driver=vcsaDriver
ignoreScreen=
[remote]
enable=True
driver=unixDriver
enableSettingsRemote=True
enableCommandRemote=True
Remote Control
Fenrir includes a powerful remote control system for automation and integration with external applications.
Configuration
Enable remote control in settings:
[remote]
enable=True
driver=unixDriver # or tcpDriver
port=22447 # for TCP driver
enableSettingsRemote=True # allow settings changes
enableCommandRemote=True # allow command execution
Basic Usage with socat
Speech Control
# Interrupt current speech
echo "command interrupt" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
# Speak custom text
echo "command say Hello, this is a test" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
# Temporarily disable speech
echo "command tempdisablespeech" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
Settings Control
# Enable highlight tracking
echo "setting set focus#highlight=True" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
# Change speech parameters
echo "setting set speech#rate=0.8" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
echo "setting set speech#pitch=0.6" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
echo "setting set speech#volume=0.9" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
# Change punctuation level (none/some/most/all)
echo "setting set general#punctuationLevel=all" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
# Voice and TTS control
echo "setting set speech#voice=en-us+f3" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
echo "setting set speech#module=espeak-ng" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
# Multiple settings at once
echo "setting set speech#rate=0.8;sound#volume=0.7;general#punctuationLevel=most" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
# Reset all settings
echo "setting reset" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
# Save settings
echo "setting save" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
echo "setting saveas /tmp/my-settings.conf" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
Clipboard Operations
# Add text to clipboard
echo "command clipboard Text to copy" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
# Export clipboard to file
echo "command exportclipboard" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
Application Control
# Quit Fenrir
echo "command quitapplication" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
Command Reference
Speech Commands:
command say <text>
- Speak textcommand interrupt
- Stop speechcommand tempdisablespeech
- Disable until next key
Settings Commands:
setting set <section>#<key>=<value>
- Change settingsetting reset
- Reset to defaultssetting save
- Save current settings
Other Commands:
command clipboard <text>
- Add to clipboardcommand exportclipboard
- Export clipboard to filecommand window <x1> <y1> <x2> <y2>
- Define windowcommand resetwindow
- Reset windowcommand vmenu <menu_path>
- Set virtual menucommand resetvmenu
- Reset virtual menu
Key Settings You Can Change:
- Punctuation level:
setting set general#punctuationLevel=all
- Speech parameters:
setting set speech#rate=0.8;speech#pitch=0.6
- Voice selection:
setting set speech#voice=en-us+f3
- Character echo:
setting set keyboard#charEchoMode=1
- Screen ignore:
setting set screen#ignoreScreen=1,2,3
Scripting Integration
Bash Helper Function
fenrir_say() {
echo "command say $1" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
}
# Usage
fenrir_say "Build completed"
Python Integration
import socket
import os
def send_fenrir_command(command):
socket_path = "/tmp/fenrirscreenreader-deamon.sock"
if os.path.exists(socket_path):
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
try:
sock.connect(socket_path)
sock.send(command.encode('utf-8'))
finally:
sock.close()
send_fenrir_command("command say Process complete")
Advanced Features
Spell Checking
Fenrir + S
- Spell check current wordFenrir + S S
- Add word to dictionaryFenrir + Shift + S
- Remove word from dictionary
Bookmarks (1-10)
Fenrir + Shift + [1-0]
- Set bookmarkFenrir + [1-0]
- Go to bookmarkFenrir + Ctrl + [1-0]
- Clear bookmark
Multiple Clipboards
Fenrir + Home/End
- First/last clipboardFenrir + PageUp/PageDown
- Previous/next clipboard
Window Mode
- Set marks to define window area
Fenrir + Keypad /
- Set windowFenrir + Keypad / /
- Clear window
Drivers
Speech Drivers
- speechdDriver - Speech-dispatcher (recommended)
- genericDriver - Command-line TTS (espeak, etc.)
Sound Drivers
- genericDriver - Sox-based (default)
- gstreamerDriver - GStreamer-based
Input Drivers
- evdevDriver - Linux evdev (recommended for Linux)
- ptyDriver - Terminal emulation (cross-platform)
Screen Drivers
- vcsaDriver - Linux VCSA devices (TTY)
- ptyDriver - Terminal emulation
Remote Drivers
- unixDriver - Unix socket remote control (recommended)
- tcpDriver - TCP socket remote control (localhost only)
Command Line Options
fenrir [OPTIONS]
-h, --help
- Show help-v, --version
- Show version-f, --foreground
- Run in foreground-s, --setting FILE
- Custom settings file-o, --options SECTION#SETTING=VALUE;..
- Override settings-d, --debug
- Enable debug mode-p, --print
- Print debug to screen-e, --emulated-pty
- PTY emulation for desktop use-E, --emulated-evdev
- PTY + evdev emulation-F, --force-all-screens
- Ignore ignoreScreen setting
Troubleshooting
No Speech
- Test speech-dispatcher:
sudo spd-say "hello"
- Check driver setting in configuration
- Verify speech-dispatcher is running
No Sound
- Run audio configuration script:
configure_pulse.sh
orconfigure_pipewire.sh
- Check sound driver setting
- Verify sox installation
No Input Response
- Check permissions:
/dev/input/*
and/dev/uinput
- Verify evdev driver setting
- Run as root for testing
Debug Mode
sudo fenrir -f -d
# Debug output goes to /var/log/fenrir.log
Getting Help
- Tutorial Mode:
Fenrir + H
(interactive help) - Wiki: https://git.stormux.org/storm/fenrir/wiki
- Email: stormux+subscribe@groups.io
- IRC: irc.stormux.org #stormux
See Also
- README.md - Installation and basic setup
- settings.conf - Configuration reference
man fenrir
- Manual page