Skip to content

Commit

Permalink
Updated to archiso 49-1
Browse files Browse the repository at this point in the history
  • Loading branch information
gsanhueza committed Nov 7, 2020
1 parent 98b0ca3 commit 446cfa4
Show file tree
Hide file tree
Showing 14 changed files with 328 additions and 3 deletions.
3 changes: 2 additions & 1 deletion airootfs/etc/mkinitcpio.conf
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ FILES=()
#
## NOTE: If you have /usr on a separate partition, you MUST include the
# usr, fsck and shutdown hooks.
HOOKS=(base udev memdisk archiso_shutdown archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block filesystems keyboard)
HOOKS=(base udev modconf memdisk archiso_shutdown archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_kms block filesystems keyboard)

# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression
Expand All @@ -63,6 +63,7 @@ HOOKS=(base udev memdisk archiso_shutdown archiso archiso_loop_mnt archiso_pxe_c
COMPRESSION="xz"
#COMPRESSION="lzop"
#COMPRESSION="lz4"
#COMPRESSION="zstd"

# COMPRESSION_OPTIONS
# Additional options for the compressor
Expand Down
16 changes: 16 additions & 0 deletions airootfs/etc/systemd/system/livecd-alsa-unmuter.service
Original file line number Diff line number Diff line change
@@ -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
23 changes: 23 additions & 0 deletions airootfs/etc/systemd/system/livecd-talk.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later

[Unit]
Description=Screen reader service
After=livecd-alsa-unmuter.service
Before[email protected]
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
5 changes: 5 additions & 0 deletions airootfs/root/.zlogin
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
# fix for screen readers
if grep -Fq 'accessibility=' /proc/cmdline &> /dev/null; then
setopt SINGLE_LINE_ZLE
fi

~/.automated_script.sh
248 changes: 248 additions & 0 deletions airootfs/usr/local/bin/livecd-sound
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
#!/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
}

is_numeric() {
local str=$1
[[ "$str" =~ ^[0-9]+$ ]]
}

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="$(wc -w <<< "$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
3 changes: 3 additions & 0 deletions airootfs/usr/local/share/livecd-sound/asound.conf.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Defaults node
defaults.ctl.card %card%;
defaults.pcm.card %card%;
9 changes: 9 additions & 0 deletions efiboot/loader/entries/archiso-x86_64-speech-linux.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later

title Arch Linux install medium (x86_64, UEFI) with speech
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
2 changes: 1 addition & 1 deletion efiboot/loader/loader.conf
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later

timeout 3
timeout 15
default archiso-x86_64-linux.conf
6 changes: 6 additions & 0 deletions packages.x86_64
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later
alsa-utils
amd-ucode
arch-install-scripts
b43-fwcutter
base
bind-tools
brltty
broadcom-wl
btrfs-progs
clonezilla
Expand All @@ -19,6 +21,7 @@ dnsmasq
dosfstools
edk2-shell
efibootmgr
espeakup
ethtool
exfatprogs
f2fs-tools
Expand All @@ -40,6 +43,7 @@ lftp
linux
linux-atm
linux-firmware
livecd-sounds
lsscsi
lvm2
lynx
Expand Down Expand Up @@ -76,13 +80,15 @@ rxvt-unicode-terminfo
sdparm
sg3_utils
smartmontools
squashfs-tools
sudo
syslinux
systemd-resolvconf
tcpdump
terminus-font
termite-terminfo
testdisk
udftools
usb_modeswitch
usbutils
vim
Expand Down
1 change: 1 addition & 0 deletions syslinux/archiso_head.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,4 @@ MENU COLOR msg07 37;40 #90ffffff #a0000000 std
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std

MENU CLEAR
MENU IMMEDIATE
Loading

0 comments on commit 446cfa4

Please sign in to comment.