This commit is contained in:
Manuel Cortéz 2017-02-19 21:03:35 -06:00
commit c1ff524054
12 changed files with 100 additions and 47 deletions

View File

@ -1,17 +1,18 @@
# Fenrir # Fenrir
An TTY screenreader for Linux. A TTY screenreader for Linux.
In theorie its not limited to linux. but i currently only provide drivers for that because I do not have an ohter system here. If you want to help or write drivers to make it work on other systems, just let me know. In theory it's not just limited to Linux. but i currently only provide drivers for that since I do not have another system here. If you want to help or write drivers to make it work on other systems, just let me know.
This software is licensed under the LGPL v3 . This software is licensed under the LGPL v3 .
# Requirements (core) # Requirements (core)
- linux (currently only screen and input drivers available for that) - linux (currently only screen and input drivers available for that)
- python3 >= 3.3 - python3 >= 3.3
- python-configargparse
- screen, input, speech, sound or braille drivers see "Features, Drivers, Extras". - screen, input, speech, sound or braille drivers see "Features, Drivers, Extras".
# Features, Drivers, Extras # Features, Drivers, Extras
# Input Drivers: # Input Drivers:
- "evdevDriver" input driver for linux evdev - "evdevDriver" input driver for linux evdev
- python-evdev - python-evdev >=0.6.3
- loaded uinput kernel module - loaded uinput kernel module
- ReadWrite permission - ReadWrite permission
- /dev/input - /dev/input
@ -41,7 +42,7 @@ This software is licensed under the LGPL v3 .
- "genericDriver" sound driver for sound as subprocess: - "genericDriver" sound driver for sound as subprocess:
- sox - sox
- "gstreamerDriver" sound driver for gstreamer - "gstreamerDriver" sound driver for gstreamer
- gstreamer 1.x - gstreamer >=1.0
- GLib - GLib
- "dummyDriver" sound driver for debugging - "dummyDriver" sound driver for debugging
@ -54,12 +55,12 @@ This software is licensed under the LGPL v3 .
# installation # installation
- Archlinux: PKGBUILD in AUR - Archlinux: PKGBUILD in AUR
- install.sh (there is currently no uninstall) - Manual: run install.sh and uninstall.sh as root
- run from git: - you also can just run it from Git without installing:
You can just run the following as root: You can just run the following as root:
cd src/fenrir-package/ cd src/fenrir-package/
sudo ./fenrir sudo ./fenrir
Settings "settings.conf" is located in the "config" directory. Settings "settings.conf" is located in the "config" directory or after installation in /etc/fenrir/settings.
Take care that the used drivers in the config matching your installed drivers. Take care that the used drivers in the config matching your installed drivers.
By default it uses: By default it uses:
- sound driver: genericDriver (via sox, could configured in settings.conf) - sound driver: genericDriver (via sox, could configured in settings.conf)

View File

@ -3,13 +3,13 @@ ToDo list for Fenrir Version 2.0
General: General:
- implement onScreenUpdate commands - implement onScreenUpdate commands
read highlighted text mode read highlighted text mode
- translateable (easy for contribute) - translateable (easy for contribution)
http://www.supernifty.org/blog/2011/09/16/python-localization-made-easy/ http://www.supernifty.org/blog/2011/09/16/python-localization-made-easy/
- be more event based (vcsa sets POLLPRI) - be more event based (vcsa sets POLLPRI)
http://scotdoyle.com/python-epoll-howto.html http://scotdoyle.com/python-epoll-howto.html
- try to make it more asynchronus - try to make it more asynchronus
- multpible threads - multpible threads
- leave revew on typing - leave review on typing
- implement commands - implement commands
attributes_curr_char attributes_curr_char
@ -28,7 +28,7 @@ Braille Support:
print cursor in textmode print cursor in textmode
command toggle used cursor (in manual brailleFocusMode) command toggle used cursor (in manual brailleFocusMode)
capture input from braile capture input from braile
make routing keys assignable in keyboard make routing keys assignable by keyboard
make brailleTable configurable make brailleTable configurable
pkg-config --variable=tablesdir liblouis pkg-config --variable=tablesdir liblouis
http://mielke.cc/brltty/doc/Manual-BrlAPI/English/BrlAPI.html http://mielke.cc/brltty/doc/Manual-BrlAPI/English/BrlAPI.html
@ -40,21 +40,21 @@ Driver:
- implement PTY Screen driver (to use gnome-terminal and other terminal emulators) - implement PTY Screen driver (to use gnome-terminal and other terminal emulators)
https://docs.python.org/3.2/library/pty.html https://docs.python.org/3.2/library/pty.html
- implement PTY Input driver - implement PTY Input driver
- ATK input driver (dont grab on graphical interface) - ATK input driver (don't grab on graphical interface)
- implement speechdriver generic - implement speechdriver generic
- implement autodetection of plugged and removed input devices (python-pyudev) for evdev driver - implement autodetection of plugged and unplugged input devices (python-pyudev) for evdev driver
http://askubuntu.com/questions/508236/how-can-i-run-code-whenever-a-usb-device-is-unplugged-without-requiring-root http://askubuntu.com/questions/508236/how-can-i-run-code-whenever-a-usb-device-is-unplugged-without-requiring-root
- try to autodetect encoding - try to autodetect encoding
https://stackoverflow.com/questions/6396659/how-do-you-get-the-encoding-of-the-terminal-from-within-a-python-script https://stackoverflow.com/questions/6396659/how-do-you-get-the-encoding-of-the-terminal-from-within-a-python-script
Settings: Settings:
- configuration should be overwriteable with parameter and alternative paths - configuration should be overwritable with parameter and alternative paths
- write settings - write settings
- menue for settings configuration #storm - menue for settings configuration #storm
Application Profiles Application Profiles
- reimplement process detection without subprocessing - reimplement process detection without subprocessing
- reuse new porcess detection code for X11 detection - reuse new process detection code for X11 detection
- fenrir is not able to detect the current application inside of screen. - fenrir is not able to detect the current application inside of screen.
ps -e -H -o pid,pgrp,ppid,tty,cmd ps -e -H -o pid,pgrp,ppid,tty,cmd
http://stackoverflow.com/questions/24861351/how-to-detect-if-python-script-is-being-run-as-a-background-process/24862213 http://stackoverflow.com/questions/24861351/how-to-detect-if-python-script-is-being-run-as-a-background-process/24862213

View File

@ -13,19 +13,19 @@ driver=genericDriver
# For the current user. # For the current user.
theme=default theme=default
# Sound volume controls how loud the sounds for your chosen soundpack are. # Sound volume controls how loud the sounds for your selected soundpack are.
# 0 is quietest, 1.0 is loudest. # 0 is quietest, 1.0 is loudest.
volume=1.0 volume=1.0
# shell commands for generic sound driver # shell commands for generic sound driver
# the folowing variable are substituded # the folowing variable are substituted
# fenrirVolume = the current volume setting # fenrirVolume = the current volume setting
# fenrirSoundFile = the soundfile for an soundicon # fenrirSoundFile = the soundfile for an soundicon
# fenrirFrequence = the frequence to play # fenrirFrequence = the frequence to play
# fenrirDuration = the duration of the frequence # fenrirDuration = the duration of the frequence
# the following command is used for play a soundfile # the following command is used to play a soundfile
genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile genericPlayFileCommand=play -q -v fenrirVolume fenrirSoundFile
#the following command is used for generating a frequence beep #the following command is used to generate a frequency beep
genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine fenrirFrequence
[speech] [speech]
@ -37,7 +37,7 @@ driver=speechdDriver
#driver=espeakDriver #driver=espeakDriver
# The rate selects how fast fenrir will speak. Options range from 0, slowest, to 1.0, fastest. # The rate selects how fast Fenrir will speak. Options range from 0, slowest, to 1.0, fastest.
rate=0.65 rate=0.65
# Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest. # Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest.
@ -49,15 +49,15 @@ capitalPitch=0.9
volume=1.0 volume=1.0
# Module is used for speech-dispatcher, to select the speech module you want to use. # Module is used for speech-dispatcher, to select the speech module you want to use.
# Consult speech-dispatcher's configuration and help ti find out which modules are available. # Consult speech-dispatcher's configuration and help Fenrir find out which modules are available.
# The default is espeak. # The default is espeak.
module=espeak module=espeak
# Voice selects the varient you want to use, for example, f5 will use the female voice #5 in espeak, # 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 chosen synthesizer. # 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= voice=
# Select the language you want fenrir to use. # Select the language you want Fenrir to use.
language=english-us language=english-us
# Read new text as it happens? # Read new text as it happens?
@ -105,7 +105,7 @@ autodetectSuspendingScreen=True
driver=evdevDriver driver=evdevDriver
# filter input devices NOMICE, ALL or a DEVICE NAME # filter input devices NOMICE, ALL or a DEVICE NAME
device=ALL device=ALL
# gives fenrir exclusive access to the keyboard and let consume keystrokes. # gives Fenrir exclusive access to the keyboard and lets it control keystrokes.
grabDevices=True grabDevices=True
ignoreShortcuts=False ignoreShortcuts=False
# the current shortcut layout located in /etc/fenrir/keyboard # the current shortcut layout located in /etc/fenrir/keyboard

View File

@ -1,27 +1,61 @@
#!/bin/bash #!/bin/bash
#Basic install script for fenrir. #Basic install script for Fenrir.
read -p "This will install fenrir. Press ctrl+c to cancil, or enter to continue." continue read -p "This will install Fenrir. Press ctrl+c to cancel, or enter to continue." continue
install -m755 -d /opt/fenrir
install -m755 -d /usr/share/fenrir/scripts
install -m755 -d /usr/share/fenrir/tools
install -m755 -d /etc/fenrir/punctuation
install -m644 -D "config/keyboard/desktop.conf" /etc/fenrir/keyboard/desktop.conf
install -m644 -D "config/keyboard/desktop.conf" /etc/fenrir/keyboard/desktop.conf
install -m644 -D "config/settings/settings.conf" /etc/fenrir/settings/settings.conf
install -d /usr/share/sounds/fenrir
install -m644 -D "autostart/systemd/fenrir.service" /usr/lib/systemd/system/fenrir.service
# fenrir main application
install -m755 -d /opt/fenrir
cp -a src/fenrir/* /opt/fenrir cp -a src/fenrir/* /opt/fenrir
cp -a config/scripts/* /usr/share/fenrir/scripts install -m644 -D "autostart/systemd/fenrir.service" /usr/lib/systemd/system/fenrir.service
cp -a config/punctuation/* /etc/fenrir/punctuation ln -s /opt/fenrir/fenrir-daemon /usr/bin/fenrir
cp -a config/sound/* /usr/share/sounds/fenrir
# tools
install -m755 -d /usr/share/fenrir/tools
cp -a tools/* /usr/share/fenrir/tools cp -a tools/* /usr/share/fenrir/tools
ln -s /opt/fenrir/fenrir-daemon /usr/bin/fenrir # scripts
install -m755 -d /usr/share/fenrir/scripts
cp -a "config/scripts/wlan__-__key_y.sh" /usr/share/fenrir/scripts/
# keyboard
install -m644 -D "config/keyboard/desktop.conf" /etc/fenrir/keyboard/desktop.conf
install -m644 -D "config/keyboard/laptop.conf" /etc/fenrir/keyboard/laptop.conf
# punctuation
install -m755 -d /etc/fenrir/punctuation
cp -a config/punctuation/* /etc/fenrir/punctuation
# sound
install -d /usr/share/sounds/fenrir
cp -a config/sound/default /usr/share/sounds/fenrir/default
cp -a config/sound/default-wav /usr/share/sounds/fenrir/default-wav
cp -a config/sound/template /usr/share/sounds/fenrir/template
# config
if [ -f "/etc/fenrir/settings/settings.conf" ]; then
echo "Do you want to overwrite your current global settings? (y/n)"
read yn
if [ $yn = "Y" -o $yn = "y" ]; then
mv /etc/fenrir/settings/settings.conf /etc/fenrir/settings/settings.conf.bak
echo "Your old settings.conf has been backed up to settings.conf.bak."
install -m644 -D "config/settings/settings.conf" /etc/fenrir/settings/settings.conf
else
install -m644 -D "config/settings/settings.conf" /etc/fenrir/settings/settings.conf.current
fi
fi
# end message
cat << EOF cat << EOF
To have fenrir start at boot: Installation complete.
install path:/opt/fenrir
settings path:/etc/fenrir
To test Fenrir
sudo systemctl start fenrir
To have Fenrir start on system boot:
sudo systemctl enable fenrir sudo systemctl enable fenrir
Pulseaudio users may want to run Pulseaudio users may want to run
/usr/share/fenrir/tools/configure-pulseaudio /usr/share/fenrir/tools/configure-pulseaudio
once as their user account and once as root. once as their user account, then once as root.
EOF EOF

View File

@ -1,7 +1,13 @@
Known Bugs (Problems with the logic ): Known Bugs (Problems with the logic ):
- fenrir crashes on device unplug (remove device graceful)
- no autodetection of X if you start without GUI and use startx manual
- word echo triggers twice if there are two spaces after an word and you arrow over them - word echo triggers twice if there are two spaces after an word and you arrow over them
- spellcheck triggers twice if there are two spaces after an word and you arrow over them - spellcheck triggers twice if there are two spaces after an word and you arrow over them
Glitches (improve diff results): Glitches (improve diff results):
- For example, in screen, it just tells me bell in window, but doesn't tell me which one. (southernprince) - For example, in screen, it just tells me bell in window, but doesn't tell me which one. (southernprince)
- alpine seems to have problems (southernprince) - alpine seems to have problems (southernprince)
Questions:
- what is the correct codepage for cyrillic
- cyrillic

View File

@ -25,6 +25,9 @@ class command():
def getDescription(self): def getDescription(self):
return 'checks the spelling of the current word' return 'checks the spelling of the current word'
def updateSpellLanguage(self): def updateSpellLanguage(self):
if not initialized:
self.env['runtime']['outputManager'].presentText('pychant is not installed', interrupt=True)
return
self.spellChecker = enchant.Dict(self.env['runtime']['settingsManager'].getSetting('general', 'spellCheckLanguage')) self.spellChecker = enchant.Dict(self.env['runtime']['settingsManager'].getSetting('general', 'spellCheckLanguage'))
self.language = self.env['runtime']['settingsManager'].getSetting('general', 'spellCheckLanguage') self.language = self.env['runtime']['settingsManager'].getSetting('general', 'spellCheckLanguage')

View File

@ -28,12 +28,15 @@ class command():
return 'No Description found' return 'No Description found'
def updateSpellLanguage(self): def updateSpellLanguage(self):
if not initialized:
self.env['runtime']['outputManager'].presentText('pychant is not installed', interrupt=True)
return
self.spellChecker = enchant.Dict(self.env['runtime']['settingsManager'].getSetting('general', 'spellCheckLanguage')) self.spellChecker = enchant.Dict(self.env['runtime']['settingsManager'].getSetting('general', 'spellCheckLanguage'))
self.language = self.env['runtime']['settingsManager'].getSetting('general', 'spellCheckLanguage') self.language = self.env['runtime']['settingsManager'].getSetting('general', 'spellCheckLanguage')
def run(self): def run(self):
if not initialized: if not initialized:
return return
if not self.env['runtime']['settingsManager'].getSettingAsBool('general', 'autoSpellCheck'): if not self.env['runtime']['settingsManager'].getSettingAsBool('general', 'autoSpellCheck'):
return return
if self.env['runtime']['inputManager'].noKeyPressed(): if self.env['runtime']['inputManager'].noKeyPressed():
@ -42,7 +45,7 @@ class command():
try: try:
self.updateSpellLanguage() self.updateSpellLanguage()
except: except:
return return
# just when horizontal cursor move worddetection is needed # just when horizontal cursor move worddetection is needed
if not self.env['runtime']['cursorManager'].isCursorHorizontalMove(): if not self.env['runtime']['cursorManager'].isCursorHorizontalMove():

View File

@ -1,4 +1,4 @@
#!/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -1,4 +1,4 @@
#!/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Fenrir TTY screen reader # Fenrir TTY screen reader

View File

@ -35,7 +35,6 @@ class driver():
with open(useScreen, 'w') as fd: with open(useScreen, 'w') as fd:
for c in text: for c in text:
fcntl.ioctl(fd, termios.TIOCSTI, c) fcntl.ioctl(fd, termios.TIOCSTI, c)
time.sleep(0.005)
def getCurrApplication(self): def getCurrApplication(self):
apps = [] apps = []

View File

@ -11,6 +11,7 @@ if [ -f "$xdgPath/pulse/default.pa" ]; then
read -p "This will replace the current file located at $xdgPath/pulse/default.pa, press enter to continue or control+c to abort. " continue read -p "This will replace the current file located at $xdgPath/pulse/default.pa, press enter to continue or control+c to abort. " continue
fi fi
echo '.include /etc/pulse/default.pa echo '.include /etc/pulse/default.pa
load-module module-switch-on-connect
load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse.sock' > $xdgPath/pulse/default.pa load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse.sock' > $xdgPath/pulse/default.pa
echo "If you have not yet done so, please run this script as root to write the client.conf file." echo "If you have not yet done so, please run this script as root to write the client.conf file."
else else

View File

@ -4,13 +4,19 @@ cat << EOF
fenrir is going to remove. fenrir is going to remove.
every script and settings are lost. every script and settings are lost.
EOF EOF
read -p "This will remove fenrir and settings. Press ctrl+c to cancil, or enter to continue." continue
# ask
read -p "This will remove fenrir and settings. Press ctrl+c to cancel, or enter to continue." continue
# do it
unlink /usr/bin/fenrir unlink /usr/bin/fenrir
rm -r /opt/fenrir rm -r /opt/fenrir
rm -r /usr/share/fenrir rm -r /usr/share/fenrir
rm -r /etc/fenrir rm -r /etc/fenrir
rm -r /usr/share/sounds/fenrir rm -r /usr/share/sounds/fenrir
rm /usr/lib/systemd/system/fenrir.service
# success message
cat << EOF cat << EOF
fenrir is removed fenrir is removed
EOF EOF