[Linux] Add pahelper.sh command
This was copied directly from https://raw.githubusercontent.com/mpapis/home_dotfiles/master/bin/mypa
This commit is contained in:
parent
f3fd491196
commit
54444929d3
98
dotfiles/lib/bin/pahelper.sh
Executable file
98
dotfiles/lib/bin/pahelper.sh
Executable file
@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Taken from https://raw.githubusercontent.com/mpapis/home_dotfiles/master/bin/mypa
|
||||
|
||||
function list_sinks()
|
||||
{
|
||||
pacmd list-sinks | grep -E 'index:|name:'
|
||||
}
|
||||
|
||||
function switch_sink_default()
|
||||
{
|
||||
echo switching default
|
||||
pacmd set-default-sink $1 || echo failed
|
||||
}
|
||||
|
||||
function switch_sink_applications()
|
||||
{
|
||||
echo switching applications
|
||||
pacmd list-sink-inputs |
|
||||
awk '/index:/{print $2}' |
|
||||
xargs -r -I{} pacmd move-sink-input {} $1 ||
|
||||
echo failed
|
||||
}
|
||||
|
||||
function switch_sink_kmix_master()
|
||||
{
|
||||
qdbus org.kde.kmix >/dev/null 2>&1 || return 0 # kmix not found
|
||||
|
||||
typeset name mixer
|
||||
# get the device name in pulseaudio
|
||||
name="$(
|
||||
pacmd list-sinks | awk -v search=$1 '
|
||||
/index:/{found=$2}
|
||||
/* index:/{found=$3}
|
||||
/name:/&&found==search{print $2}
|
||||
'
|
||||
)"
|
||||
# format device name to a name in kmix
|
||||
name="${name#<}"
|
||||
name="${name%>}"
|
||||
name="${name//[.-]/_}"
|
||||
# grab full path in kmix dbus
|
||||
mixer="$( qdbus org.kde.kmix | \grep "/${name}$" )"
|
||||
mixer="${mixer#/Mixers/}"
|
||||
mixer="${mixer%/*}"
|
||||
# get the kmix ids
|
||||
name="$( qdbus org.kde.kmix "/Mixers/${mixer}/${name}" org.kde.KMix.Control.id)"
|
||||
mixer="$(qdbus org.kde.kmix "/Mixers/${mixer}" org.kde.KMix.Mixer.id )"
|
||||
echo "set master channel in kmix"
|
||||
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "$mixer" "$name" >/dev/null || echo failed
|
||||
}
|
||||
|
||||
function switch_sink()
|
||||
{
|
||||
switch_sink_default "$@"
|
||||
switch_sink_applications "$@"
|
||||
switch_sink_kmix_master "$@"
|
||||
}
|
||||
|
||||
# Use a zenity gui to switch audio outputs
|
||||
function switch_gui()
|
||||
{
|
||||
# get current output id, all output ids and the sink names
|
||||
current_id=$(pacmd list-sinks | egrep '\* index:' | egrep -o '[0-9]+$')
|
||||
ids=( $(pacmd list-sinks | egrep 'index:' | egrep -o '[0-9]+$' | tr '\n' ' ') )
|
||||
names=( $(pacmd list-sinks | egrep 'name:' | egrep -o '\..*>$' | tr -d '>' | tr '\n' ' ') )
|
||||
|
||||
zen_pars="--list --radiolist --column '' --column 'ID' --column 'Sink_name'"
|
||||
|
||||
# construct the zenity command
|
||||
for i in "${!ids[@]}"
|
||||
do
|
||||
if [ ${ids[$i]} = $current_id ]; then
|
||||
zen_pars="$zen_pars TRUE"
|
||||
else
|
||||
zen_pars="$zen_pars FALSE"
|
||||
fi
|
||||
zen_pars="$zen_pars ${ids[$i]} ${names[$i]}"
|
||||
done
|
||||
|
||||
# change the audio sink with the switch_sink function
|
||||
new_sink_id=$(zenity $zen_pars || echo "")
|
||||
if [ -n $new_sink_id ]; then
|
||||
switch_sink $new_sink_id
|
||||
fi
|
||||
}
|
||||
|
||||
function help_me()
|
||||
{
|
||||
echo "Usage: $0 [gui|list|<sink name to switch to>]"
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
(""|list) list_sinks ;;
|
||||
([0-9]*) switch_sink "$@" ;;
|
||||
(gui) switch_gui ;;
|
||||
(*) help_me ;;
|
||||
esac
|
Loading…
Reference in New Issue
Block a user