blob: 6be88f6b1fc04d0f4c1d3faaa7743f5da463df39 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#!/bin/sh
set -e
DEFAULT_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo"
global=
focused=
hdmi=
reset=
while getopts fgHRh name; do
case ${name} in
g) global=1 ;;
f) focused=1 ;;
H) hdmi=1 ;;
R) reset=1 ;;
h|?) printf "usage: %s [-gfhr]\n" "$(basename "$0")"
printf "\n"
printf " -g \t(set default sink and switch global output)\n"
printf " -f \t(switch focused container output)\n"
printf " -h \t(switch card to HDMI profile)\n"
printf " -r \t(switch card to default profile)\n"
printf "\n"
printf "Needs swq(1) to work.\n"
;;
esac
done
if [ "$#" -lt 1 ]; then
printf "global\nfocused\nhdmi_profile\nreset_profile\n" | menu | {
read -r line
case ${line} in
global) exec "$0" -g ;;
focused) exec "$0" -f ;;
hdmi_profile) exec "$0" -H ;;
reset_profile) exec "$0" -R ;;
esac
}
fi
# returns the sink_id
select_sink()
{
pactl list short sinks | awk '{print $2}' | menu
}
if [ -n "${global}" ]
then
target_sink=$(select_sink)
notify-send -a soundswitch "soundswitch: global" "switch to <i>${target_sink}</i>"
# set new default sink
pactl set-default-sink "${target_sink}"
# move all sink-inputs to the new sink
pactl list sink-inputs short | cut -f1 \
| xargs -i pactl move-sink-input "{}" "${target_sink}"
elif [ -n "${focused}" ]
then
# parse pid of currently focused container
# then get the sink-inputs for it and parse the sink-input-id
focused_binary=$(swq current con | jq -r '.pid' | xargs ps -o comm=)
sink_input_id=$(printf "%s\n" "${focused_binary}" \
| xargs pacmd list-sink-inputs \
| tr '\n' '\r' \
| perl -pe 's/[^\r]*index: ([0-9]+).+?application\.process\.binary = "([^\r]+)"\r.+?(?=index:|$)/\2=\1\r/g' \
| tr '\r' '\n' \
| grep "^{}" \
| cut -d'=' -f2)
[ -z "${sink_input_id}" ] && exit 1
# select which sink to switch to
target_sink=$(select_sink)
[ -z "${sink_input_id}" ] && exit 1
notify-send -a soundswitch "soundswitch: ${focused_binary}" "switch to <i>${target_sink}</i>"
pacmd move-sink-input "${sink_input_id}" "${target_sink}"
elif [ -n "${hdmi}" ]
then
target_card=$(pactl list short cards | awk '{print $2}' | menu)
notify-send -a soundswitch "soundswitch: hdmi" "switch <i>${target_card}</i> to HDMI profile"
pactl set-card-profile "${target_card}" ${HDMI_PROFILE}
elif [ -n "${reset}" ]
then
target_card=$(pactl list short cards | awk '{print $2}' | menu)
notify-send -a soundswitch "soundswitch: reset" "switch <i>${target_card}</i> to default profile"
pactl set-card-profile "${target_card}" ${DEFAULT_PROFILE}
fi
exit $?
|