Есть ли способ отключения приложений из терминала?
Я знаю, что amixer
будет работать, чтобы заглушить все; но есть ли простое решение для отключения только данного приложения от терминала?
Есть ли способ отключения приложений из терминала?
Я знаю, что amixer
будет работать, чтобы заглушить все; но есть ли простое решение для отключения только данного приложения от терминала?
Если ваш Linux использует pulseaudio
, это то, что вам нужно:
pacmd list-sink-inputs
и найдите приложение, которое вы хотите отключить; обратите внимание на его индекс.pacmd set-sink-input-mute <index> true
чтобы отключить звук приложения (… false
- включить звук).Пример (некоторые нерелевантные строки заменены на …
):
$ pacmd list-sink-inputs
index: 0
…
index: 1
driver: <protocol-native.c>
flags: START_CORKED FIX_RATE
state: RUNNING
sink: 0 <alsa_output.pci-0000_00_1b.0.analog-stereo>
volume: front-left: 95027 / 145% / 9,68 dB, front-right: 95027 / 145% / 9,68 dB
balance 0,00
muted: no
current latency: 1952,72 ms
requested latency: 40,00 ms
sample spec: float32le 2 k 44100 Hz
channel map: front-left,front-right
Stereo
resample method: copy
module: 10
client: 8 <VLC media player (LibVLC 2.2.2)>
properties:
media.role = "video"
media.name = "audio stream"
application.name = "VLC media player (LibVLC 2.2.2)"
native-protocol.peer = "UNIX socket client"
native-protocol.version = "30"
application.id = "org.VideoLAN.VLC"
application.version = "2.2.2"
application.icon_name = "vlc"
application.language = "pl_PL.UTF-8"
application.process.id = "15133"
…
$ pacmd set-sink-input-mute 1 true # mutes VLC
$ pacmd set-sink-input-mute 1 false # unmutes VLC
Существует такой ответ Ask Ubuntu со следующим скриптом, который позволяет отключить или включить звук приложения по его имени:
#!/bin/bash main() { local action=mute while getopts :hu option; do case "$option" in h) usage 0 ;; u) action=unmute ;; ?) usage 1 "invalid option: -$OPTARG" ;; esac done shift $((OPTIND - 1)) if [[ "$1" ]]; then $action "$1" else usage 1 "specify an application name" fi } usage() { [[ "$2" ]] && echo "error: $2" echo "usage: $0 [-h] [-u] appname" echo "where: -u = ummute application (default action is to mute)" exit $1 } mute() { adjust_muteness "$1" 1; } unmute() { adjust_muteness "$1" 0; } adjust_muteness() { local index=$(get_index "$1") [[ "$index" ]] && pacmd set-sink-input-mute "$index" $2 >/dev/null } get_index() { local pid=$(pidof "$1") if [[ -z "$pid" ]]; then echo "error: no running processes for: $1" >&2 else pacmd list-sink-inputs | awk -v pid=$pid ' $1 == "index:" {idx = $2} $1 == "application.process.id" && $3 == "\"" pid "\"" {print idx; exit} ' fi } main "$@"
Если это работает для вас, пожалуйста, подтвердите оригинальный ответ.