मेरा लक्ष्य Spotify एप्लिकेशन को म्यूट करने में सक्षम होना है, न कि पूरे सिस्टम को। कमांड का उपयोग करना: ps -C spotify -o pid=
मैं Spotify की प्रक्रिया आईडी खोजने में सक्षम हूं, इस मामले में आईडी है "22981"
। उस प्रक्रिया आईडी के साथ मैं इस सूची से खोजना चाहूंगा 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 1
Spotify को म्यूट pacmd set-sink-input-mute 0 0
करने के लिए और Spotify को अनम्यूट करने के लिए। उन आदेशों के लिए, पहले नंबर को पहले पाए गए इंडेक्स नंबर से बदलना होगा, और अगला नंबर म्यूट को चालू या बंद करने के लिए बूलियन है। मैं इसे पूरी तरह से एक स्क्रिप्ट में कैसे डाल सकता हूं, इसलिए मैं Spotify एप्लिकेशन को म्यूट / अनम्यूट करने के लिए कमांड प्राप्त कर सकता हूं?
संपादित करें:
नीचे दी गई दोनों लिपियाँ उम्मीद के मुताबिक काम करती हैं, क्या कोई ऐसा टॉगल जोड़ सकता है जो जाँच करे muted: yes
या muted: no
फिर उसके अनुसार म्यूट या अनम्यूट करे?
संपादित करें: मैं टॉगल जोड़ने के लिए ग्लेन जैकमैन की स्क्रिप्ट को संशोधित करने में सक्षम था:
#!/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
? तब यह नेटवर्क पर काम करेगा।