Braille Support for Dracut
==========================

This module implements braille accessibility within the initramfs (initial
ramdisk file system). If BRLTTY is installed (``/usr/bin/brltty`` exists) then
it is added to the image. The braille drivers, text tables, contraction tables,
attributes tables, keyboard tables, speech drivers, and preferences file
configured via ``/etc/brltty.conf`` are included. Local customizations within
``/etc/xdg/brltty/`` are also included.

BRLTTY is started as early as possible by the initramfs so that braille
accessibility will be active when (should the need arise) control is
transferred to the emergency shell due to a problem preparing the root file
system. Additionally, braille accessibility is active at any of the specifiable
initramfs breakpoints (see the ``rd.break`` kernel parameter) except for the
one named ``cmdline`` because it occurs earlier than the point at which BRLTTY
is started.

The braille driver can start immediately if either serial or USB communication
is being used. If Bluetooth communication is being used then the braille driver
won't start until the ``initqueue`` phase because the Systemd service manager
isn't available until then.

Bluetooth support within the initramfs is disabled by default because it's
insecure. The reason for this is that the link keys for those devices that have
already been paired on the full system are copied into the initramfs image so
that repairing won't be necessary. If you absolutely must use Bluetooth
communication, or if you just want to and this issue is of no concern to you,
then enable the ``BRLTTY_DRACUT_BLUETOOTH_SUPPORT`` option within the file
``dracut.conf`` (which is in ``/etc/brltty/Initramfs/``).

Environment Variables
---------------------

A number of environment variables may be used to influence how BRLTTY is
installed into the initramfs image. Their names all begin with the
``BRLTTY_DRACUT_`` prefix. In addition to exporting them from the current
environment, they may be defined within the optional file ``dracut.conf``
(which is in ``/etc/brltty/Initramfs/``). Within this file:

* Blank lines are ignored.
* Lines that start with a hash [``#``] are comments.
* All other lines should be simple shell-style assignments. For example::

    NAME="string"

The following environment variables are supported:

BRLTTY_DRACUT_LOCALE
  The preferred locale (used to determine the default text and contraction
  tables). For example::

    BRLTTY_DRACUT_LOCALE=cs_CZ.UTF-8

  If needed, i.e. if the text and contraction tables haven't both been
  configured via ``/etc/brltty.conf``, this information must be explicitly set
  because it can't be determined from the system configuration when building
  the image (see `<https://bugzilla.redhat.com/show_bug.cgi?id=1584036>`_).

BRLTTY_DRACUT_BRAILLE_DRIVERS
  A space-separated list of additional braille drivers to include. For
  example::

    BRLTTY_DRACUT_BRAILLE_DRIVERS="pm eu"

BRLTTY_DRACUT_BLUETOOTH_SUPPORT
  Whether or not Bluetooth support should be included within the initramfs. For
  example::

    BRLTTY_DRACUT_BLUETOOTH_SUPPORT=no

  Set this variable to ``yes`` if communication with your braille device is via
  Bluetooth. Note that this option is insecure because the link keys for all of
  your paired Bluetooth devices will be stored within the initramfs image.

BRLTTY_DRACUT_TEXT_TABLES
  A space-separated list of additional text tables to include. For example::

    BRLTTY_DRACUT_TEXT_TABLES="de fr"

BRLTTY_DRACUT_CONTRACTION_TABLES
  A space-separated list of additional contraction tables to include. For
  example::

    BRLTTY_DRACUT_CONTRACTION_TABLES="de-g2 fr-g2"

BRLTTY_DRACUT_ATTRIBUTES_TABLES
  A space-separated list of additional attributes tables to include. For
  example::

    BRLTTY_DRACUT_ATTRIBUTES_TABLES="upper_lower left_right"

BRLTTY_DRACUT_KEYBOARD_TABLES
  A space-separated list of additional keyboard tables to include. For
  example::

    BRLTTY_DRACUT_KEYBOARD_TABLES="keypad desktop"

BRLTTY_DRACUT_SPEECH_DRIVERS
  A space-separated list of additional speech drivers to include. For example::

    BRLTTY_DRACUT_SPEECH_DRIVERS="es fl"

Kernel Command Line Parameters
------------------------------

This module interprets kernel command line parameters that begin with the
``rd.brltty.`` prefix. Explicit values for these parameters can, of course, be
specified on the kernel command line (e.g. within ``grub.cfg`` or within
``/etc/default/grub``). In addition, default values for them can be defined
within the optional file ``cmdline`` (which is in ``/etc/brltty/Initramfs/``).

The order of precedence, from lowest to highest, for a value is:

* BRLTTY built-in default
* ``/etc/brltty.conf``
* initramfs override
* ``/etc/brltty/Initramfs/cmdline``
* kernel command line

Blank lines are ignored. A hash [``#``] anywhere on a line begins a comment
which continues till the end of that line - only those characters before it are
significant. Any number of space-separated options may be specified on a line.
The syntax for an option is ``name=value`` (without the ``rd.brltty.`` prefix).
The ``=value`` part is optional - if there's no ``=`` then the value is
``yes``.

Disabling BRLTTY
````````````````

Given that BRLTTY is a rather complex application, there are a number of kernel
parameters that can be used to selectively disable a number of its components.
In all cases, if any of these parameters isn't specified then it defaults to
``1`` (enabled). They are:

  =========================  =========================================
  Kernel Parameter           Effect
  -------------------------  -----------------------------------------
  ``rd.brltty=0``            Completely disable BRLTTY.
  ``rd.brltty.bluetooth=0``  Disable Bluetooth support.
  ``rd.brltty.sound=0``      Disable speech drivers and sound support.
  ``rd.brltty.pulse=0``      Disable the Pulse Audio server.
  ``rd.brltty.speechd=0``    Disable the Speech Dispatcher server.
  =========================  =========================================

Specifying BRLTTY options
`````````````````````````

All of BRLTTY's options that can be specified via environment variables (see
``man brltty`` for the full list) can be specified via kernel parameters. For
example, the kernel parameter ``rd.brltty.braille_driver=vo`` is mapped to the
environment variable assignment ``BRLTTY_BRAILLE_DRIVER=vo``. Some of the more
interesting ones are:

  ================================  ===============================
  Kernel Parameter                  Default Value
  --------------------------------  -------------------------------
  ``rd.brltty.braille_driver``      setting in ``/etc/brltty.conf``
  ``rd.brltty.braille_parameters``  setting in ``/etc/brltty.conf``
  ``rd.brltty.braille_device``      setting in ``/etc/brltty.conf``
  ``rd.brltty.text_table``          setting in ``/etc/brltty.conf``
  ``rd.brltty.attributes_table``    setting in ``/etc/brltty.conf``
  ``rd.brltty.contraction_table``   setting in ``/etc/brltty.conf``
  ``rd.brltty.keyboard_table``      setting in ``/etc/brltty.conf``
  ``rd.brltty.speech_driver``       setting in ``/etc/brltty.conf``
  ``rd.brltty.speech_parameters``   setting in ``/etc/brltty.conf``
  ``rd.brltty.log_file``            ``/run/initramfs/brltty.log``
  ``rd.brltty.log_level``           setting in ``/etc/brltty.conf``
  ================================  ===============================

Speech Drivers
--------------

Since speech drivers, by their very nature, require sound:

* None of them can start until the ``initqueue`` hook has been executed.

* None of them can start if sound has been disabled (via the rd.brltty.sound=0
  kernel parameter).

Speech defaults to being off even if a speech driver has been configured via
``/etc/brltty.conf``. This is because your preferred speech driver may not work
all that well, or may even cause problems, when used within the more primitive
initramfs environment. If you'd like to use speech then you need to explicitly
set the driver. While you can do so via the ``rd.brltty.speech_driver`` kernel
command line parameter, the easiest way to configure a persistent setting is
via the ``speech_driver`` option in ``/etc/brltty/Initramfs/cmdline``.

Here's how well each of the speech drivers works:

en
  The ``en`` [eSpeak-NG] speech driver works.

es
  The ``es`` [eSpeak] speech driver works. It requires Pulse Audio, so:

  * It doesn't start until the ``initqueue`` hook has been executed.

  * It can't start if Pulse Audio fails to start or has been disabled (via
    the rd.brltty.pulse=0 kernel parameter).

fl
  The ``fl`` [Festival Lite] speech driver doesn't work - it runs but doesn't
  speak. This appears to be due to a bug within Festival Lite itself because
  it also remains silent when tested on the full system.

fv
  The ``fv`` [Festival] speech driver doesn't work - it crashes. This appears
  to be due to a bug within Festival itself because it also crashes when tested
  on the full system.

sd
  The ``sd`` [Speech Dispatcher] speech driver hasn't been tested and probably
  won't work.

