Tujuan saya adalah untuk dapat menonaktifkan aplikasi Spotify, bukan keseluruhan sistem. Menggunakan perintah: ps -C spotify -o pid=
Saya dapat menemukan ID proses Spotify, dalam hal ini ID tersebut "22981"
. Dengan proses yang ID saya ingin mencari dari daftar ini: pacmd list-sink-inputs
. Perintah itu mengembalikan daftar seperti ini:
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"
Sekarang saya ingin mengkorelasikan application.process.id = "22981"
ke indeks input wastafel yang dalam hal ini adalah index: 0
. Sekarang dengan nomor indeks itu maka saya perlu menjalankan perintah ini: pacmd set-sink-input-mute 0 1
untuk menonaktifkan Spotify dan pacmd set-sink-input-mute 0 0
unmute Spotify. Untuk perintah-perintah itu, nomor pertama harus diganti dengan nomor indeks yang ditemukan sebelumnya, dan nomor berikutnya adalah boolean untuk menghidupkan atau mematikan bisu. Bagaimana saya bisa memasukkan ini seluruhnya ke dalam skrip, sehingga saya bisa mendapatkan perintah untuk menonaktifkan / mengaktifkan suara aplikasi Spotify?
EDIT:
Kedua skrip di bawah berfungsi seperti yang diharapkan, dapatkah seseorang menambahkan toggle yang akan memeriksa muted: yes
atau muted: no
dan kemudian membisukan atau mengaktifkan suara yang sesuai?
EDIT: Saya dapat memodifikasi skrip glenn jackman untuk menambahkan toggle:
#!/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
? maka itu akan berfungsi melalui jaringan.