() | () |
Fenrir is a modern command line screen reader written in Python3.
It has a modular structure, a flexible based driver model, is highly configurable and easy to customize and extend (see Developer Manual (fenrir_development_manual)).
Please see the following pages for the current (fenrir_current_version) and Git (fenrir_git_version) version of Fenrir.
Fenrir requires several drivers to interact with the operating system.
A speech driver is for communication with the text to speech system like Speech-Dispatcher (#SpeechDispatcher) or Espeak (http://espeak.sourceforge.net). \ See section Speech (#Speech) in ''settings.conf'' for more information.
This driver is used by default. It uses Speech-dispatcher as its backend.
Dependencies:
Uses Espeak via Python bindings.
Dependencies:
This invokes speech via a sub-process. This is almost the same as using the commandline. The performance depends on the overhead of the speech synthesis application but it is really flexible.
Dependencies:
The Requirements are flexible, they depend on the configuration in settings.conf.
this is just for debugging, logs are output to the screen and logged as well.
To play sound icons and similar.\ See section Sound (#Sound) in ''settings.conf'' for more information.
This driver is used by default.
Dependencies:
if you prefer to use Gstreamer for sound output.
Dependencies:
this is just for debugging, logs are output to the screen and logged as well.
Input drivers are to capture keyboard shortcuts issued to the screen reader
See section Keyboard (#Keyboard) in ''settings.conf'' for more information.
This driver is used by default.
Evdev is the low level input device framework for Linux.
Dependencies:
The job of a screen driver is to get the information of current screen content.\ See section Screen (#Screen) in ''settings.conf'' for more information.
This driver is used by default. For Linux VCSA devices. These exist on any current standard installation of Linux.
Dependencie s:
This is for Braille support. Braille is currently a work in progress and is planned for the Fenrir 2.0 release.\ See section Braille (#Braille) in ''settings.conf'' for more information.
This driver is used by default. It uses BrlTTY (brltty) to communicate with with a Braille device.
Dependencies:
Currently Fenrir completely supports the following Platforms:
Fenrir can run without installation. It just requires the dependencies are installed first.
We recommend to try it out before installation to be sure everything works and prevent yourself from experiencing a non-talking environment.
Fenrir does not require installation. You can try it and make sure everything works before you decide to install. In this way you can be sure that your system doesnt break or stop talking. for that you can just grab the code and run as root ''src/fenrir/fenrir'' (in foreground) or ''src/fenrir/fenrir-daemon'' (in background, used by systemd for autostart)
For Arch there are PKGBUILDs in the AUR:
this installs Fenrir as the following
* Application:''/opt/fenrir'' * Settings:''/etc/fenrir'' * Sound Icons:''/usr/share/fenrirscreenreader/''
to remove Fenrir just run uninstall.sh as root
if you want to get the latest code you can use git to get a development snapshot:
git clone https://github.com/chrys87/fenrir.git
To start Fenrir once: systemctl start fenrir
To enable auto start on system boot: systemctl enable fenrir
If you are using Fenrir for the first time you may want to take a look at these resources:
Normal commands can be invoked in two ways: 1. Using a Metakey (FenrirKey (#Fenrir%20Key)) 2. Shortcuts with a single key
See section Keyboard (#Keyboard) in ''settings.conf'' for more information. #### Fenrir Key
The Fenrir Key is for invoking screen reader commands. Fenrir can utilize more than one FenrirKey at the same time. By default the following keys are used: 1. Insert 2. KeyPad Insert 3. Meta (Super, Windows)
To invoke "Scripts" the Script Key is mandatory. The shortcut is encoded in the filename of the script. See Scripting (#Scripting) #### Desktop Layout
Shortcut | Command |
FenrirKey + H | toggle tutorial mode (#Tutorial%20Mode) |
CTRL | shut up (interrupts speech) (#shut%20up) |
FenrirKey + KeyPad 9 | reviews bottom (#review%20bottom) |
FenrirKey + KeyPad 7 | reviews top (#review%20top) |
KeyPad 8 | reviews current line (#review%20current%20line) |
KeyPad 7 | reviews previous line (#review%20previous%20line) |
KeyPad 9 | reviews next line (#review%20next%20line) |
FenrirKey + KeyPad 4 | reviews line beginning (#review%20line%20beginning) |
FenrirKey + KeyPad 6 | reviews line ending (#review%20line%20ending) |
FenrirKey + KeyPad 1 | reviews line first character (#review%20line%20first%20character) |
FenrirKey + KeyPad 3 | reviews line last character (#review%20line%20last%20character) |
FenrirKey + Alt + 1 | presents first line (#present%20first%20line) |
FenrirKey + Alt + 2 | presents last line (#present%20last%20line) |
KeyPad 5 | reviews current word (#review%20current%20word) |
KeyPad 4 | reviews previous word (#review%20previous%20word) |
KeyPad 6 | reviews next word (#review%20next%20word) |
FenrirKey + Shift + KeyPad 5 | reviews current word phonetic (#review%20current%20word%20phonetic) |
FenrirKey + Shift + KeyPad 4 | reviews previous word phonetic (#review%20previous%20word%20phonetic) |
FenrirKey + Shift + KeyPad 6 | reviews next word phonetic (#review%20next%20word%20phonetic) |
KeyPad 2 | reviews current char (#review%20current%20character) |
KeyPad 1 | reviews previous char (#review%20previous%20character) |
KeyPad 3 | reviews next char (#review%20next%20character) |
FenrirKey + Shift + KeyPad 2 | reviews current character phonetic (#review%20current%20character%20phonetic) |
FenrirKey + Shift + KeyPad 1 | reviews previous character phonetic (#review%20previous%20character%20phonetic) |
FenrirKey + Shift + KeyPad 3 | reviews next character phonetic (#review%20next%20character%20phonetic) |
FenrirKey + CTRL + KeyPad 8 | reviews up (#review%20up) |
FenrirKey + CTRL + KeyPad 2 | reviews down (#review%20down) |
FenrirKey + KeyPad dot | exit review (#exit%20review) |
KeyPad dot | cursor position (#cursor%20position) |
FenrirKey + I | indent curr line (#indent%20current%20line) |
FenrirKey + KeyPad 5 | current screen (#current%20screen) |
FenrirKey + KeyPad 8 | current screen before cursor (#current%20screen%20before%20cursor) |
FenrirKey + KeyPad 2 | current screen after cursor (#current%20screen%20after%20cursor) |
<Unbound> | cursor read to end of line (#cursor%20read%20to%20end%20of%20line) |
<Unbound> | cursor column (#cursor%20column) |
<Unbound> | cursor line number (#cursor%20line%20number) |
<Unbound> | Braille flush (#braille%20flush) |
<Unbound> | Braille pan left (#braille%20pan%20left) |
<Unbound> | Braille pan right (#braille%20pan%20right) |
<Unbound> | Braille return to cursor (#braille%20return%20to%20cursor) |
FenrirKey + CTRL + 1 | clear bookmark 1 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 1 | set bookmark 1 (#set%20Bookmark%20X) |
FenrirKey + 1 | bookmark 1 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 2 | clear bookmark 2 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 2 | set bookmark 2 (#set%20Bookmark%20X) |
FenrirKey + 2 | bookmark 2 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 3 | clear bookmark 3 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 3 | set bookmark 3 (#set%20Bookmark%20X) |
FenrirKey + 3 | bookmark 3 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 4 | clear bookmark 4 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 4 | set bookmark 4 (#set%20Bookmark%20X) |
FenrirKey + 4 | bookmark 4 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 5 | clear bookmark 5 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 5 | set bookmark 5 (#set%20Bookmark%20X) |
FenrirKey + 5 | bookmark 5 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 6 | clear bookmark 6 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 6 | set bookmark 6 (#set%20Bookmark%20X) |
FenrirKey + 6 | bookmark 6 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 7 | clear bookmark 7 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 7 | set bookmark 7 (#set%20Bookmark%20X) |
FenrirKey + 7 | bookmark 7 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 8 | clear bookmark 8 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 8 | set bookmark 8 (#set%20Bookmark%20X) |
FenrirKey + 8 | bookmark 8 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 9 | clear bookmark 9 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 9 | set bookmark 9 (#set%20Bookmark%20X) |
FenrirKey + 9 | bookmark 9 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 0 | clear bookmark 10 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 0 | set bookmark 10 (#set%20Bookmark%20X) |
FenrirKey + 0 | bookmark 10 (#read%20Bookmark%20X) |
FenrirKey + KeyPad Slash | set window application (#Create%20Window) |
2 * FenrirKey + KeyPad Slash | clear window application (#Remove%20Window) |
KeyPad Plus | read last incoming (#last%20incoming) |
FenrirKey + F2 | toggles braille (#toggle%20braille) |
FenrirKey + F3 | toggles sound (#toggle%20sound) |
FenrirKey + F4 | toggles speech (#toggle%20speech) |
KeyPad Enter | temporarily disables speech (#disable%20speech%20temporarily) |
FenrirKey + CTRL + P | toggles punctuation level (#toggle%20punctuation%20level) |
FenrirKey + RightBrace | toggle auto spell check (#toggle%20auto%20spell%20check) |
FenrirKey + Backslash | toggles output (#toggle%20output) |
FenrirKey + CTRL + E | toggles emoticons (#toggle%20emoticons) |
FenrirKey + KeyPad Enter | toggles auto read (#toggle%20auto%20read) |
FenrirKey + CTRL + T | toggles auto time (#toggle%20auto%20time) |
FenrirKey + KeyPad ASTERISK | toggles highlight tracking (#toggle%20highlight%20tracking) |
FenrirKey + Q | quits fenrir (#quit%20Fenrir) |
FenrirKey + T | Announce time (#Time) |
2 * FenrirKey + T | Announce date (#Date) |
FenrirKey + S | spell check (#spell%20check) |
2 * FenrirKey + S | add word to spell check (#add%20word%20to%20spell%20check) |
FenrirKey + Shift + S | removes word from spell check (#removes%20word%20from%20spell%20check) |
FenrirKey + Backspace | forward keypress (#forward%20keypress) |
FenrirKey + Up | increase speech volume (#increase%20speech%20volume) |
FenrirKey + Down | decrease speech volume (#decrease%20speech%20volume) |
FenrirKey + Right | increase speech rate (#increase%20speech%20rate) |
FenrirKey + Left | decrease speech rate (#decrease%20speech%20rate) |
FenrirKey + Alt + Right | increase speech pitch (#increase%20speech%20pitch) |
FenrirKey + Alt + Left | decrease speech pitch (#decrease%20speech%20pitch) |
FenrirKey + Alt + Up | increase sound volume (#increase%20sound%20volume) |
FenrirKey + Alt + Down | decrease sound volume (#decrease%20sound%20volume) |
FenrirKey + CTRL + Shift + C | clears clipboard (#clear%20clipboard) |
FenrirKey + Home | first clipboard (#first%20clipboard) |
FenrirKey + End | last clipboard (#last%20clipboard) |
FenrirKey + PageUp | previous clipboard (#previous%20clipboard) |
FenrirKey + PageDown | next clipboard (#next%20clipboard) |
FenrirKey + Shift + C | current clipboard (#read%20current%20clipboard) |
FenrirKey + C | copy marked text to clipboard (#copy%20marked%20to%20clipboard) |
FenrirKey + V | paste clipboard contents (#paste%20clipboard) |
FenrirKey + P | import clipboard from file (#import%20clipboard%20from%20file) |
FenrirKey + Alt + Shift +C | export clipboard to file (#export%20clipboard%20to%20file) |
FenrirKey + CTRL + Shift + X | remove marks (#Remove%20Marks) |
FenrirKey + X | set mark (#Set%20mark) |
FenrirKey + Shift + X | announce marked text (#Get%20text%20between%20marks) |
Linux specific | |
<Unbound> | export clipboard to X |
FenrirKey + CTRL + Up | include Alsa volume |
FenrirKey + CTRL + Down | decrease Alsa volume |
Shortcut | Command |
FenrirKey + H | toggle tutorial mode (#Tutorial%20Mode) |
CTRL | shut up (interrupts speech) (#shut%20up) |
FenrirKey + Shift + O | reviews bottom (#review%20bottom) |
FenrirKey + Shift + U | reviews top (#review%20top) |
FenrirKey + I | reviews current line (#review%20current%20line) |
FenrirKey + U | reviews previous line (#review%20previous%20line) |
FenrirKey + O | reviews next line (#review%20next%20line) |
FenrirKey + Shift + J | reviews line beginning (#review%20line%20beginning) |
FenrirKey + Shift + L | reviews line ending (#review%20line%20ending) |
FenrirKey + CTRL + J | reviews line first character (#review%20line%20first%20character) |
FenrirKey + CTRL + L | reviews line last character (#review%20line%20last%20character) |
FenrirKey + Alt + 1 | presents first line (#present%20first%20line) |
FenrirKey + Alt + 2 | presents last line (#present%20last%20line) |
FenrirKey + K | reviews current word (#review%20current%20word) |
FenrirKey + J | reviews previous word (#review%20previous%20word) |
FenrirKey + L | reviews next word (#review%20next%20word) |
FenrirKey + CTRL + ALT + K | reviews current word phonetic (#review%20current%20word%20phonetic) |
FenrirKey + CTRL + ALT + J | reviews previous word phonetic (#review%20previous%20word%20phonetic) |
FenrirKey + CTRL + ALT + L | reviews next word phonetic (#review%20next%20word%20phonetic) |
FenrirKey + comma | reviews current character (#review%20current%20character) |
FenrirKey + M | reviews previous character (#review%20previous%20character) |
FenrirKey + dot | reviews next character (#review%20next%20character) |
FenrirKey + CTRL + ALT + comma | reviews current character phonetic (#review%20current%20character%20phonetic) |
FenrirKey + CTRL + ALT + M | reviews previous character phonetic (#review%20previous%20character%20phonetic) |
FenrirKey + CTRL + ALT + dot | reviews next character phonetic (#review%20next%20character%20phonetic) |
FenrirKey + CTRL + I | reviews up (#review%20up) |
FenrirKey + CTRL + comma | reviews down (#review%20down) |
FenrirKey + Slash | exit review (#exit%20review) |
FenrirKey + Shift + dot | cursor position (#cursor%20position) |
2 * FenrirKey + I | indent curr line (#indent%20current%20line) |
FenrirKey + Shift + K | current screen (#current%20screen) |
FenrirKey + Shift + I | current screen before cursor (#current%20screen%20before%20cursor) |
FenrirKey + Shift + comma | current screen after cursor (#current%20screen%20after%20cursor) |
<Unbound> | cursor read to end of line (#cursor%20read%20to%20end%20of%20line) |
<Unbound> | cursor column (#cursor%20column) |
<Unbound> | cursor line number (#cursor%20line%20number) |
<Unbound> | Braille flush (#braille%20flush) |
<Unbound> | Braille pan left (#braille%20pan%20left) |
<Unbound> | Braille pan right (#braille%20pan%20right) |
<Unbound> | Braille return to cursor (#braille%20return%20to%20cursor) |
FenrirKey + CTRL + 1 | clear bookmark 1 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 1 | set bookmark 1 (#set%20Bookmark%20X) |
FenrirKey + 1 | bookmark 1 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 2 | clear bookmark 2 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 2 | set bookmark 2 (#set%20Bookmark%20X) |
FenrirKey + 2 | bookmark 2 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 3 | clear bookmark 3 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 3 | set bookmark 3 (#set%20Bookmark%20X) |
FenrirKey + 3 | bookmark 3 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 4 | clear bookmark 4 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 4 | set bookmark 4 (#set%20Bookmark%20X) |
FenrirKey + 4 | bookmark 4 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 5 | clear bookmark 5 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 5 | set bookmark 5 (#set%20Bookmark%20X) |
FenrirKey + 5 | bookmark 5 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 6 | clear bookmark 6 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 6 | set bookmark 6 (#set%20Bookmark%20X) |
FenrirKey + 6 | bookmark 6 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 7 | clear bookmark 7 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 7 | set bookmark 7 (#set%20Bookmark%20X) |
FenrirKey + 7 | bookmark 7 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 8 | clear bookmark 8 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 8 | set bookmark 8 (#set%20Bookmark%20X) |
FenrirKey + 8 | bookmark 8 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 9 | clear bookmark 9 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 9 | set bookmark 9 (#set%20Bookmark%20X) |
FenrirKey + 9 | bookmark 9 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 0 | clear bookmark 10 (#clear%20Bookmark%20X) |
FenrirKey + Shift + 0 | set bookmark 10 (#set%20Bookmark%20X) |
FenrirKey + 0 | bookmark 10 (#read%20Bookmark%20X) |
FenrirKey + CTRL + 8 | set window application (#Create%20Window) |
2 * FenrirKey + CTRL + 8 | clear window application (#Remove%20Window) |
FenrirKey + Semicolon | read last incoming (#last%20incoming) |
FenrirKey + F2 | toggles braille (#toggle%20braille) |
FenrirKey + F3 | toggles sound (#toggle%20sound) |
FenrirKey + F4 | toggles speech (#toggle%20speech) |
FenrirKey + Enter | temporarily disables speech (#disable%20speech%20temporarily) |
FenrirKey + Shift + CTRL + P | toggles punctuation level (#toggle%20punctuation%20level) |
FenrirKey + RightBrace | toggle auto spell check (#toggle%20auto%20spell%20check) |
FenrirKey + Shift + Enter | toggles output (#toggle%20output) |
FenrirKey + Shift + E | toggles emoticons (#toggle%20emoticons) |
FenrirKey + Enter | toggles auto read (#toggle%20auto%20read) |
FenrirKey + CTRL + T | toggles auto time (#toggle%20auto%20time) |
FenrirKey + Y | toggles highlight tracking (#toggle%20highlight%20tracking) |
FenrirKey + Q | quits fenrir (#quit%20Fenrir) |
FenrirKey + T | Announce time (#Time) |
2 * FenrirKey + T | Announce date (#Date) |
FenrirKey + S | spell check (#spell%20check) |
2 * FenrirKey + S | add word to spell check (#add%20word%20to%20spell%20check) |
FenrirKey + Shift + S | removes word from spell check (#removes%20word%20from%20spell%20check) |
FenrirKey + Backspace | forward keypress (#forward%20keypress) |
FenrirKey + Up | increase speech volume (#increase%20speech%20volume) |
FenrirKey + Down | decrease speech volume (#decrease%20speech%20volume) |
FenrirKey + Right | increase speech rate (#increase%20speech%20rate) |
FenrirKey + Left | decrease speech rate (#decrease%20speech%20rate) |
FenrirKey + Alt + Right | increase speech pitch (#increase%20speech%20pitch) |
FenrirKey + Alt + Left | decrease speech pitch (#decrease%20speech%20pitch) |
FenrirKey + Alt + Up | increase sound volume (#increase%20sound%20volume) |
FenrirKey + Alt + Down | decrease sound volume (#decrease%20sound%20volume) |
FenrirKey + CTRL + Shift + C | clears clipboard (#clear%20clipboard) |
FenrirKey + Home | first clipboard (#first%20clipboard) |
FenrirKey + End | last clipboard (#last%20clipboard) |
FenrirKey + PageUp | previous clipboard (#previous%20clipboard) |
FenrirKey + PageDown | next clipboard (#next%20clipboard) |
FenrirKey + Shift + C | current clipboard (#read%20current%20clipboard) |
FenrirKey + C | copy marked text to clipboard (#copy%20marked%20to%20clipboard) |
FenrirKey + V | paste clipboard contents (#paste%20clipboard) |
FenrirKey + F5 | import clipboard from file (#import%20clipboard%20from%20file) |
FenrirKey + Alt + Shift +C | export clipboard to file (#export%20clipboard%20to%20file) |
FenrirKey + CTRL + Shift + X | remove marks (#Remove%20Marks) |
FenrirKey + X | set mark (#Set%20mark) |
FenrirKey + Shift + X | announce marked text (#Get%20text%20between%20marks) |
Linux specific | |
<Unbound> | export clipboard to X |
FenrirKey + CTRL + Up | increases Alsa volume |
FenrirKey + CTRL + Down | decreases Alsa volume |
Just stops fenrir. #### shut up
Interrupt the current spoken. ### Review Modes
Fenrir provides a virtual cursor, with it you can navigate all over the screen without changing the text cursor.
Using the review feature will open the review mode automatically.
The review cursor always starts from the text cursor. Attention: after using the review mode, the review cursor will stay open until you use the ''exit review'' shortcut.
Think when using clipboard operations and similar. The review cursor is always prefered over the text cursor.
Fenrir sounds a bell sound if the used review command jumps to another line or end of screen. #### exit review
You can leave the review mode by pressing the ''exit review'' shortcut. #### review bottom
Set the review cursor to first column in the last line. #### review top
Set the review cursor to the first column in the first line #### review current line
Set the review cursor to the beginn of the the current line and review it. #### review previous line
Set the review cursor to the previous line and review it. #### review next line
Set the review cursor to the next line and review it. #### review line beginning
Set the review cursor to the begin of the current line #### review line ending
Set the review cursor to the end of the current line #### review line first character
Set the review cursor the first char (that is not space) in the current line and review it. #### review line last character
Set the review cursor the last char (that is not space) in the current line and review it. #### review current word
Sets the review cursor to the beginning of the current word and review it. #### review previous word
Sets the review cursor to the beginning of the previous word and review it. #### review next word
Sets the review cursor to the beginning of the next word and review it. #### review current word phonetic
Sets the review cursor to the beginning of the current word and spell it phonetic. #### review previous word phonetic
Sets the review cursor to the beginning of the previous word and spell it phonetic. #### review next word phonetic
Sets the review cursor to the beginning of the next word and spell it phonetic. #### review current character
Does not change the review cursor. Just announce the current char. #### review previous character
Sets review cursor to the previous column and review it #### review next character
Sets review cursor to the next column and review it #### review current character phonetic
Does not change the review cursor. Just announce the current char phonetic. #### review previous character phonetic
Sets review cursor to the previous column and announce the char phonetic. #### review next character phonetic
Sets review cursor to the next column and announce the char phonetic. #### review up
Set the review cursor in the same column one line above the current one and review it. #### review down
Set the review cursor in the same column one line below the current one and review it. ### Handling marking
A mark defines a point of origin or end to prepare to copy or paste a block of text. \ Examples where you need marks are:
How to set a mark: 1. navigate with review or textcursor to the position you want to set the mark. Attention: if a review cursor is set, that is the prefered. If you want to use text cursor, be sure that you are not in review mode. 2. press shortcut for ''set mark'' you can set two marks (begin and end). Some commands allow some simpler usecases just using the whole line if only one mark is set. you may want to try this out. #### Get text between marks
To get the text that is currently between your marks press shortcut for ''marked text''.\ #### Remove Marks
You can remove all current marks by pressing the shortcut for ''remove marks''. Changing the screen also removes the marks. ### Screen Interaction
Fenrir provides several methods to interact with the current screen. #### forward keypress
This just forwards the next shortcut to the screen Fenrir shortcut or not. This is useful if the currently pressed shortcut is also in use by Fenrir. #### Clipboard
Fenrir provides a clipboard with multible items represented by a list. You navigate throught the list and paste the selected clipboard. ##### copy marked to clipboard
To copy something to the clipboard you need to set one or two marks. if you set one mark, the text between the mark and your current cursor is copied to clipboard. Setting two marks just copies the text between the marks into the clipboard. If you copy something it is always placed as the first item on your clipboard. ##### clear clipboard
You can remove all items from the current clipboard by ''clear clipboard'' functionality. ##### first clipboard
This moves quick to the first item of the clipboard. ##### last clipboard
This moves quick to the last item of the clipboard. ##### previous clipboard
Go to previous item in the clipboard. ##### next clipboard
Go to next item on the clipboard. ##### read current clipboard
Read the content of the current item of the clipboard. ##### paste clipboard
Pass whatever item is currently selected by first, last, prev or next clipboard commands. if no special clipboard is selected the (last copied) is used. ##### export clipboard to file
This allows you to export the current clipboard to a configurable filepath. This is useful to share the clipboard with a graphical desktop. ##### import clipboard from file
Import a clipboard from a configurable file. This is useful to share the clipboard with a graphical desktop. ### Quick Settings
Fenrir provides shortcuts to change settings temporarily and on the fly without the need to permanently change the ''settings.conf'' file. #### toggle braille
Enables and disables Braille. This is not persistent stored in your ''settings.conf'' but during run time. #### toggle sound
Enables and disables sound. This is not persistent stored in your ''settings.conf'' but during run time. #### toggle speech
Enables and disables speech. This is not persistent stored in your ''settings.conf'' but during run time. #### disable speech temporarily
Disables the speech until next key press. it might be useful if you want to listen to music or similar. As soon as a key is pressed it is going to be enabled again. #### toggle punctuation level
Cycle between all available punctuation levels. This is not persistent stored in your ''settings.conf'' but during run time. #### toggle auto spell check
Enables and disables automatic spellchecker (when typing). This is not persistent stored in your ''settings.conf'' but during run time. #### toggle emoticons
Enables and disables emoticons. This is not persistent stored in your ''settings.conf'' but during runtime. #### toggle output
Enables and disables all output at once (sound, Braille, speech). This is not persistent stored in your ''settings.conf'' but during run time. #### toggle auto read
Enables and disables what is automatically spoken. This is not persistent stored in your ''settings.conf'' but during run time. #### toggle auto time
Enables and disables auto time functionality. This is not persistent stored in your ''settings.conf'' but during run time. #### toggle highlight tracking
Enables and disables highlight tracking. This is not persistent stored in your ''settings.conf'' but during run time. #### increase speech volume
Increase the volume of the speech. This is not persistent stored in your ''settings.conf'' but during runtime. #### decrease speech volume
Decrease the volume of the speech. This is not persistent stored in your ''settings.conf'' but during runtime. #### increase speech rate
Increase the rate of the speech. This is not persistent stored in your ''settings.conf'' but during runtime. #### decrease speech rate
Decrease the rate of the speech. This is not persistent stored in your ''settings.conf'' but during runtime. #### increase speech pitch
Increase the pitch of the speech. This is not persistent stored in your ''settings.conf'' but during runtime. #### decrease speech pitch
Decrease the pitch of the speech. This is not persistent stored in your ''settings.conf'' but during runtime. #### increase sound volume
Increase the volume of the sound. This is not persistent stored in your ''settings.conf'' but during runtime. #### decrease sound volume
Decrease the volume of the sound. This is not persistent stored in your ''settings.conf'' but during runtime. ### Window Mode
Fenrir supports window mode, a window is a partial area of the screen. #### Create Window
To create a window you need to do the following: 1. set a beginning mark (as the start of the window) 2. set an end mark (where the window should end) 3. press ''set window application'' shortcut. Now Fenrir ignores anything outside of the window.\ #### Remove Window
You can remove the window by pressing ''the clear window application'' shortcut. Now Fenrir will read everything on the screen again. ### Tracking Modes
Different types of tracking are currently supported See section Focus (#Focus) in ''settings.conf'' for more information. #### Cursor Tracking
This follows the text cursor. This is the typical way an application works. This is used by:
In some applications there are no text cursors. In those applications cursor changes are represented by different colors or attributes (underlined or bold). This mode tracks and announces these changes for you. This is used by:
* wifi-menu * dialog * alpine
Fenrir provides a Tutorial mode. When you enter tutorial mode, screen reader commands are intercepted and explained instead of executing them. ''Arrow up'' and ''Arrow Down'' let you navigate through a list of all available commands with shortcuts and description. Pressing escape leaves the tutorial mode.
Announces the current Time. #### Date
Announces the current Date. #### Bookmarks
Bookmarks provide quick access to part of the screen without the need to navigate to the area. By default Fenrir provides 10 bookmarks. Those can be set and accessed via shortcut. This is useful for status lines or other information where the position does not change. ##### set Bookmark X
You need to set the bookmark first. For that you have to set one or two lines for use. 1. Set marks (one or two) 2. press shortcut for ''set bookmark X''. X represents the number 1 - 10. ##### read Bookmark X
If a bookmark is set you can access the area just by pressing the ''bookmark X'' shortcut. X represents the number 1 - 10. Bookmarks are dynamic. That means the content changes with the screen. ##### clear Bookmark X
to remove a bookmark just press the ''clear bookmark X'' shortcut. X represents the number 1 - 10. Afterward the bookmark is no longer available. #### cursor position
You can get information about the current cursor and its position by using the "cursor position" functionality. #### indent current line
Announce the current indent level of the current line. It represents the number of trailing spaces of the line. #### current screen
Reads all the current screen from the beginning to the end. #### current screen before cursor
Reads current screen from the beginning of the screen to the current cursor position. #### current screen after cursor
Read anything after current cursor position to the end. #### cursor read to end of line
Read from the current cursor position to the end of the current line. #### cursor column
Read the current X position of a cursor (column of the current line). #### cursor line number
Read the current Y position of a cursor (line number). #### present first line
Reads just the first line. this is maybe useful for status information. #### present last line
Presets the last line. This is maybe useful for status information. #### last incoming
Repeat the last automatically incoming text. ## Input
Fenrir provides different methods of echoing content:
Fenrir has a built-in spellchecker, it can invoke automatically while typing or be called by a shortcut. Commands to add or remove the current word to the dictionary are included. As using the spellchecker is enhanced usage. You will need dictionary aspell-<language>. See section General (#General) in ''settings.conf'' for more information. #### spell check
Invokes the spellcheck on the word that contains the Review or text cursor. #### add word to spell check
Adds the word under the Review or Text cursor to the dictionary. #### removes word from spell check
Removes the word under the Review or Text cursor from the dictionary. ## Announcements
If you want to replace ":)" emoticons with "smile" in speech you can use this feature. It can be toggled on or off. You can define emoticons in a dictionary, please see Emoticon Dictionary. See section General (#General) in ''settings.conf'' to see how to enable or disable this feature.
Announce the time at periodical increments, To track the time easily. You can define 2 different ways of time announcements. 1. periodic 2. on fix minutes
Example periodic, every 20 minutes "delaySec=20":
[time] enabled=True presentTime=True presentDate=True delaySec=20 onMinutes= announce=True interrupt=False
Example on fix minutes in an hour. example every quarter "delaySec=0" and "onMinutes=00,15,30,45":
[time] enabled=True presentTime=True presentDate=True #delaySec is repected bevore onMinutes so it need to be set to 0 delaySec=0 onMinutes=00,15,30,45 announce=True interrupt=False
Promoted Lists are a nice feature if you are away from your computer or performing more longer tasks. you can define a list of words which you want to hear a sound icon for after a period of inactivity. Example if the word "Chrys" appears after 120 Seconds of inactivity: [promote] enabled=True
inactiveTimeoutSec=120 list=Chrys See section Promote (#Promote) in ''settings.conf'' for more information. ### Punctuation
Fenrir handles punctuation levels and names for you with several provided dictionaries.
See levelDict See punctuationDict ## Braille
Fenrir provides Braille support in Version >= 2.0. See section Braille (#Braille) in ''settings.conf'' for more information. ### braille flush
If a message appears on the Braille device you can flush it to get back to the review- or system cursor ### Braille pan left
If a line is longer than your Braille devices you can move the view (called panning) to the left. So you can read stuff without the need to move the review- or system cursor. ### Braille pan right
If a line is longer than your Braille devices you can move the view (called panning) to the right. So you can read stuff without the need to move the review- or system cursor. ### braille return to cursor
When you have finished reading the line on the Braille device using panning, the focus can be returned to the current used cursor by using "return to cursor" command. ## Dictionary
You can make use of different kinds of built-in dictionary's. A dictionary has a name and list of keys and values separated by :===: Example: [customDict] Chrys:===:Chrys is cool lollipop:===:lolli that means that every instance "chrys" is displayed, speech will say Chrys is cool. "lollipop" is spoken as "lolli". Before making changes to a dictionary we recommend making a backup of your current dictionary in case future updates overwrite your local changes. ### Punctuation
The punctuation level dict contains lists with "what punctuation is spoken in what level". the default one looks like this: [levelDict] none:===: some:===:.-$~+*-/\@ most:===:.,:-$~+*-/@!#%^&()[]}{<>; all:===:!"#$%& '()+,-./:;<=>?@[\]^_`{|}~ the level "none" has no values. so it should not speak any punctuation (sadly this is not respected by every TTS system) if "some" is the current level the following are spoken: dot dash dollar tilde plus star slash backslash at. same for most and all, you can add new levels. if you cycle punctuation levels they are recognized. the default punctuation level is set in settings.conf. The default is "some". #### Punctuation
The punctuation dictionary "[punctDict]" contains how the punctuation is spoken. Example: [punctDict] :===:line
speaks an as "line".
[punctDict] :===:underscore speaks an as underscore. for question mark an ? is appended to the word that the TTS system can announce the question correctly.
### Custom
The dict "[customDict]" is just for your own use, it just replace the key with the value without any special functionality. This might be used to fix incorrectly spoken words, make words more common, shorter or just for fun. :) ### Emoticons
The Emoticons dictionary "[emoticonDict]" by default contains some emoticons. it can replace ":)" with "smile" or "XD" with "loool" Making chat more colorful. A nice feature with this dictionary is that you can toggle the substitution on or off during run time or in settings.conf. This is useful because while doing programming or other serious work you want to hear colons and perryns not smiles. # Configuration
You can configure Fenrir in the following places (ordered by priority): 1. Commandline Parameters ''-o'' see Set settings coption (#Set%20settings%20coption) 2. /etc/fenrir/settings/settings.conf see Settigns (#Settings) 3. <sourceTree>/config/settings/settings.conf see Settigns (#Settings) 4. hard coded defaults ## Commandline Arguments
You can specify options that overwrite the setting.conf. This is done with ''-o <list of options> parameter. The list of options have the following syntax fenrir -o "section#setting=value;section#setting=value"
For example changing the sound driver to gstreamer and disabling Braille
fenrir -o "sound#driver=gstreamerDriver;braille#enabled=False=False" or change the debug level to verbose fenrir -o "general#debugLevel=3" You can find the available sections and variables here <#Settings> See Syntax #settings.conf syntax (#settings.conf%20syntax) ### settings.conf syntax
the syntax of the settings.conf (#Settings) is quite simple and similar to a "*.ini" file, there are 4 different elements. 1. Sections 2. Settings 3. Values 4. Comments
A comment starts with a # and is ignored by Fenrir. # this is a comment To group settings we have sections. A section can look like this: [Section] A setting looks like this: settingName=Value
Example: sound (#sound) # Turn sound on or off: enabled=True # Select the driver used to play sounds, choices are genericDriver and gstreamerDriver. # Sox is default. driver=genericDriver
The sound is configured in section ''sound (#sound)''.
Turn sound on or off: enabled=True Values: on=''True'', off=''False''
Select the driver used to play sounds. The genericDriver using Sox is the default.
driver=genericDriver
Available Drivers:
These are the pack of sounds used for sound icons. theme=default By default we ship two sound packs. 1. ''default'' opus encoded, for newer Sox versions 2. ''default-wav'' wav encoded, just for compatibility Sound packs are located at /usr/share/sounds/fenrirscreenreader/
Sound volume controls how loud the sounds for your selected sound pack are. volume=1.0 Values: ''0.0'' is quietest, ''1.0'' is loudest.
The generic sound driver uses shell commands for play sound and frequencies.
''genericPlayFileCommand'' defines the command that is used to play a sound file. genericPlayFileCommand=<your command for playing a file> ''genericFrequencyCommand'' defines the command that is used playing frequencies. genericFrequencyCommand=<your command for playing a frequence>
The following variables are substituted in ''genericPlayFileCommand'' and ''genericFrequencyCommand'':
Example genericPlayFileCommand (default) genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile Example genericFrequencyCommand (default) genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence ### Speech
Speech is configured in section ''[speech]''. Turn speech on or off: enabled=True Values: on=''True'', off=''False''
genericDriver or espeakDriver:
driver=speechdDriver #driver=espeakDriver
Select the driver used to generate speech output.
driver=speechdDriver
Available Drivers:
The rate selects how fast Fenrir will speak. rate=0.65 Values: Range Minimum:''0.0'' is slowest, Maximum:''1.0'' is fastest.
Pitch controls the pitch of the voice. pitch=0.5 Values: Range Minimum:''0.0'' is lowest, Maximum:''1.0'' is highest.
A Pitch for capital letters can be set. capitalPitch=0.9 Values: Range Minimum:''0.0'' is lowest, Maximum:''1.0'' is highest.
The Volume controls the loudness of the voice. volume=1.0 Values: Range Minimum:''0.0'' is quietest, Maximum:''1.0'' is loudest.
Some speech drivers like speechdDriver can support various modules. these can be set here. module=espeak Values: Text, Consult speech-dispatcher's configuration to see what modules are available.
Voice selects the varient you want to use, for example, f5 will use the female voice #5 in Espeak, or if using the Espeak module in Speech-dispatcher. To find out which voices are available, consult the documentation provided with your selected synthesizer. voice= Values: Text, see your TTS synths documentation what is available.
Select the language you want Fenrir to use. language=english-us Values: Text, see your TTS synths documentation what is available.
Read new text as it occurs autoReadIncoming=True Values: on=''True'', off=''False''
The generic speech driver uses shell commands for speech synthisus.
''genericSpeechCommand'' defines the command that is executed for creating speech The following variables are substituted in ''genericSpeechCommand'':
Example genericSpeechCommand (default): genericSpeechCommand=espeak -a fenrirVolume -s fenrirRate -p fenrirPitch -v fenrirVoice "fenrirText"
These are the minimum and maximum values of the TTS system used in genericSpeechCommand. They are needed to calculate the abstract range in volume, rate and pitch 0.0 - 1.0.
FenrirMinVolume=0 fenrirMaxVolume=200 fenrirMinPitch=0 fenrirMaxPitch=99 fenrirMinRate=80 fenrirMaxRate=450
The current volume, pitch and rate is calculated like this value = min + [volume,pitch,rate] * (min - max ) ### Braille
Braille is a WIP and not ready yet. Braille support can be configured in section ''[braille]''.
Turn braille on or off: enabled=False Values: on=''True'', off=''False''
Select the driver used for communication with a braille device. driver=brlapiDriver Values: Text, available Driver Available Drivers:
The Braille layout can be configured here layout=en Values: Text, see braille driver for layouts.
What should the flush timeout relate to flushMode=word Values: Text, an flushMode Existing flushModes:
Seconds to flush (see flushMode) flushTimeout=3 Values: Integer, in Seconds or ''-1'' = no automatic flush (manual via shortcut) The total flush time calculates in relation to flushMode.
How should the Braille cursor focus be tracked? cursorFocusMode=page Values: Text, an existing cursor focus mode Available cursor focus modes:
Define the cell on the Braille device where Fenrir should scroll and keep the cursor fixCursorOnCell=-1 Values: Integer
What cursor should Fenrir show on the Braille device cursorFollowMode=review Values: Text, an exsiting cursor following mode. Existing cursor following mode:
number of cells in panning (horizontal). How many cell should be panned on press the routing key? panSizeHorizontal=0 Values: Integer,
The settings for screens, (TTY, PTY) are configured in the ''[screen]'' section.
The driver to get the information from the screen: driver=vcsaDriver Available Drivers:
The driver updates Fenrir with changes on the screen. screenUpdateDelay=0.05 Values: in Seconds
If you want Fenrir to not be active on any screen for various reasons. Maybe an X server or Wayland is running on that screen. You can make Fenrir ignore it or multiple screens seperated by '','' with: suspendingScreen= Values: Depends on driver:
There is also the ability to let Fenrir auto detect screens that are running an X server. So Screens running an GUI can be ignored. autodetectSuspendingScreen=True Values: on=''True'', off=''False''
The settings for keyboard and input related configuration is located in the section ''keyboard (#keyboard)'' of the ''settings.conf'' file.
Select the driver used for grabbing keybord input and for recieving shortcuts. driver=evdevDriver Values: Text, available Driver Available Drivers:
You can let Fenrir know about what input devices are to be used. device=ALL Values:
Gives Fenrir exclusive access to the keyboard and lets it control keystrokes. This is needed to intercept Fenrir related shortcuts. grabDevices=True Values: on=''True'', off=''False''
The following makes sense if you are using a second screenreader and want to have some hooked events. Fenrir ignores all shortcuts then. ignoreShortcuts=False Values: on=''True'', off=''False''
The current keyboard layout used for shortcuts. keyboardLayout=desktop Values: An absolute Path to a Keyboard definition file or a Filename without extension located in ''/etc/fenrir/keyboard''
Announce characters while typing. charEcho=False Values: on=''True'', off=''False''
Announce deleted characters charDeleteEcho=True Values: on=''True'', off=''False''
Announce word after pressing space wordEcho=False Values: on=''True'', off=''False''
Interrupt speech on any keypress interruptOnKeyPress=False Values: on=''True'', off=''False''
You can filter the keys that speech should interrupt interruptOnKeyPressFilter= Values: (List) empty = all keys, otherwise interrupt with specified keys
The timeout that is used for double tap shortcuts doubleTapTimeout=0.2 Values: Seconds ### General
Overall settings can be configured from the section ''general (#general)''.
Set the current debug level: debugLevel=1 Values: off=0, error=1, warning=2, info=3
the current punctuation and dict file in use: punctuationProfile=default Values: Text, see available profiles in ''/etc/fenrir/punctuation'' or in ''sourceTree/config/punctuation''
The current punctuation level in use: punctuationLevel=some Values: Text, See available levels in the used punctuation file.
Respect pause for punctuations: respectPunctuationPause=True Values: on=''True'', off=''False''
Add a pause on Line break: newLinePause=True Values: on=''True'', off=''False''
Specify the path where the clipboard should be exported to. See export clipboard to file (#export%20clipboard%20to%20file). The variable ''$user'' is replaced by the current logged username. clipboardExportPath=/tmp/fenrirClipboard Values: Text, Systemfilepath
The number of available clipboards: numberOfClipboards=10 Values: Integer, 1 - 999
Replace emoticons like :) or ;) with text insertions: emoticons=True Values: on=''True'', off=''False''
Define the current Fenrir keys: fenrirKeys=KEY_KP0,KEY_META,KEY_INSERT Values, Text list, separated by comma.
Define the current script keys: scriptKey=KEY_COMPOSE Values, Text list, separated by comma.
The time format to be used for (time command) output: timeFormat=%H:%M:%P Values: see python specification for datetime.strftime (https///docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior)
The date format to be used for (date command) output: dateFormat=%A, %B %d, %Y Values: see python specification for datetime.strftime (https///docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior)
Enable or Disable spellcheck whilst typing: autoSpellCheck=True Values: on=''True'', off=''False''
The use of the dictionary with spellcheck: spellCheckLanguage=en_US Values: Text, see aspell dictionary's.
Folder Path for your scripts "scriptKey" functionality: scriptPath=/usr/share/fenrirscreenreader/scripts Values: Text, Existing path on file system.
Override commands or create new ones without changing the Fenrir defaults: commandPath=/usr/share/fenrirscreenreader/commands Values: Text, Existing path on file system. Subfolders in commandPath are:
The configuration for basic focus is in the section ''focus (#focus)''. Follow the text cursor: cursor=True Values: on=''True'', off=''False''
Follow highlighted text changes (Highlight Tracking): highlight=False Values: on=''True'', off=''False'' ### Review
Configurations for the review mode are in the section ''[review]''.
If "next word/ char" or "prev word/char" create a linebreak, announce it: lineBreak=True Values: on=''True'', off=''False''
If "next word/ char" or "prev word/char" cannot be performed because you reached the end of the screen, announce it: endOfScreen=True Values: on=''True'', off=''False''
Leave the review mode when pressing a key: leaveReviewOnKeypress=False Values: on=''True'', off=''False''
Leave the review mode when changing the screen (From TTY3 to TTY4): leaveReviewOnScreenChange=True Values: on=''True'', off=''False'' ### Promote
"Promoted Lists" are configured in the section ''[promote]''. Turn Promoted Lists" on or off: enabled=True Values: on=''True'', off=''False''
The minimum time interval of inactivity to activate promoting. By default it promotes after 120 Seconds inactivity: inactiveTimeoutSec=120 Values: in Seconds
Define a list of promoted words comma seperated: list= Values: text (comma seperated) Example to promote the word "nickname" or a bash prompt: list=nickname,$:,#:
The automated time announcement is configured in the section ''time (#time-2)''. Time announcement is disabled by default. Turn time announcement on or off: enabled=True Values: on=''True'', off=''False''
Should the time be announced: presentTime=True Values: on=''True'', off=''False''
Should the date be announced (just on date change): presentDate=True Values: on=''True'', off=''False''
Announce after a given period of seconds: delaySec=0 Value: in Seconds, 0 = Deactivated
Announce after fixed minutes in an hour. if delaySec is >0 onMinutes is ignored: onMinutes=00,30 Example every 15 minutes: onMinutes=00,15,30,45
Just play a soundicon, (not interrupting): announce=True Values: on=''True'', off=''False''
Interrupt current speech for time announcement: interrupt=False Values: on=''True'', off=''False'' # Customization
Scripts can be in any language, bash, python, sh or others. Place your scripts in the directory /usr/share/fenrirscreenreader/scripts/ (the path is configurable in settings.conf). The script key is the applications key. Usually this key can be found on the keyboard located just left of the right most control key. When you name a script, the key name appears in the script seperated by the sequence -. So, for example, if you have a python weather script you want assigned to the script key plus the letter w you would name the script /usr/share/fenrirscreenreader/scripts/weather__-__key_w.py Then, to access the script, simply press the script key and the letter w. Scripts must be executable. So, make sure to chmod 755 your script when you place it in the scripts directory. The script gets some parameters from fenrir when it is executed. So that information is available in your script then.
Parameter | Content |
$1 | Username of the current logged in user |
Script that just speaks the current username when pressing ScriptKey + H.\ File: ''/usr/share/fenrirscreenreader/scripts/helloWorld__-__key_h.sh'': #!/bin/bash echo $1
You can place your own commands in "/usr/share/fenrirscreenreader/commands" (path is configurable in settings.conf). Commands are python files with a special scheme. You can assign them to a shortcut using the filename without an extension or place them in a hook trigger like OnInput or OnScreenChange. For further information see developer guide. Good Examples: "date.py" (https///github.com/chrys87/fenrir/blob/master/src/fenrir/commands/commands/date.py) (announce the Date), "shut_up.py" (https///github.com/chrys87/fenrir/blob/master/src/fenrir/commands/commands/shut_up.py) (interrupt output) the basic scheme for a command is as follows:
from core import debug class command(): def __init__(self): pass def initialize(self, environment): self.env = environment def shutdown(self): pass def getDescription(self): return _('No description found') def run(self): pass def setCallback(self, callback): pass
Please report Bugs and feature requests to: https://github.com/chrys87/fenrir/issues (https///github.com/chrys87/fenrir/issues)
for bugs please provide a debug (#Howto%20create%20a%20debug%20file) file that shows the issue. ### How-to create a debug file
Please be as precise as possible to make it easy to solve the problem.