답변:
명령 행에서 기본 오디오 출력 장치를 변경하기 위해 pacmd
Pulse Audio 명령 행 유틸리티를 사용할 수 있습니다 .
헤드폰과 스피커를 모두 별도의 오디오 카드에 꽂고 싶을 때 오늘날에도 마찬가지로해야 할 일이 있습니다. 내가 작성한 쉘 스크립트는 다음과 같습니다.
#!/usr/bin/env bash
sinks=($(pacmd list-sinks | grep index | \
awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}
pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done
노트:
pacmd
유틸리티가 나열 하는 처음 두 개의 오디오 출력 장치 사이를 전환 합니다. 오디오 장치가 두 개 이상 있고 다른 장치로 바꾸려면 7 행의 논리를 일부 조건으로 바꿔야합니다.질문은 꽤 오래되었지만 그놈 2 사용자에게는 여전히 답이 유용 할 수 있습니다. 여기에 설명 된 정확한 문제에 PulseAudio Mixer Applet 을 사용 했습니다. 패널 메뉴에서 바로 입력 및 출력 장치를 변경할 수 있습니다. 내가 찾은 가장 편리한 방법입니다.
물론 애플릿을 사용하여 장치를 전환하는 것도 잘 작동합니다. 그러나 스크립트 작성에 대한 멋진 점은 매우 빠릅니다. 예를 들어 키보드 단축키 alt + s를 예로 들겠습니다. 따라서 헤드폰에서 스피커로 전환하려면 alt + s 만 누르면됩니다.
어쨌든. 앤드류는 말했다 :
오디오 장치가 두 개 이상 있고 다른 장치로 교체하려는 경우 7 행의 논리를 일부 조건으로 바꿔야합니다.
그것이 내가 한 일입니다. 누군가가 문제가있는 경우를 대비하여 공유합니다.
#!/usr/bin/env bash
#sinks=($(pacmd list-sinks | grep index | \
# awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
sinks=($(pacmd list-sinks | grep index | \
awk '{ if ($1 == "*") print "1"; else print "0" }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
#find active sink
active=0
for i in ${sinks[*]}
do
if [ $i -eq 0 ]
then active=$((active+1))
else break
fi
done
#switch to next sink
swap=$(((active+1)%${#sinks[@]}))
pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done
내가 다르게 한 것은 a) for 루프에서 활성 싱크를 찾는 것입니다. 그리고 b) 인덱스를 1 씩 증가시켜 다음 싱크로 전환합니다. 그런 다음 싱크 수로 결과를 모듈로 계산합니다. 예를 들어 싱크가 3 개인 경우 (2 + 1) % 3 = 0입니다. 따라서 싱크 인덱스 2에서 싱크 인덱스 0으로 전환합니다.
이러한 방식으로 스위치는 사용 가능한 싱크를 통해 위쪽으로 이동할 수 있습니다.
스크립트 주셔서 감사합니다! 누구나 사용하기를 원하는 경우 입력 (마이크) 부분을 추가했습니다.
while read line ; do
case $line in
*\*\ index*) x=1 ;;
index*) x=0 ;;
name*)
source=$(echo $line | sed -e "s/.*<//;s/>.*//")
if [[ $x = "0" ]] ; then
pacmd set-default-source $source &> /dev/null
fi ;;
esac
done < <(pacmd list-sources | grep -e alsa_input -e index)
사운드 장치 목록을 순환하려면 다음 스크립트를 사용하십시오.
#!/bin/bash
declare -i sinks=(`pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`)
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index=`pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`
declare -i next_sink_index=${sinks[0]}
#find the next sink (not always the next index number)
declare -i ord=0
while [ $ord -lt $sinks_count ];
do
echo ${sinks[$ord]}
if [ ${sinks[$ord]} -gt $active_sink_index ] ; then
next_sink_index=${sinks[$ord]}
break
fi
let ord++
done
#change the default sink
pacmd "set-default-sink ${next_sink_index}"
#move all inputs to the new sink
for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p');
do
pacmd "move-sink-input $app $next_sink_index"
done
#display notification
declare -i ndx=0
pacmd list-sinks | sed -n -e 's/device.description[[:space:]]=[[:space:]]"\(.*\)"/\1/p' | while read line;
do
if [ $(( $ord % $sinks_count )) -eq $ndx ] ; then
notify-send -i notification-audio-volume-high --hint=string:x-canonical-private- synchronous: "Sound output switched to" "$line"
exit
fi
let ndx++
done;
모든 크레딧은 우분투 포럼 에서 tsvetan으로갑니다 .
랩톱의 내부 스피커와 내 스테레오에 연결된 애플 공항 기지국 사이를 전환하는 방법을 찾고있었습니다 . 스위치에 단축키를 할당하기로 결정했습니다. 오디오 기본 설정 창을 잠깐 동안 팝업하여 스위치를 시각적으로 확인하고 wmctrl을 사용하여 창을 닫았습니다.
(노트북에서 이러한 키의 Fn 기능은 볼륨을 높이고 낮추는 것이므로 Ctrl 기능이 오디오 출력을 변경하는 것이 분명해 보이기 때문에 ctrl + F8 및 ctrl + F9를 단축키로 사용했습니다.)
다음과 같은 2 개의 스크립트를 사용했습니다.
#! /bin/bash
gnome-volume-control -p output &
sleep .7
pacmd set-default-sink 1
sleep .8
wmctrl -c "Sound Preferences"
exit
#! /bin/bash
gnome-volume-control -p output &
sleep .7
pacmd set-default-sink 0
sleep .8
wmctrl -c "Sound Preferences"
exit
첫 번째는 애플베이스 스테이션 (Ctrl + F9에 할당)으로 변경되고 두 번째는 내부 스피커 (ctrl + F8)로 다시 전환됩니다. 이것은 이것들이 설치된 유일한 2 개의 출력 장치라고 가정합니다.
Andrews 스크립트를 기반으로 notify-osd를 사용하여 방금 수행 한 작업을 발표했습니다. 필요에 따라 이름을 가진 행을 편집하십시오.
#!/usr/bin/env bash
sinks=($(pacmd list-sinks | grep index | \
awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}
pacmd set-default-sink $swap
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done
if [ "$swap" = "0" ]; then
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Corsair 2.1 Speakers!"
else
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Logitech G930 Headset!"
fi
나는 같은 문제가 있었고 우분투 유니티 데스크탑을위한 작은 표시기 애플릿을 썼다.
다음은 현재 초점이 맞춰진 창에 대한 오디오 싱크를 순환하는 작은 스크립트입니다. https://gist.github.com/rif/01ffb5e3eb45d2e4e6ebb4652b3b19ce
pacmd 및 xdotool 필요