Merge branch 'master' of https://github.com/chrys87/fenrir
This commit is contained in:
commit
c1ff524054
15
README.md
15
README.md
@ -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)
|
||||||
|
14
TODO v2.0
14
TODO v2.0
@ -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
|
||||||
|
@ -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
|
||||||
|
68
install.sh
68
install.sh
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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')
|
||||||
|
|
||||||
|
@ -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():
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 = []
|
||||||
|
@ -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
|
||||||
|
@ -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
|
Loading…
Reference in New Issue
Block a user