summaryrefslogtreecommitdiff
path: root/configs/profile/root-image
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2018-06-30 06:16:32 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2020-03-27 19:32:36 -0400
commite4fd6acd2d59cd10450fc57cf89e2dcc3c1e9c87 (patch)
treed1b591ffe11af67c0f615c6d384b8257c9a0c7fb /configs/profile/root-image
parent860685fa072be6b6f1efa2fccb4f6376ef7f8bce (diff)
add braille and screen reader support from talkingparabola config
Diffstat (limited to 'configs/profile/root-image')
-rw-r--r--configs/profile/root-image/etc/skel/.bash_profile5
-rw-r--r--configs/profile/root-image/etc/systemd/system/livecd-alsa-unmuter.service15
-rw-r--r--configs/profile/root-image/root/.install-systemd-mate/packages5
-rw-r--r--configs/profile/root-image/root/customize_root_image-constants.inc12
-rwxr-xr-xconfigs/profile/root-image/root/customize_root_image.sh17
-rwxr-xr-xconfigs/profile/root-image/usr/bin/livecd-alsa-unmuter8
-rwxr-xr-xconfigs/profile/root-image/usr/bin/pick-a-card54
-rwxr-xr-xconfigs/profile/root-image/usr/bin/talk-to-me16
-rw-r--r--configs/profile/root-image/usr/share/livecd-sound/asound.conf.in12
-rw-r--r--configs/profile/root-image/usr/share/livecd-sound/functions199
10 files changed, 334 insertions, 9 deletions
diff --git a/configs/profile/root-image/etc/skel/.bash_profile b/configs/profile/root-image/etc/skel/.bash_profile
index 4dfbab5..3698904 100644
--- a/configs/profile/root-image/etc/skel/.bash_profile
+++ b/configs/profile/root-image/etc/skel/.bash_profile
@@ -9,6 +9,7 @@
export EDITOR=nano
export DE='_DESKTOP_SESSION_' # gnome, kde, xfce, lxde, mate
export DESKTOP_SESSION='_DESKTOP_SESSION_' # lxde
+ENABLE_TTS_BRLTTY='_ENABLE_TTS_BRLTTY_' # speech and braille
# set custom environment
@@ -17,5 +18,9 @@ sudo /root/.language.sh
export $(cat /etc/locale.conf)
+# launch accessibility features
+[[ "$ENABLE_TTS_BRLTTY" == 'true' ]] && flock -n /run/talk-to-me.lck /usr/bin/talk-to-me
+
+
# launch X
[ -n "$DESKTOP_SESSION" -a -z "$DISPLAY" -a "$(tty)" = /dev/tty1 ] && exec startx || cat /etc/motd
diff --git a/configs/profile/root-image/etc/systemd/system/livecd-alsa-unmuter.service b/configs/profile/root-image/etc/systemd/system/livecd-alsa-unmuter.service
new file mode 100644
index 0000000..e3b9073
--- /dev/null
+++ b/configs/profile/root-image/etc/systemd/system/livecd-alsa-unmuter.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Unmute All Sound Card Controls For Use With The Live TalkingParabola Environment
+# This needs to run after the audio device becomes available.
+Wants=systemd-udev-settle.service
+After=systemd-udev-settle.service sound.target
+DefaultDependencies=no
+Before=shutdown.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/livecd-alsa-unmuter
+StandardOutput=syslog
+
+[Install]
+WantedBy=sound.target
diff --git a/configs/profile/root-image/root/.install-systemd-mate/packages b/configs/profile/root-image/root/.install-systemd-mate/packages
index 0d0fd76..299605e 100644
--- a/configs/profile/root-image/root/.install-systemd-mate/packages
+++ b/configs/profile/root-image/root/.install-systemd-mate/packages
@@ -51,3 +51,8 @@ lightdm-gtk-greeter-settings
mate
mate-extra
volumeicon
+alsa-utils
+bluez
+bluez-libs
+brltty
+espeakup
diff --git a/configs/profile/root-image/root/customize_root_image-constants.inc b/configs/profile/root-image/root/customize_root_image-constants.inc
index d02e3cc..38c149e 100644
--- a/configs/profile/root-image/root/customize_root_image-constants.inc
+++ b/configs/profile/root-image/root/customize_root_image-constants.inc
@@ -3,6 +3,7 @@
# ISO_INIT
# ISO_GUI
# ENABLE_OFFLINE_INSTALL
+# HAS_BRLTTY_TTS
readonly LOCALES="en_US\.UTF-8 \
@@ -34,11 +35,15 @@ readonly OPENRC_SERVICES_GUI="alsasound \
readonly SYSTEMD_SERVICES_ALL="choose-mirror.service \
multi-user.target \
pacman-init.service "
+readonly SYSTEMD_SERVICES_ACC="bluetooth.service \
+ brltty.service \
+ livecd-alsa-unmuter.service "
readonly SYSTEMD_SERVICES_GUI="NetworkManager.service"
readonly OPENRC_SERVICES="${OPENRC_SERVICES_ALL} \
$([[ "${ISO_GUI}" != 'cli' ]] && echo " ${OPENRC_SERVICES_GUI}")"
-readonly SYSTEMD_SERVICES="${SYSTEMD_SERVICES_ALL} \
- $([[ "${ISO_GUI}" != 'cli' ]] && echo " ${SYSTEMD_SERVICES_GUI}")"
+readonly SYSTEMD_SERVICES="${SYSTEMD_SERVICES_ALL} \
+ $([[ "${ISO_GUI}" != 'cli' ]] && echo " ${SYSTEMD_SERVICES_GUI}") \
+ $([[ "${ENABLE_TTS_BRLTTY}" == 'yes' ]] && echo " ${SYSTEMD_SERVICES_ACC}")"
readonly DEFAULT_SHELL=/bin/bash
@@ -68,3 +73,6 @@ readonly OS_VERSION=$( echo ${ISO_TITLE} | cut -d ' ' -f 6
readonly OS_VERSION_ID=$( echo ${ISO_TITLE} | cut -d ' ' -f 6 )
readonly OS_VARIANT="$( echo ${OS_PRETTY_NAME} | cut -d ' ' -f -3 --complement )"
readonly OS_VARIANT_ID=${ISO_INIT}-${ISO_GUI}
+
+
+LOG_CONFIG() { printf "\033[01;34mconfiguring: %s\033[00m\n" "$(echo -e $*)" ; }
diff --git a/configs/profile/root-image/root/customize_root_image.sh b/configs/profile/root-image/root/customize_root_image.sh
index 0444bbb..4ce914a 100755
--- a/configs/profile/root-image/root/customize_root_image.sh
+++ b/configs/profile/root-image/root/customize_root_image.sh
@@ -6,26 +6,27 @@ set -e -u
source /root/customize_root_image-constants.inc
-# configure timezone and locales #
+LOG_CONFIG "timezone and locales"
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
for locale in ${LOCALES} ; do sed -i "s/#${locale}/${locale}/" /etc/locale.gen ; done ;
locale-gen
-# configure sudo #
+LOG_CONFIG "sudo"
chmod 750 /etc/sudoers.d
chmod 440 /etc/sudoers.d/g_wheel
-# configure pacman #
+LOG_CONFIG "pacman"
sed -i "s|#Server|Server|" /etc/pacman.d/mirrorlist
[ "${INSTALL_TYPE}" == 'Complete' ] && cp /etc/pacman-offline.conf /etc/pacman.conf || \
cp /etc/pacman-online.conf /etc/pacman.conf
-# configure services #
+
+LOG_CONFIG "services"
if [[ "${ISO_INIT}" == 'openrc' ]]
then # delete files that are specific to other init systems
@@ -50,7 +51,7 @@ else echo "invalid \$ISO_INIT for services '${ISO_INIT}'"
fi
-# configure root user, system defaults, and login session #
+LOG_CONFIG "system defaults and root user"
usermod -s ${DEFAULT_SHELL} root 2> /dev/null
sed -i "s|_EDITION_TITLE_|${ISO_TITLE}|" /etc/motd
@@ -62,14 +63,16 @@ echo "VARIANT=\"${OS_VARIANT}\"" >> /usr/lib/os-release
echo "VARIANT_ID=\"${OS_VARIANT_ID}\"" >> /usr/lib/os-release
-# configure login session #
+LOG_CONFIG "login session and live user"
+
+sed -i "s|_ENABLE_TTS_BRLTTY_|${ENABLE_TTS_BRLTTY}|" /etc/skel/.bash_profile
if [[ "${ISO_GUI}" == 'cli' ]]
then # configure CLI login session
cp ${ROOT_SKEL_FILES} /root/
sed -i "s|_DESKTOP_SESSION_||" /root/.bash_profile
-else # configure GUI login session and live user
+else # configure GUI login session
# configure live user
[[ -n "$(id ${LIVE_USER} 2> /dev/null)" ]] && userdel -r ${LIVE_USER} 2> /dev/null
diff --git a/configs/profile/root-image/usr/bin/livecd-alsa-unmuter b/configs/profile/root-image/usr/bin/livecd-alsa-unmuter
new file mode 100755
index 0000000..6de05a0
--- /dev/null
+++ b/configs/profile/root-image/usr/bin/livecd-alsa-unmuter
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Properly initialize the sound card so that we have audio at boot.
+# This script is released under the GNU General Public License.
+source /usr/share/livecd-sound/functions
+
+preinit_levels all
+sanify_levels all
diff --git a/configs/profile/root-image/usr/bin/pick-a-card b/configs/profile/root-image/usr/bin/pick-a-card
new file mode 100755
index 0000000..7f469e8
--- /dev/null
+++ b/configs/profile/root-image/usr/bin/pick-a-card
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+# If there are multiple usable sound cards, prompt the user to choose one,
+# using auditory feedback.
+# This script is released under the GNU General Public License.
+
+source /usr/share/livecd-sound/functions
+
+nwords() {
+ echo $#
+}
+
+is_numeric() {
+ local str=$1
+ expr match "$str" '[[:digit:]]\+$' > /dev/null 2>&1
+}
+
+set_default_card() {
+ local card=$1
+ sed -e "s/%card%/$card/g" < /usr/share/livecd-sound/asound.conf.in \
+ > /etc/asound.conf
+}
+
+play_on_card() {
+ local card=$1 file=$2
+ aplay "-Dplughw:$card,0" "$file"
+}
+
+set -f
+usable_cards="$(list_non_pcsp_cards)"
+num_usable_cards=$(nwords $usable_cards)
+
+if [ "$num_usable_cards" -eq 1 ]; then
+ exit 0
+fi
+
+for card in $usable_cards; do
+ if ! is_numeric "$card"; then
+ continue
+ fi
+ play_on_card "$card" /usr/share/livecd-sound/sounds/pick-a-card.wav&
+done
+wait
+sleep 1
+for card in $usable_cards; do
+ if ! is_numeric "$card"; then
+ continue
+ fi
+ play_on_card "$card" /usr/share/livecd-sound/sounds/beep.wav
+ if read -t 10; then
+ set_default_card "$card"
+ break
+ fi
+done
diff --git a/configs/profile/root-image/usr/bin/talk-to-me b/configs/profile/root-image/usr/bin/talk-to-me
new file mode 100755
index 0000000..118b013
--- /dev/null
+++ b/configs/profile/root-image/usr/bin/talk-to-me
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# Initialize the Speakup screenreader
+# This script is released under the GNU General Public License.
+
+started_flag=/run/speech-is-running
+
+if [[ ! -f $started_flag ]]; then
+ systemctl stop espeakup
+
+ sleep 5
+ pick-a-card
+
+ systemctl start espeakup
+ touch $started_flag
+fi
diff --git a/configs/profile/root-image/usr/share/livecd-sound/asound.conf.in b/configs/profile/root-image/usr/share/livecd-sound/asound.conf.in
new file mode 100644
index 0000000..851f829
--- /dev/null
+++ b/configs/profile/root-image/usr/share/livecd-sound/asound.conf.in
@@ -0,0 +1,12 @@
+pcm.!default {
+ type plug
+ slave.pcm {
+ type hw
+ card %card%
+ }
+}
+
+ctl.!default {
+ type hw
+ card %card%
+}
diff --git a/configs/profile/root-image/usr/share/livecd-sound/functions b/configs/profile/root-image/usr/share/livecd-sound/functions
new file mode 100644
index 0000000..e517795
--- /dev/null
+++ b/configs/profile/root-image/usr/share/livecd-sound/functions
@@ -0,0 +1,199 @@
+# Functions for setting up sound on the live CD.
+# This library is released under the GNU General Public License,
+# and it incorporates code from the /etc/init.d/alsa-utils included with
+# Ubuntu 8.04. Proper credit also goes to Debian.
+
+# Start code copied from Debian / Ubuntu:
+
+bugout () {
+ printf "/etc/rc.d/livecdsound: programming error"
+ stat_fail
+}
+
+echo_card_indices()
+{
+ if [ -f /proc/asound/cards ] ; then
+ sed -n -e's/^[[:space:]]*\([0-7]\)[[:space:]].*/\1/p' /proc/asound/cards
+ fi
+}
+
+filter_amixer_output()
+{
+ sed \
+ -e '/Unable to find simple control/d' \
+ -e '/Unknown playback setup/d' \
+ -e '/^$/d'
+}
+
+# The following functions try to set many controls.
+# No card has all the controls and so some of the attempts are bound to fail.
+# Because of this, the functions can't return useful status values.
+
+# $1 <control>
+# $2 <level>
+# $CARDOPT
+unmute_and_set_level()
+{
+ { [ "$2" ] && [ "$CARDOPT" ] ; } || bugout
+ amixer $CARDOPT -q set "$1" "$2" unmute 2>&1 | filter_amixer_output || :
+ return 0
+}
+
+# $1 <control>
+# $CARDOPT
+mute_and_zero_level()
+{
+ { [ "$1" ] && [ "$CARDOPT" ] ; } || bugout
+ amixer $CARDOPT -q set "$1" "0%" mute 2>&1 | filter_amixer_output || :
+ return 0
+}
+
+# $1 <control>
+# $2 "on" | "off"
+# $CARDOPT
+switch_control()
+{
+ { [ "$2" ] && [ "$CARDOPT" ] ; } || bugout
+ amixer $CARDOPT -q set "$1" "$2" 2>&1 | filter_amixer_output || :
+ return 0
+}
+
+# $1 <card ID>
+sanify_levels_on_card()
+{
+ CARDOPT="-c $1"
+
+ unmute_and_set_level "Front" "80%"
+ unmute_and_set_level "Master" "80%"
+ unmute_and_set_level "Master Mono" "80%"
+ unmute_and_set_level "Master Digital" "80%" # E.g., cs4237B
+ unmute_and_set_level "Playback" "80%"
+ unmute_and_set_level "Headphone" "100%"
+ unmute_and_set_level "PCM" "80%"
+ unmute_and_set_level "PCM,1" "80%" # E.g., ess1969
+ unmute_and_set_level "DAC" "80%" # E.g., envy24, cs46xx
+ unmute_and_set_level "DAC,0" "80%" # E.g., envy24
+ unmute_and_set_level "DAC,1" "80%" # E.g., envy24
+ unmute_and_set_level "Synth" "80%"
+ unmute_and_set_level "CD" "80%"
+ unmute_and_set_level "PC Speaker" "100%"
+
+ mute_and_zero_level "Mic"
+ mute_and_zero_level "IEC958" # Ubuntu #19648
+
+ # Intel P4P800-MX
+ switch_control "Master Playback Switch" on
+ switch_control "Master Surround" on
+
+ # Trident/YMFPCI/emu10k1:
+ unmute_and_set_level "Wave" "80%"
+ unmute_and_set_level "Music" "80%"
+ unmute_and_set_level "AC97" "80%"
+
+ # DRC:
+ unmute_and_set_level "Dynamic Range Compression" "80%"
+
+ # Required for HDA Intel (hda-intel):
+ unmute_and_set_level "Front" "80%"
+
+ # Required for SB Live 7.1/24-bit (ca0106):
+ unmute_and_set_level "Analog Front" "80%"
+
+ # Required at least for Via 823x hardware on DFI K8M800-MLVF Motherboard
+ switch_control "IEC958 Capture Monitor" off
+
+ # Required for hardware allowing toggles for AC97 through IEC958,
+ # valid values are 0, 1, 2, 3. Needs to be set to 0 for PCM1.
+ unmute_and_set_level "IEC958 Playback AC97-SPSA" "0"
+
+ # Required for newer Via hardware
+ unmute_and_set_level "VIA DXS,0" "80%"
+ unmute_and_set_level "VIA DXS,1" "80%"
+ unmute_and_set_level "VIA DXS,2" "80%"
+ unmute_and_set_level "VIA DXS,3" "80%"
+
+ # Required on some notebooks with ICH4:
+ switch_control "Headphone Jack Sense" off
+ switch_control "Line Jack Sense" off
+
+ # Some machines need one or more of these to be on;
+ # others need one or more of these to be off:
+ #
+ # switch_control "External Amplifier" on
+ switch_control "Audigy Analog/Digital Output Jack" on
+ switch_control "SB Live Analog/Digital Output Jack" on
+
+ # D1984 -- Thinkpad T61/X61
+ switch_control "Speaker" on
+ switch_control "Headphone" on
+
+ # HDA-Intel w/ "Digital" capture mixer (See Ubuntu #193823)
+ unmute_and_set_level "Digital" "80%"
+
+ return 0
+}
+
+# $1 <card ID> | "all"
+sanify_levels()
+{
+ TTSDML_RETURNSTATUS=0
+ case "$1" in
+ all)
+ for CARD in $(echo_card_indices) ; do
+ sanify_levels_on_card "$CARD" || TTSDML_RETURNSTATUS=1
+ done
+ ;;
+ *)
+ sanify_levels_on_card "$1" || TTSDML_RETURNSTATUS=1
+ ;;
+ esac
+ return $TTSDML_RETURNSTATUS
+}
+
+# $1 <card ID>
+preinit_levels_on_card()
+{
+ CARDOPT="-c $1"
+
+ # Silly dance to activate internal speakers by default on PowerMac
+ # Snapper and Tumbler
+ id=`cat /proc/asound/card$1/id 2>/dev/null`
+ if [ "$id" = "Snapper" -o "$id" = "Tumbler" ]; then
+ switch_control "Auto Mute" off
+ switch_control "PC Speaker" off
+ switch_control "Auto Mute" on
+ fi
+}
+
+# $1 <card ID> | "all"
+preinit_levels()
+{
+ TTSDML_RETURNSTATUS=0
+ case "$1" in
+ all)
+ for CARD in $(echo_card_indices) ; do
+ preinit_levels_on_card "$CARD" || TTSDML_RETURNSTATUS=1
+ done
+ ;;
+ *)
+ preinit_levels_on_card "$1" || TTSDML_RETURNSTATUS=1
+ ;;
+ esac
+ return $TTSDML_RETURNSTATUS
+}
+
+# End copied code.
+
+# List all cards that *should* be usable for PCM audio. In my experience,
+# the console speaker (handled by the pcsp driver) isn't a suitable playback
+# device, so we'll exclude it.
+list_non_pcsp_cards()
+{
+ for card in $(echo_card_indices); do
+ local cardfile="/proc/asound/card${card}/id"
+ if [ -r "$cardfile" -a -f "$cardfile" ] && \
+ [ "$(cat "$cardfile")" != pcsp ]; then
+ echo "$card"
+ fi
+ done
+}