Mein Ziel ist es, die Spotify-Anwendung und nicht das gesamte System stumm zu schalten. Verwenden des Befehls: ps -C spotify -o pid=
Ich kann die Prozess-ID von Spotify finden. In diesem Fall lautet die ID "22981"
. Mit diesem Prozess würde ID Ich mag aus dieser Liste suchen: pacmd list-sink-inputs
. Dieser Befehl gibt eine Liste wie folgt zurück:
eric@eric-desktop:~$ pacmd list-sink-inputs
Welcome to PulseAudio! Use "help" for usage information.
>>> 1 sink input(s) available.
index: 0
driver: <protocol-native.c>
flags: START_CORKED
state: RUNNING
sink: 1 <alsa_output.pci-0000_00_1b.0.analog-stereo>
volume: 0: 100% 1: 100%
0: -0.00 dB 1: -0.00 dB
balance 0.00
muted: no
current latency: 1019.80 ms
requested latency: 371.52 ms
sample spec: s16le 2ch 44100Hz
channel map: front-left,front-right
Stereo
resample method: (null)
module: 8
client: 10 <Spotify>
properties:
media.role = "music"
media.name = "Spotify"
application.name = "Spotify"
native-protocol.peer = "UNIX socket client"
native-protocol.version = "26"
application.process.id = "22981"
application.process.user = "eric"
application.process.host = "eric-desktop"
application.process.binary = "spotify"
window.x11.display = ":0"
application.language = "en_US.UTF-8"
application.process.machine_id = "058c89ad77c15e1ce0dd5a7800000012"
application.process.session_id = "058c89ad77c15e1ce0dd5a7800000012-1345692739.486413-85297109"
application.icon_name = "spotify-linux-512x512"
module-stream-restore.id = "sink-input-by-media-role:music"
Nun möchte ich den application.process.id = "22981"
mit dem Senkeneingabeindex korrelieren , der in diesem Fall ist index: 0
. Mit dieser Indexnummer müsste ich dann diesen Befehl ausführen: pacmd set-sink-input-mute 0 1
Spotify stumm pacmd set-sink-input-mute 0 0
schalten und Spotify wieder einschalten. Für diese Befehle müsste die erste Nummer durch die zuvor gefundene Indexnummer ersetzt werden, und die nächste Nummer ist der Boolesche Wert, um die Stummschaltung ein- oder auszuschalten. Wie kann ich dies insgesamt in ein Skript einfügen, um einen Befehl zum Stummschalten / Aufheben der Stummschaltung der Spotify-Anwendung zu erhalten?
EDIT:
Sowohl der Skripte unten wie erwartet, kann jemand ein Toggle hinzufügen , die prüfen würde muted: yes
oder muted: no
und dann stumm oder unmute entsprechend?
BEARBEITEN: Ich konnte das Skript von Glenn Jackman modifizieren, um den Toggle hinzuzufügen:
#!/bin/bash
main() {
local action=toggle
while getopts :mu option; do
case "$option" in
m) action=mute ;;
u) action=unmute ;;
?) usage 1 "invalid option: -$OPTARG" ;;
esac
done
shift $((OPTIND - 1))
local pid=$(pidof "$1")
if [[ -z "$pid" ]]; then
echo "error: no running processes for: $1" >&2
elif [[ "$1" ]]; then
$action "$1"
else
usage 1 "specify an application name"
fi
}
usage() {
[[ "$2" ]] && echo "error: $2"
echo "Usage: $0 [-m | -u] appname"
echo "Default: toggle mute"
echo "Arguments:"
echo "-m = mute application"
echo "-u = unmute application"
exit $1
}
toggle() {
local status=$(get_status "$1")
if [[ "$status" == "yes" ]]; then
unmute "$1"
elif [[ "$status" == "no" ]]; then
mute "$1"
fi
}
mute() { adjust_muteness "$1" 1; }
unmute() { adjust_muteness "$1" 0; }
adjust_muteness() {
local index=$(get_index "$1")
local status=$(get_status "$1")
[[ "$index" ]] && pacmd set-sink-input-mute "$index" $2 >/dev/null
}
get_index() {
local pid=$(pidof "$1")
pacmd list-sink-inputs |
awk -v pid=$pid '
$1 == "index:" {idx = $2}
$1 == "application.process.id" && $3 == "\"" pid "\"" {print idx; exit}
'
}
get_status() {
local pid=$(pidof "$1")
pacmd list-sink-inputs |
awk -v pid=$pid '
$1 == "muted:" {idx = $2}
$1 == "application.process.id" && $3 == "\"" pid "\"" {print idx; exit}
'
}
main "$@"
pactl list sink-inputs
? dann wird es über das Netzwerk funktionieren.