5

Есть ли способ отключения приложений из терминала?

Я знаю, что amixer будет работать, чтобы заглушить все; но есть ли простое решение для отключения только данного приложения от терминала?

1 ответ1

0

Если ваш Linux использует pulseaudio , это то, что вам нужно:

  1. Изучите вывод pacmd list-sink-inputs и найдите приложение, которое вы хотите отключить; обратите внимание на его индекс.
  2. Запустите 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 "$@"

Если это работает для вас, пожалуйста, подтвердите оригинальный ответ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .