내 목표는 전체 시스템이 아닌 Spotify 응용 프로그램을 음소거 할 수 있도록하는 것입니다. 명령 사용 : ps -C spotify -o pid=Spotify의 프로세스 ID를 찾을 수 "22981"있습니다. 이 경우 ID는 입니다. 해당 프로세스 ID로 다음 목록에서 검색하고 싶습니다 pacmd list-sink-inputs. 이 명령은 다음과 같은 목록을 반환합니다.
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"
이제는 application.process.id = "22981"이 경우 싱크 입력 인덱스 와 상관 관계를 설정하고 싶습니다 index: 0. 이제 색인 번호를 사용하여 pacmd set-sink-input-mute 0 1Spotify를 음소거하고 Spotify pacmd set-sink-input-mute 0 0를 음소거 해제하려면 이 명령을 실행해야합니다 . 이러한 명령의 경우 첫 번째 숫자는 앞에서 찾은 색인 번호로 바꿔야하며 다음 숫자는 음소거를 켜거나 끄는 부울입니다. 이것을 스크립트에 모두 넣을 수 있으므로 Spotify 응용 프로그램을 음소거 / 음소거 해제하는 명령을 얻을 수 있습니까?
편집 :
아래의 두 스크립트 모두 예상대로 작동합니다. 누군가 토글을 추가하여 그에 따라 확인 muted: yes하거나 muted: no음소거하거나 음소거를 해제 할 수 있습니까?
편집 : 나는 glenn jackman의 스크립트를 수정하여 토글을 추가 할 수있었습니다.
#!/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않습니까? 네트워크를 통해 작동합니다.