Amacım tüm sistemi değil Spotify uygulamasını susturabilmektir. Komutunu kullanarak: ps -C spotify -o pid=
Spotify'ın işlem kimliğini bulabiliyorum, bu durumda kimlik "22981"
. Bu işlemle ilgili kimlik ben bu listeden aramak istiyorum: pacmd list-sink-inputs
. Bu komut şöyle bir liste döndürür:
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"
Şimdi application.process.id = "22981"
bu durumda olan lavabo giriş indeksi ile ilişkilendirmek istiyorum index: 0
. Şimdi bu indeks numarasıyla bu komutu çalıştırmam gerekir: pacmd set-sink-input-mute 0 1
Spotify'ı susturmak ve pacmd set-sink-input-mute 0 0
Spotify'ı açmak için. Bu komutlar için, ilk sayının daha önce bulunan dizin numarası ile değiştirilmesi gerekir ve bir sonraki sayı, sesi kapatmak veya kapatmak için boole'dir. Bunu nasıl tamamen bir betiğe koyabilirim, böylece Spotify uygulamasını sessize almak / sesini açmak için bir komut alabilir miyim?
DÜZENLEME:
Aşağıdaki komut dosyalarının her ikisi de beklendiği gibi çalışır, biri buna göre kontrol edecek muted: yes
veya muted: no
daha sonra sessize alacak veya sesini açacak bir geçiş ekleyebilir mi?
EDIT: Geçiş eklemek için glenn jackman'ın komut dosyasını değiştirmek mümkün:
#!/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
? ağ üzerinde çalışacaktır.