FENRIR(1)

🐺✨ FENRIR(1) ✨🐺

user commands Β· section 1 Β· the console screen reader that actually gets you πŸ’…


🌸 NAME 🌸

fenrir β€” a modern, modular console screen reader for Linux πŸ¦‹


πŸŽ€ SYNOPSIS πŸŽ€

fenrir [-h] [-v] [-f] [-s SETTING-FILE] [-o SECTION#SETTING=VALUE;..]
[-d] [-p] [-x] [--x11-window-id WINDOWID] [-F] [-i SCREEN]

πŸ’– DESCRIPTION πŸ’–

okay bestie, so Fenrir is a modern, modular, flexible and fast console screen reader, and it's written in Python 3. literally. It gives you spoken feedback for Linux console applications, and it supports Linux TTYs plus X11 terminal mode. πŸ‘‘

And the way that it's built?? Modular driver architecture, no cap β€” it supports multiple speech synthesizers, sound systems, input methods, and screen reading techniques. It also has advanced features like review mode, multiple clipboards, spell checking, bookmarks, and configurable key bindings. it's giving Swiss Army knife but make it accessible 🧰✨


πŸ’… OPTIONS πŸ’…

  • -h, --help β€” show the help message and dip out. πŸ™ˆ
  • -v, --version β€” show version info and exit. iconic, brief, slays. ✨
  • -f, --foreground β€” run Fenrir in the foreground instead of as a daemon. so useful for debugging and testing, fr fr. πŸ”
  • -s, --setting SETTING-FILE β€” path to a custom settings file. the default is /etc/fenrirscreenreader/settings/settings.conf for root, and ~/.local/share/stormux/fenrirscreenreader/settings/settings.conf for regular-user saves. πŸ—‚οΈ
  • -o, --options SECTION#SETTING=VALUE;.. β€” override settings file options. format: SECTION#SETTING=VALUE;... and yes it's case sensitive bestie. multiple settings get separated by semicolons. πŸ’«
  • -d, --debug β€” enable debug mode. debug info gets logged to /var/log/fenrir.log. πŸ‘€
  • -p, --print β€” print debug messages to the screen in addition to logging them. double the chaos, double the info. πŸ–¨οΈ
  • -F, --force-all-screens β€” force Fenrir to respond on all screens, ignoring the ignore_screen setting. this temporarily overrides screen filtering for the current session. main character energy, it refuses to be ignored πŸ’β€β™€οΈ
  • -i, -I, --ignore-screen SCREEN β€” ignore specific screen(s). can be used multiple times to ignore multiple screens. this is equivalent to setting ignore_screen in the configuration file, and it gets combined with any existing ignore settings. 🚫
  • -x, --x11 β€” run in X11 terminal mode using PTY screen monitoring and X11 keyboard input scoped to the terminal window. πŸͺŸ
  • --x11-window-id WINDOWID β€” use a specific X11 terminal window id for X11 terminal mode. 🎯

πŸ‘‘ KEY CONCEPTS πŸ‘‘

πŸ”‘ Fenrir Key

The Fenrir Key is what you press to invoke screen reader commands. by default, these keys act as Fenrir Keys:

  • Insert
  • Keypad Insert
  • Meta (that's the Super/Windows key πŸͺŸ)

⌨️ Keyboard Layouts

Fenrir supports two main keyboard layouts:

  • Desktop Layout β€” uses the numeric keypad for navigation (recommended for desktop users) πŸ–₯️
  • Laptop Layout β€” alternative bindings for keyboards without a numeric keypad πŸ’»

πŸ”Ž Review Mode

Fenrir gives you a virtual cursor that lets you navigate around the screen without changing the text cursor position. lowkey essential for reviewing content without disrupting your work. 🧚


πŸš€ BASIC COMMANDS πŸš€

🧭 Essential Navigation

  • Ctrl β€” stop speech (shut up) 🀫
  • Fenrir + H β€” toggle tutorial mode (interactive help system) πŸŽ“
  • Fenrir + Q β€” quit Fenrir πŸ‘‹
  • Fenrir + Keypad 5 β€” read current screen πŸ“–
  • Keypad 8 β€” read current line πŸ“ƒ
  • Keypad 5 β€” read current word πŸ“
  • Keypad 2 β€” read current character πŸ”€
  • Fenrir + T β€” announce current time ⏰
  • Fenrir + S β€” spell check current word βœ…

πŸ” Review Commands (Desktop Layout)

  • Keypad 7 β€” review previous line ⬆️
  • Keypad 9 β€” review next line ⬇️
  • Keypad 4 β€” review previous word ⬅️
  • Keypad 6 β€” review next word ➑️
  • Keypad 1 β€” review previous character 🐾
  • Keypad 3 β€” review next character 🐾
  • Fenrir + Keypad dot β€” exit review mode πŸšͺ

πŸ“‹ Clipboard Operations

  • Fenrir + C β€” copy marked text to clipboard πŸ“Ž
  • Fenrir + V β€” paste clipboard contents πŸ“₯
  • Fenrir + Shift + C β€” read current clipboard πŸ”Š
  • Fenrir + X β€” set mark (for text selection) πŸ–οΈ
  • Fenrir + Shift + X β€” announce marked text πŸ“’

βš™οΈ CONFIGURATION βš™οΈ

πŸ“ Settings File

the main configuration file lives at:

  • /etc/fenrirscreenreader/settings/settings.conf (system-wide installation) 🏠
  • ~/.local/share/stormux/fenrirscreenreader/settings/settings.conf (user-local settings) 🧸
  • config/settings/settings.conf (development/git version) πŸ§‘β€πŸ’»
okay here's the tea: when Fenrir runs as a regular user, including fenrir -x, it loads the user-local settings file if it exists. if it does not exist, Fenrir falls back to the system settings file β€” but saving settings writes to the user-local path. and when Fenrir runs as root, settings save to the system-wide path by default. πŸ“Œ
also: user sound themes are loaded before system themes from ~/.local/stormux/fenrir/sounds/. user scripts are loaded before configured system scripts from ~/.local/stormux/fenrir/. order matters bestie 🫢

πŸ—‚οΈ Key Sections

  • [speech] β€” configure speech synthesis (rate, pitch, volume, driver) πŸ—£οΈ
  • [sound] β€” configure sound output and sound icons πŸ””
  • [keyboard] β€” configure input driver and keyboard layout ⌨️
  • [screen] β€” configure screen reading driver and ignored screens πŸ–₯️
  • [general] β€” general settings like punctuation, clipboard, and debug levels 🧾

🧩 Driver Configuration

Fenrir runs a modular driver system, so you can mix and match:

Speech Drivers:

  • speechdDriver β€” Speech-dispatcher (recommended) ⭐
  • genericDriver β€” command-line TTS (espeak, etc.) πŸ”ˆ
  • dectalkDriver β€” DECtalk-compatible serial hardware speech πŸ—£οΈ
  • litetalkDriver β€” LiteTalk-compatible serial hardware speech πŸ—£οΈ
  • doubletalkDriver β€” DoubleTalk LT-compatible serial hardware speech πŸ—£οΈ
  • tripletalkDriver β€” TripleTalk-compatible serial hardware speech πŸ—£οΈ
  • debugDriver β€” debug/testing πŸ›

Sound Drivers:

  • genericDriver β€” Sox-based (default) 🎡
  • gstreamerDriver β€” GStreamer-based 🎢
  • debugDriver β€” debug/testing πŸ›

Input Drivers:

  • evdevDriver β€” Linux evdev (recommended for Linux) 🐧
  • x11Driver β€” X11 terminal-scoped input for fenrir -x πŸͺŸ

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) 🌐

🌈 EXAMPLES 🌈

  • fenrir β€” start Fenrir as a daemon with default settings. ✨
  • fenrir -f -d β€” run Fenrir in the foreground with debug output. πŸ”
  • fenrir -o speech#rate=0.8;sound#volume=0.5 β€” override speech rate and sound volume settings. 🎚️
  • fenrir -F β€” force Fenrir to work on all screens, ignoring ignore_screen settings. πŸ’ͺ
  • fenrir -s /home/user/my-fenrir.conf β€” use a custom configuration file. πŸ—‚οΈ

✨ REMOTE CONTROL ✨

Fenrir ships with a whole remote control system for automation and plugging into other apps, and honestly? it's giving main character energy πŸ’…

Configuration

Turn remote control on in /etc/fenrirscreenreader/settings/settings.conf or in your user-local settings file:

[remote]
enable=True
driver=unixDriver
enable_settings_remote=True
enable_command_remote=True

Using socat with Unix Sockets

πŸ” Instance Discovery

# List registered Fenrir instances and their socket paths
echo "ls" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

In X terminal mode (fenrir -x), multiple Fenrir instances can run at the same time, no cap. Each instance has its own private socket at /tmp/fenrirscreenreader-<pid>.sock, and one instance may also own the standard control socket. Use ls or command ls on the standard socket to find the private socket for a specific instance. Commands sent to the standard socket get handled by its owner when possible; otherwise they get forwarded to a registered private socket, preferring the sender's Fenrir ancestor when one can be found. Bestie behavior fr fr 🫢

πŸ—£οΈ Basic Speech Control

# Interrupt current speech
echo "command interrupt" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

# Speak custom text
echo "command say Hello, this is a test" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

# Temporarily disable speech
echo "command tempdisablespeech" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

βš™οΈ Settings Control

# Enable highlight tracking
echo "setting set focus#highlight=True" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

# Change speech rate
echo "setting set speech#rate=0.8" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

# Change punctuation level (none/some/most/all)
echo "setting set general#punctuation_level=all" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

# Voice and TTS control
echo "setting set speech#voice=en-us+f3" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

# Multiple settings at once
echo "setting set speech#rate=0.8;sound#volume=0.7;general#punctuation_level=most" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

# Reset all settings
echo "setting reset" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

πŸ“‹ Clipboard Operations

# Add text to clipboard
echo "command clipboard Text to copy" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

# Export clipboard to file
echo "command exportclipboard" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-daemon.sock

Command Reference

πŸ’¬ Speech Commands

  • command say <text> β€” speak the text you give it, out loud, iconic
  • command interrupt β€” stop whatever speech is happening right now
  • command tempdisablespeech β€” no talking until the next key press
  • ls / list / command ls / command list β€” list all the registered Fenrir instances

πŸŽ›οΈ Settings Commands

  • setting set <section>#<key>=<value> β€” set a configuration value
  • setting reset β€” reset all the settings back to defaults
  • setting save [path] β€” save your current settings

🌈 Other Commands

  • command clipboard <text> β€” add text to the clipboard
  • command window <x1> <y1> <x2> <y2> β€” define the window area
  • command resetwindow β€” go back to full screen
  • command vmenu <menu_path> β€” set the virtual menu
  • command resetvmenu β€” reset the virtual menu
  • command quitapplication β€” quit Fenrir

Important Controllable Settings

πŸ—£οΈ Speech Control

  • general#punctuation_level=none/some/most/all β€” how much punctuation gets spoken
  • speech#rate=0.1-1.0 β€” speech rate
  • speech#pitch=0.1-1.0 β€” speech pitch
  • speech#volume=0.1-1.0 β€” speech volume
  • speech#voice=voice_name β€” pick your voice
  • speech#module=module_name β€” pick your TTS module

πŸ–₯️ Screen Control

  • screen#ignore_screen=1,2,3 β€” the TTY screens to ignore
  • focus#highlight=True/False β€” follow the text highlighting

⌨️ Input Control

  • keyboard#char_echo_mode=0-2 β€” character echo mode
  • keyboard#word_echo=True/False β€” word echo on or off

πŸ“ FILES πŸ“

  • /etc/fenrirscreenreader/settings/settings.conf β€” the main configuration file
  • ~/.local/share/stormux/fenrirscreenreader/settings/settings.conf β€” you guessed it, the user-local configuration file
  • /etc/fenrirscreenreader/keyboard/ β€” where the keyboard layout definitions live
  • /etc/fenrirscreenreader/punctuation/ β€” punctuation level definitions, hi
  • /usr/share/sounds/fenrirscreenreader/ β€” system sound themes
  • ~/.local/stormux/fenrir/sounds/ β€” your own user sound themes πŸŽ€
  • ~/.local/stormux/fenrir/ β€” user scripts
  • /var/log/fenrir.log β€” the debug log file
  • /run/fenrir.pid β€” process ID file, only when running as a daemon

🌱 ENVIRONMENT 🌱

Fenrir respects standard Linux permissions and needs appropriate access to these:

  • /dev/input/* (for the evdev input driver)
  • /dev/uinput (for key injection)
  • /dev/vcsa* (for the VCSA screen driver)
  • DBus system bus (for screen change detection)

πŸ“¦ DEPENDENCIES πŸ“¦

βœ… Required

  • Python 3.6 or later
  • python3-evdev (for the evdev input driver)
  • python3-pyudev (for device detection)
  • speech-dispatcher and python3-speechd (for speech)
  • sox with opus support (for sound)
  • espeak-ng (for speech synthesis)

✨ Optional

  • python3-pyenchant and aspell-* (for spell checking)
  • python3-daemonize (for daemon mode)
  • pyalsaaudio (for ALSA volume control)

🚦 SIGNALS 🚦

  • SIGTERM, SIGINT β€” gracefully shut down Fenrir

🎯 EXIT STATUS 🎯

  • 0 β€” success, we slayed
  • 1 β€” general error (configuration, permission, etc.)

πŸ› BUGS πŸ›

Report bugs to the project maintainer or through the project repository. Spill the tea, bestie, they wanna know πŸ™ˆ


πŸ‘‘ AUTHORS πŸ‘‘

  • Current maintainer: Storm Dragon
  • Previous developer: Chrys
  • Contributors: Jeremiah and others

This software is licensed under the LGPL v3.


πŸ”­ SEE ALSO πŸ”­


okay that's literally the whole page, bestie, we did it πŸ’– this gorgeous thing is the Fenrir Screen Reader, version/date 2025, and yes you may absolutely screenshot and send it to the group chat. periodt. πŸ’…βœ¨πŸ¦‹

πŸ“¦ where this page comes from