또 다른 싱크 스위처 스크립트
우분투 16.04에서 테스트
그러나이 기능을 사용하면 원하는 응용 프로그램의 오디오 만 전환 할 수 있습니다.
사용법 : 싱크를 변경하려는 응용 프로그램의 초점을 맞추고이 스크립트를 실행하십시오. 그게 다야 !!!
이 스크립트는 포커스가있는 응용 프로그램을 감지하고 해당 응용 프로그램에서 재생중인 모든 오디오를 찾은 다음 사용 가능한 다음 싱크로 전환합니다.
https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3
스크립트 설명
초점을 맞춘 애플리케이션의 PID를 찾아야합니다.
하지만 먼저 xid가 필요합니다
xprop -root _NET_ACTIVE_WINDOW
그런 다음 여기 $xid
에 삽입 하여 응용 프로그램의 pid를 얻으십시오.
xprop -id $xid _NET_WM_PID
이제 해당 PID와 관련된 싱크 입력을 찾아야합니다.
먼저 명령 출력을 선형화하여 pacmd list-sink-inputs
한 줄에 하나의 싱크 입력을 나열하고 같은 줄에 색인, 싱크 및 pid를 표시합니다
pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2
단계별로 분석해 보겠습니다.
grep -E 'index:|sink:|process.id
만을 포함하는 행을 유지 index:
, sink:
또는process.id
tr '\n' ' '
모든 라인에 합류
tr -d '"'
모든 "
문자를 제거합니다 . 따옴표없이 pid를 얻는 데 필요
sed -e 's/index:/\n/g'
모든 index:
발생을 줄 바꾸기 문자로 바꿉니다.\n
tail -n +2
비어 있기 때문에 첫 번째 줄을 제거합니다
결과는 다음과 같습니다.
180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
의미를 이해하기 위해 한 줄을 분석해 보겠습니다.
# 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
182
싱크 입력 인덱스, 0
싱크 인덱스 및 13752
마지막에 속하는 응용 프로그램의 pid
그런 다음 각 줄을 반복합니다.
... | while IFS= read -r line || [ -n "$line" ]; do
sink_input_pid=$(echo $line | awk '{print $NF}')
마지막으로 집중 앱의 pid와 일치하는 싱크 입력의 pid 만 필터링하십시오.
if [ $sink_input_pid = $app_pid ]; then
데이터 추출
함께 awk
우리는 요소를 얻을 수 있습니다 우리는 필요
sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')
싱크 회전이 0에서 다시 시작해야하는 시점을 알기 위해 싱크 수를 가져옵니다.
sink_list_size=${#sink_list_array[@]}
다음 싱크를 찾으면 싱크 목록을 반복하여 current_sink_index 와 일치 하는 것을 알고 다음 싱크의 인덱스를 알아야합니다.
i=0
for sink in "${sink_list_array[@]}"; do
i=$((($i+1)%sink_list_size)) # i++ mod(#sinks)
if [ $sink = $current_sink_index ]; then
next_sink_index=${sink_list_array[i]}
break
fi
done
마지막으로 싱크 입력을 움직여 next_sink_index 에서 재생합니다.
pacmd move-sink-input $sink_input_index $next_sink_index
우분투 16.04에 대한 참고 사항 :
바로 가기 키를 구성 할 때 우분투의 바로 가기 관리자에서 작동하지 못했습니다. 그래서 compizconfig-settings-manager 를 설치해야 했습니다.
sudo apt-get install compizconfig-settings-manager