Skip to main content

Sysadmin, interested in new technologies, communications, multimedia, accessibility, better Linux than Windows, better Android than IOS and similar.

pvagner

pvdeejay

mastodon.sk/@pvagner

Peter Vágner

Emacs A11y Tip #3: Emacs with speechd-el running on Termux for Android

5 min read

After a long while I am here with another post in my collection of .
This time I am not going to talk about emacs environment with speech as provided by speechd-el, I will try to describe how I have managed to get a lot from emacs on the go while running it on Termux for Android.
My reasoning behind this setup is that Emacs can be run on pretty much any computing device. I have used to carry a RPI 2 with me to have access to basic linux CLI tools and emacs. Now I believe using my phone with external keyboard connected will serve this purpose even better. Additionally after a bit of learning now I can use emacs even with braille touch keyboard as provided by the Corvus access solution for android as it can emulate ctrl and alt keys. Emacs letter based keyboard shortcuts and braille keyboard are perfect fit together.
There appear to be multiple ways on how to run emacs on Android. Up to now I was not aware of a single setup where I can also have speechd-el and its dependencies working on Android in a way so I can make some good use out of it.

I know the title of this article has a lot of things mixed together so before I'll describe the setup I'll at least link to more details about all these things I have mentioned so far.

Android is an operating system that powers your mobile phone or tablet.
Termux is an awesome app for Android that includes powerfull partially accessible terminal emulator and features repository of traditional command line apps similar to most linux distributions. As of this writing termux is returning to google play it can be installed easily again and for running emacs it's more than capable enough.

So here are the steps:

  • Install Termux either from F-Droid or from Google play.
  • Launch termux and use it directly on your device with Talkback running at least to pass this initial setup.
    On first launch termux will show its terminal view and enable the keyboard. While typing on the keyboard keys are directly passed to the app running in the terminal. You can dismiss the keyboard by pressing the device back button and review the terminal view content with your screen reader. You can double tap the terminal view to get the keyboard back if the app running is not consuming the double tap as a click (emacs does this for example). Termux also has an app drawer you can reach by pressing the back button of your device when the keyboard is closed or you can swipe two fingers from the left hand side if screen reader is running (single finger when it's not). On the drawer there is a list of terminal sessions and two unlabelled buttons. First one shows the keyboard, when long pressing it displays extra row of buttons that complement the keyboard such as ctrl key, alt key, arrow keys and similar. These extra buttons are displayed on the bottom part of the screen inside a view pager. Swiping the buttons to the left switches to the second page with the text input view that can be used with all the android keyboard and accessibility specific review capabilities while typing. While emacs is not running on the device I like to type in commands into this input entry field. When this text entry field is empty pressing the enter key also sends the enter key into the terminal view.
    Also don't forget to read termux documentation where it's talking about the touch keyboard and even the hardware keyboard if you have one.
  • Allow termux to read and write to storage by running
    termux-setup-storage
  • Then install ssh daemon on Termux by running these commands into the terminal one after the other paying attention to the output
    pkg update
    pkg upgrade
    pkg install openssh
  • In order to be able to login to Termux via SSH, you need to prepare a private / public key pair on your PC by running ssh-keygen, then transfer public key to termux saving it into ~/.ssh/authorized_keys. See more about running sshd on termux at the Termux wiki.
  • Start ssh daemon on Termux just by running
    sshd
  • If you like you can execute the following steps inside an SSH session from your PC. You can connect to termux via SSH like this
    ssh user@<deviceIP> -p 8022
  • Install speech-dispatcher and emacs along with its dependencies such as needed termux specific packages and espeak
    pkg install speechd emacs
  • Clone speechd-el git repository where emacs can load it
    git clone https://github.com/brailcom/speechd-el.git $HOME/../usr/share/emacs/site-lisp/
  • Test if speech-dispatcher is working by launching
    spd-say "Hello world"
  • If you can hear espeak saying hello world it's all working fine.
  • Now make a symlink so speechd-el can find speech-dispatcher unix socked with no other configuration changes.
    cd && ln -s .cache/speech-dispatcher .speech-dispatcher
  • Configure emacs to start speechd-el by writing this content into the .emacs file for example by using nano a text editor bundled with termux.
    nano $HOME/.emacs
  • Put this content into the file
    (setq speechd-out-active-drivers '(ssip ))
    (autoload 'speechd-speak
    "speechd-speak" nil t)
    (speechd-speak)
  • Finally launch emacs by simply typing in
    emacs

Refer to other to find out more.

 

Peter Vágner

Chromium is getting #Accessibility support on linux

2 min read

Update: More up to date snapshot than chromium-snapshot-bin 80 is now available. Make sure you are running the latest snapshot for testing and reporting bugs.

 

Accessibility support with Chromium on linux is a thing that developers are working very hard on this year and it turns out it’s getting better and better all the time. I’d say now it’s very usable already. Joan Marie has written a wiki article explaining its current state. I’ve expressed that it looks to be awesome, feels snappy.

Now I’ll add a few simple steps explaining how to install the latest chromium snapshot and enable its built-in accessibility support on Arch linux and other linux distros based off of it.

  • All the commands you are executing should be executed as a normal user i.e. not root. Those that require super user privileges are starting with sudo.

  • Download and install chromium-snapshot-bin package from the AUR

    wget https://aur.archlinux.org/cgit/aur.git/snapshot/chromium-snapshot-bin.tar.gz
    tar xvzf chromium-snapshot-bin.tar.gz
    cd chromium-snapshot-bin
    makepkg -s
  • Now pay attention what package version this will end up building for example as of today it’s chromium-snapshot-bin-80.0.3970.0.r716024-1-x86_64.pkg.tar.xz.

  • Install the package like this

    sudo pacman -U chromium-snapshot-bin-80.0.3970.0.r716024-1-x86_64.pkg.tar.xz 
  • Now set a required variable named ACCESSIBILITY_ENABLED to 1 and write it to your desktop session profile

    sudo bash -c 'echo "export ACCESSIBILITY_ENABLED=1" > /etc/profile.d/chromium-accessibility.sh'
  • Now Write suggested chromium command line flags to the config file wrapper script responsible for launching chromium is looking for

    echo "--force-renderer-accessibility --enable-caret-browsing " > ~/.config/chromium-flags.conf
  • Now relogin to your desktop session, launch chromium whatewer way you prefer and you should enjoy its accessibility support with orca.

Peter Vágner

Building eSpeak-ng for Android with libsonic built-in

2 min read

By a popular demand I have written a few steps how I am building espeak-ng for android.
ESpeak-ng has a optional dependency on a library called libsonic.
It's not critical for its functionality but it allows speeding up synthesised voice so we can get eSpeak-ng speaking at very very fast speech rates.
On linux the build system is configured to take advantage of system wide installation of all the required libraries. This does not nicely apply to the cross compilation for Android as all the libraries have to be prebuilt for the target platform.
And since there is no other distribution channel for the libsonic library other than its git repository with its source code, there are no prebuilt libraries for android.
To workaround this I am cloning libsonic repository, linking its files to the eSpeak-ng source tree and then patching eSpeak-ng source code to include the libsonic files as if these were part of eSpeak-ng it-self.

I am running all this on arch linux, but debian, ubuntu and any other linux distro with gradle, Android-SDK 26, android-sdk-build-tools 28.0.3, recent enough version of android-ndk will work fine.
I like to install all these components via the linux distro package manager.
Espeak-ng Readme has even more details I can write here. There are also some android specific dependencies

If everything is installed here are the commands I can run from the terminal:
mkdir ~/espeak # create a working folder
cd ~/espeak # enter that folder
git clone https://github.com/espeak-ng/espeak-ng.git # clone espeak-ng git repo
git clone https://github.com/espeak-ng/sonic.git # clone libsonic repository
ln -s ../../../sonic/sonic.{c,h} espeak-ng/src/libespeak-ng/ # link sonic files to eSpeak-ng source tree
wget https://files.pvagner.tk/f/e9c6874015fd4241b6c2/?dl=1 -O espeak-ng-libsonic-android.patch # download a patch
cd espeak-ng # change directory to the espeak-ng repo
patch -p1 < ../espeak-ng-libsonic-android.patch # apply the changes from the patch
./autogen.sh # prepare the configure script
./configure --prefix=/usr --with-gradle=gradle --with-extdict-ru --with-extdict-zh --with-extdict-zhy # run the configure script
make apk-debug # build the actual apk

The resulting app is placed in the path android/build/outputs/apk/debug/espeak-debug.apk
You can install this on your device and enjoy fast rates up to 800 WPM.

Peter Vágner

Emacs A11y Tip #2: graphical or pure text console setup

4 min read

In my Emacs A11y Tip #1 I've already touched the topic of this #2 from slightly. I did not explore all the details at the time so I feel I should try to correct this now.
When installing Emacs there are various possible build configurations and some of them have been adopted as a defacto standards meaning analogous packages are available in the multiple linux distributions package repositories. These are emacs, emacs-nox and emacs-gtk2.

Guessing from the package names it's obvious -nox variant has all the graphical dependencies stripped out. That means we will only see text UI when running no matter if we are in a graphical X session or on a text only console. I was expecting full package would therefore be unnecessary for me because it brings in a few more dependencies and the window it presents is inaccessible to orca anyway. So given this reasoning I assumed it might have minimal impact and I won't need X support in my install of Emacs.

My complicated reasoning has proven not to be quite right and X support within emacs might really be usefull. I have found out a few differences between X and no X variants and some of them are serious enough for me to install X support.

  • When X support is installed, emacs kill and copy commands insert the text into the clipboard so it's possible to copy and paste from emacs into other applications and the other way round.
  • No X variant can be also running within a terminal emulator like gnome-terminal. It means you can use orca's flat review to examine its output.
  • When X support is installed Emacs creates its own window seperated from a terminal if emacs is started from a terminal emulator. It is completelly inaccessible to orca and it consumes all the keyboard input so orca even can't receive the insert / capslock key presses. It is possible to decide during runtime when X aware version of emacs is installed if we want / don't want X support. Run
    emacs -nw
    to start emacs with no X support.
  • Installation which also features X support can also be started in pure text only console. In such a case X support won't be used obviously. Emacs should otherwise be as functional as intended. I've found askubuntu answer supporting this argument. Some parts of Emacs appear to inherit native accessibility and I am not sure where this is coming from. For example pressing C-x C-f brings up find interface accessible with Speechd-el but pressing F10 shows up GTK2 based menu bar and activating Open... from the File menu pops up GTK2 native file chooser dialog.
  • emacs-gtk2 has X support and as an addition it also features mixture of its natural UI with some GTK2 based widgets. I don't know if there is something usefull for us here.

Given the fact there is no complete full browser inside Emacs, copy and paste is really essential. Additionally it is possible to configure Emacs to open web links in 3rd party apps so depending if you are in X or not you can configure to open these in Firefox or elinks directly.

There might be other notable differences when running emacs within X session or pure text console for example gpg agent setup or integration with other 3rd party tools. If I find it to be significant enough I will post a new tip.
I don't consider emacs with gtk+2 support particularly appealing just yet because it does not appear to be practical switching between operating system native and emacs specific screen reading app.

Update: Originally I have assumed graphical ATK accessible menu is only within emacs-gtk2, however it's also present in the original emacs with no GTK support. It sounds a bit dissapointing that we have no speechd-el accessible menu in this mode. But using keyboard shortcuts and other things is worth the trade I think.

Update2: Run

emacs -nw

if you would like to decide at runtime whether you do want an X support or not.

Peter Vágner

Emacs A11y Tip #1: Introduction and how to install

6 min read

Emacs is a powerfull software. There are a few access solutions that enable blind or visually disabled people to make some good use of it.
Unfortunatelly getting used to it requires a bit more than launching, testing and using it.

I don't think I can write better documentation than Emacs tourEmacs documentation either available online or built into emacs it-self. However I'll try to post a few so called getting my-self and hopefully someone else ready to make the most of it.

Why emacs?

Because it's more than a text editor. It can run on almost anything, it's keyboard driven since its start, it's still being maintained, there is a huge community of emacs users.

What access solution?

I've chosen Speechd-el for now because it concentrates on what it has been designed for and is known for overriding as little emacs built-in stuff as possible. Hopefully I'll be able to borrow from other general and community provided tips later on as I discover them. Here's a discussion thread that inspired me. And the F123E initiative made me to start writing this series of posts.

Where and how to install it?

I've chosen Arch linux as my operating system of choice a few years ago because of its philosophy, its rolling release cycle so there is no need for a reinstall every so often and awesome but easily embraced packaging system that encourages creating own packages almost every time while installing something new avoiding dependency issues or other conflicts and any other kind of possible mess in general.

Installing is just a breeze. Emacs it-self can be installed from the Arch community repository by typing
sudo pacman -S emacs
Originally I've opted for nox package variant so I can run it on the text only console and I can be assured I won't turn into issues with graphics. I am now reconsidering that because it appears it would be nice to able to copy and paste between emacs and Firefox for example in the future.

Speechd-el has some hard dependencies. It's developed to speak by using speech-dispatcher. Except of speech-dispatcher, I need to install speech-dispatcher supported TTS engine. I'm using eSpeak with other screen reading apps so I'll just make sure both speech-dispatcher and eSpeak are installed at this point.
sudo pacman -S speech-dispatcher espeak
If you are already running orca on linux you should skip installation of these two as it's sure you do already have them working.
You can test if speech-dispatcher is working by typing in
spd-say hello

Speechd-el can be installed from the AUR.
cd /tmp
wget https://aur.archlinux.org/cgit/aur.git/snapshot/emacs-speechd-el-git.tar.gz
tar xvzf emacs-speechd-el-git.tar.gz
cd emacs-speechd-el-git
makepkg -s
sudo pacman -U emacs-speechd-el-git-*-any.pkg.tar.zst
All the above commands should be typed one at a time exactly as written except of the last one. In that last one you will have to find out the proper filename of the package you've just built.

How to activate it?

There is a file called .emacs you can put into your home directory to instruct emacs to do something while it's starting.
For now I won't be looking at if this is the proper emacs way of doing things because I am just at the beginning. My immediate goal is getting my current tools of choice working. So here are a few lines I have saved into my ~/.emacs file:
(setq speechd-out-active-drivers '(ssip ))
(autoload 'speechd-speak
"speechd-speak" nil t)
(speechd-speak)

What to do on the first run?

Now you can run
emacs
and it should start talking.

 

Emacs will display some introductory text in the default buffer. Buffer is kind of technical term however in the Emacs terminology it means a document open in the editor or otherwise generated content forming a document we can interact with.

To describe some commands we can use at this point we have to know that Emacs has implemented a lot of keyboard shortcuts and keyboard shortcuts configuration is layered. There are single key shortcuts multiple keys shortcuts or even shortcuts that consist of multiple keypresses one after the other.

When describing keyboard shortcuts a lot of keypresses are ordinary keys such as letters combined with either control / ctrl refferred to as C or meta / alt often reffered to as M . Other Emacs keynames include previous and next for page up / page down respectivelly, spc for space and esc for escape. Ofcourse there may be more.

Here are some command keys you can use to navigate over the text at this point:

  • C-f - next character
  • C-b - previous character
  • M-f - next word or next item
  • M-b - previous word or previous item
  • C-p - previous line (in read only buffers it's often enough to press p alone)
  • C-n - next line (in read only buffers it's often enough to press n alone)
  • C-a - start of a line
  • C-e C-e - end of a line - yes this is overridden from a standard emacs install by Speechd-el. Emacspeak does the same thing as far as I know.
  • M-a - previous sentence
  • M-e - next sentence
  • M-less than symbol - begining of a buffer
  • M-greater than symbol - end of a buffer
  • F10 - menu bar
  • M-` (meta and back tick) - another way of showing the menu bar
  • C-H t - Emacs tutorial
  • C-x k - kill / close a buffer
  • C-e d l lang - change speech-dispatcher language within speechd-el. lang is abbreviation of your language code such as en, sk, cs, ru, de, fr, pt and similar.
  • C-x C-c - exit emacs

Summary

 

If you haven't managed to get Emacs with Speechd-el running go through this post, try out the commands and follow the Emacs tutorial.

 

What if I am using Emacspeak?

 

Please see this excelent guide by Alex Midence as an addition to this.