parent
6820f2cb69
commit
6a39300b0f
3
Makefile
3
Makefile
@ -25,7 +25,8 @@ lint:
|
|||||||
$(wildcard configs/*/build.sh) \
|
$(wildcard configs/*/build.sh) \
|
||||||
$(wildcard configs/*/profiledef.sh) \
|
$(wildcard configs/*/profiledef.sh) \
|
||||||
configs/releng/airootfs/root/.automated_script.sh \
|
configs/releng/airootfs/root/.automated_script.sh \
|
||||||
configs/releng/airootfs/usr/local/bin/choose-mirror
|
configs/releng/airootfs/usr/local/bin/choose-mirror \
|
||||||
|
configs/releng/airootfs/usr/local/bin/livecd-sound
|
||||||
shellcheck -s dash $(HOOKS_FILES) $(SCRIPT_FILES)
|
shellcheck -s dash $(HOOKS_FILES) $(SCRIPT_FILES)
|
||||||
|
|
||||||
install: install-program install-examples install-doc
|
install: install-program install-examples install-doc
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Unmute All Sound Card Controls For Use With The Live Arch Environment
|
||||||
|
# This needs to run after the audio device becomes available.
|
||||||
|
Wants=systemd-udev-settle.service
|
||||||
|
After=systemd-udev-settle.service sound.target
|
||||||
|
ConditionKernelCommandLine=accessibility=on
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/local/bin/livecd-sound -u
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sound.target
|
@ -0,0 +1,23 @@
|
|||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Screen reader service
|
||||||
|
After=livecd-alsa-unmuter.service
|
||||||
|
Before=getty@tty1.service
|
||||||
|
ConditionKernelCommandLine=accessibility=on
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
TTYPath=/dev/tty13
|
||||||
|
ExecStartPre=/usr/bin/chvt 13
|
||||||
|
ExecStart=/usr/local/bin/livecd-sound -p
|
||||||
|
ExecStartPost=/usr/bin/chvt 1
|
||||||
|
ExecStartPost=systemctl start espeakup.service
|
||||||
|
StandardInput=tty
|
||||||
|
TTYVHangup=yes
|
||||||
|
TTYVTDisallocate=yes
|
||||||
|
RemainAfterExit=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@ -0,0 +1 @@
|
|||||||
|
/etc/systemd/system/livecd-talk.service
|
@ -0,0 +1 @@
|
|||||||
|
../livecd-alsa-unmuter.service
|
@ -1 +1,6 @@
|
|||||||
|
# fix for screen readers
|
||||||
|
if grep -Fq 'accessibility=' /proc/cmdline &> /dev/null; then
|
||||||
|
setopt SINGLE_LINE_ZLE
|
||||||
|
fi
|
||||||
|
|
||||||
~/.automated_script.sh
|
~/.automated_script.sh
|
||||||
|
252
configs/releng/airootfs/usr/local/bin/livecd-sound
Executable file
252
configs/releng/airootfs/usr/local/bin/livecd-sound
Executable file
@ -0,0 +1,252 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<- _EOF_
|
||||||
|
live cd sound helper script.
|
||||||
|
Usage: livecdsound [OPTION]
|
||||||
|
OPTIONS
|
||||||
|
-u, --unmute unmute all sound cards
|
||||||
|
-p, --pick select a card for speetch output
|
||||||
|
-h, --help Show this usage message
|
||||||
|
|
||||||
|
_EOF_
|
||||||
|
}
|
||||||
|
|
||||||
|
bugout () {
|
||||||
|
printf "/usr/local/bin/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
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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 <card id>
|
||||||
|
# $2 <control>
|
||||||
|
# $3 <level>
|
||||||
|
unmute_and_set_level(){
|
||||||
|
{ [ "$3" ] &&[ "$2" ] && [ "$1" ] ; } || bugout
|
||||||
|
systemd-cat -t "livecdsound" printf "Setting: %s on card: %s to %s\n" "$2" "$1" "$3"
|
||||||
|
systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "$3" unmute
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 <card id>
|
||||||
|
# $2 <control>
|
||||||
|
mute_and_zero_level()
|
||||||
|
{
|
||||||
|
{ [ "$1" ] && [ "$2" ] ; } || bugout
|
||||||
|
systemd-cat -t "livecdsound" printf "Muting control: %s on card: %s\n" "$2" "$1"
|
||||||
|
systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "0%" mute
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 <card ID>
|
||||||
|
# $2 <control>
|
||||||
|
# $3 "on" | "off"
|
||||||
|
switch_control()
|
||||||
|
{
|
||||||
|
{ [ "$3" ] && [ "$1" ] ; } || bugout
|
||||||
|
systemd-cat -t "livecdsound" printf "Switching control: %s on card: %s to %s\n" "$2" "$1" "$3"
|
||||||
|
systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "$3"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 <card ID>
|
||||||
|
sanify_levels_on_card()
|
||||||
|
{
|
||||||
|
unmute_and_set_level "$1" "Front" "80%"
|
||||||
|
unmute_and_set_level "$1" "Master" "80%"
|
||||||
|
unmute_and_set_level "$1" "Master Mono" "80%"
|
||||||
|
unmute_and_set_level "$1" "Master Digital" "80%" # E.g., cs4237B
|
||||||
|
unmute_and_set_level "$1" "Playback" "80%"
|
||||||
|
unmute_and_set_level "$1" "Headphone" "100%"
|
||||||
|
unmute_and_set_level "$1" "PCM" "80%"
|
||||||
|
unmute_and_set_level "$1" "PCM,1" "80%" # E.g., ess1969
|
||||||
|
unmute_and_set_level "$1" "DAC" "80%" # E.g., envy24, cs46xx
|
||||||
|
unmute_and_set_level "$1" "DAC,0" "80%" # E.g., envy24
|
||||||
|
unmute_and_set_level "$1" "DAC,1" "80%" # E.g., envy24
|
||||||
|
unmute_and_set_level "$1" "Synth" "80%"
|
||||||
|
unmute_and_set_level "$1" "CD" "80%"
|
||||||
|
unmute_and_set_level "$1" "PC Speaker" "100%"
|
||||||
|
|
||||||
|
mute_and_zero_level "$1" "Mic"
|
||||||
|
mute_and_zero_level "$1" "IEC958" # Ubuntu #19648
|
||||||
|
|
||||||
|
# Intel P4P800-MX
|
||||||
|
switch_control "$1" "Master Playback Switch" on
|
||||||
|
switch_control "$1" "Master Surround" on
|
||||||
|
|
||||||
|
# Trident/YMFPCI/emu10k1:
|
||||||
|
unmute_and_set_level "$1" "Wave" "80%"
|
||||||
|
unmute_and_set_level "$1" "Music" "80%"
|
||||||
|
unmute_and_set_level "$1" "AC97" "80%"
|
||||||
|
|
||||||
|
# DRC:
|
||||||
|
unmute_and_set_level "$1" "Dynamic Range Compression" "80%"
|
||||||
|
|
||||||
|
# Required for HDA Intel (hda-intel):
|
||||||
|
unmute_and_set_level "$1" "Front" "80%"
|
||||||
|
|
||||||
|
# Required for SB Live 7.1/24-bit (ca0106):
|
||||||
|
unmute_and_set_level "$1" "Analog Front" "80%"
|
||||||
|
|
||||||
|
# Required at least for Via 823x hardware on DFI K8M800-MLVF Motherboard
|
||||||
|
switch_control "$1" "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 "$1" "IEC958 Playback AC97-SPSA" "0"
|
||||||
|
|
||||||
|
# Required for newer Via hardware
|
||||||
|
unmute_and_set_level "$1" "VIA DXS,0" "80%"
|
||||||
|
unmute_and_set_level "$1" "VIA DXS,1" "80%"
|
||||||
|
unmute_and_set_level "$1" "VIA DXS,2" "80%"
|
||||||
|
unmute_and_set_level "$1" "VIA DXS,3" "80%"
|
||||||
|
|
||||||
|
# Required on some notebooks with ICH4:
|
||||||
|
switch_control "$1" "Headphone Jack Sense" off
|
||||||
|
switch_control "$1" "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 "$1" "Audigy Analog/Digital Output Jack" on
|
||||||
|
switch_control "$1" "SB Live Analog/Digital Output Jack" on
|
||||||
|
|
||||||
|
# D1984 -- Thinkpad T61/X61
|
||||||
|
switch_control "$1" "Speaker" on
|
||||||
|
switch_control "$1" "Headphone" on
|
||||||
|
|
||||||
|
# HDA-Intel w/ "Digital" capture mixer (See Ubuntu #193823)
|
||||||
|
unmute_and_set_level "$1" "Digital" "80%"
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 <card ID> | "all"
|
||||||
|
sanify_levels()
|
||||||
|
{
|
||||||
|
local ttsdml_returnstatus=0
|
||||||
|
local card
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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" ] && [ -f "$cardfile" ] && \
|
||||||
|
[ "$(cat "$cardfile")" != pcsp ]; then
|
||||||
|
echo "$card"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Properly initialize the sound card so that we have audio at boot.
|
||||||
|
unmute_all_cards()
|
||||||
|
{
|
||||||
|
sanify_levels all
|
||||||
|
}
|
||||||
|
|
||||||
|
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/local/share/livecd-sound/asound.conf.in \
|
||||||
|
> /etc/asound.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
play_on_card() {
|
||||||
|
local card=$1 file=$2
|
||||||
|
aplay -q "-Dplughw:$card,0" "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# If there are multiple usable sound cards, prompt the user to choose one,
|
||||||
|
# using auditory feedback.
|
||||||
|
pick_a_card()
|
||||||
|
{
|
||||||
|
set -f
|
||||||
|
usable_cards="$(list_non_pcsp_cards)"
|
||||||
|
num_usable_cards=$(nwords $usable_cards)
|
||||||
|
|
||||||
|
if [ "$num_usable_cards" -eq 1 ]; then
|
||||||
|
systemd-cat -t "livecdsound" printf "Only one sound card is detected\n"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
systemd-cat -t "livecdsound" printf "multiple sound cards detected\n"
|
||||||
|
for card in $usable_cards; do
|
||||||
|
if ! is_numeric "$card"; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
play_on_card "$card" /usr/share/livecd-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-sounds/beep.wav
|
||||||
|
if read -r -t 10; then
|
||||||
|
systemd-cat -t "livecdsound" printf "Selecting %s sound card as default\n" "$card"
|
||||||
|
set_default_card "$card"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
echo "error: No argument passed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
while [[ "${1}" != "" ]]; do
|
||||||
|
case ${1} in
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
-u|--unmute)
|
||||||
|
systemd-cat -t "livecdsound" printf "Unmuting all cards"
|
||||||
|
unmute_all_cards
|
||||||
|
;;
|
||||||
|
-p|--pick)
|
||||||
|
pick_a_card
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "error: Unsupported argument"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
@ -0,0 +1,3 @@
|
|||||||
|
Defaults node
|
||||||
|
defaults.ctl.card %card%;
|
||||||
|
defaults.pcm.card %card%;
|
@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
title Arch Linux install medium (x86_64, UEFI) with speach
|
||||||
|
linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux
|
||||||
|
initrd /%INSTALL_DIR%/boot/intel-ucode.img
|
||||||
|
initrd /%INSTALL_DIR%/boot/amd-ucode.img
|
||||||
|
initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
|
||||||
|
options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% accessibility=on
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
timeout 3
|
timeout 30
|
||||||
default archiso-x86_64-linux.conf
|
default archiso-x86_64-linux.conf
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
alsa-utils
|
||||||
amd-ucode
|
amd-ucode
|
||||||
arch-install-scripts
|
arch-install-scripts
|
||||||
b43-fwcutter
|
b43-fwcutter
|
||||||
base
|
base
|
||||||
bind-tools
|
bind-tools
|
||||||
|
brltty
|
||||||
broadcom-wl
|
broadcom-wl
|
||||||
btrfs-progs
|
btrfs-progs
|
||||||
clonezilla
|
clonezilla
|
||||||
@ -19,6 +21,7 @@ dnsmasq
|
|||||||
dosfstools
|
dosfstools
|
||||||
edk2-shell
|
edk2-shell
|
||||||
efibootmgr
|
efibootmgr
|
||||||
|
espeakup
|
||||||
ethtool
|
ethtool
|
||||||
exfatprogs
|
exfatprogs
|
||||||
f2fs-tools
|
f2fs-tools
|
||||||
@ -40,6 +43,7 @@ lftp
|
|||||||
linux
|
linux
|
||||||
linux-atm
|
linux-atm
|
||||||
linux-firmware
|
linux-firmware
|
||||||
|
livecd-sounds
|
||||||
lsscsi
|
lsscsi
|
||||||
lvm2
|
lvm2
|
||||||
lynx
|
lynx
|
||||||
|
@ -28,3 +28,4 @@ MENU COLOR msg07 37;40 #90ffffff #a0000000 std
|
|||||||
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std
|
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std
|
||||||
|
|
||||||
MENU CLEAR
|
MENU CLEAR
|
||||||
|
MENU IMMEDIATE
|
||||||
|
@ -10,3 +10,14 @@ MENU LABEL Arch Linux install medium (x86_64, BIOS)
|
|||||||
LINUX boot/x86_64/vmlinuz-linux
|
LINUX boot/x86_64/vmlinuz-linux
|
||||||
INITRD boot/intel-ucode.img,boot/amd-ucode.img,boot/x86_64/initramfs-linux.img
|
INITRD boot/intel-ucode.img,boot/amd-ucode.img,boot/x86_64/initramfs-linux.img
|
||||||
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL%
|
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL%
|
||||||
|
|
||||||
|
# Accessibility boot option
|
||||||
|
LABEL arch64speech
|
||||||
|
TEXT HELP
|
||||||
|
Boot the Arch Linux install medium on BIOS with speakup screen reader.
|
||||||
|
It allows you to install Arch Linux or perform system maintenance with speech feedback.
|
||||||
|
ENDTEXT
|
||||||
|
MENU LABEL Arch Linux install medium (x86_64, BIOS) with ^speech
|
||||||
|
LINUX boot/x86_64/vmlinuz-linux
|
||||||
|
INITRD boot/intel-ucode.img,boot/amd-ucode.img,boot/x86_64/initramfs-linux.img
|
||||||
|
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% accessibility=on
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
INCLUDE boot/syslinux/archiso_head.cfg
|
INCLUDE boot/syslinux/archiso_head.cfg
|
||||||
|
|
||||||
DEFAULT arch64
|
DEFAULT arch64
|
||||||
TIMEOUT 30
|
TIMEOUT 300
|
||||||
|
|
||||||
INCLUDE boot/syslinux/archiso_sys-linux.cfg
|
INCLUDE boot/syslinux/archiso_sys-linux.cfg
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user