배경
사운드가 HDMI TV에서 랩톱 스피커로 전환 될 때 일시 중지 / 다시 시작하는 동안 비슷한 문제가있었습니다. 다시 시작하면 소리가 랩탑 스피커에서 유지되고 출력 장치를 TV in- System Settings
> 에서 수동으로 재설정해야합니다 Sound
.
이것은 Ubuntu 14.04 에서 16.04 로의 업그레이드에 대한 나의 성가신 경험 중 하나였으며 루트는 16.04 LTS 와 함께 제공되는 PulseAudio 8로 업그레이드되었습니다.
많은 검색 후이라는 스크립트를 만들었습니다 TV-sound
. 나는 당신처럼 TV를 꽂거나 뽑지 않지만, 구글 검색을하고 상황에 맞게 변형 된 스크립트를 만들었습니다. 나는 그것을 테스트했고 작동합니다.
1 단계 : 연결된 장치간에 오디오를 전환하는 스크립트 만들기
hotplugtv
udev가 호출 하는 스크립트를 작성 합니다. 이 같은 스크립트를 여러 곳에서 호출 할 수 있습니다. 예를 들어, 테스트 lock-screen-timer
하는 동안 화면 잠금 중에 사운드가 랩톱으로 되돌아 오는 위치 에서 사용했습니다 .
cd /usr/local/bin
sudo touch hotplugtv
sudo chmod +x hotplugtv
gksu gedit hotplugtv
빈 화면으로 편집기가 열리면 다음을 복사하여 붙여 넣으십시오.
#! /bin/bash
# NAME: hotplugtv
# PATH: /usr/local/bin
# DESC: Update pulseaudio output device when HDMI TV plugged / unplugged
# CALL: called from /etc/udev/rules.d/99-monitor-hotplug.rules
# DATE: Created Nov 26, 2016.
# NOTE: logs output using log-file
# UPDT: Dec 14, 2016 - Sometimes /sys/class/drm/card0 & sometimes /sys/class/drm/card1
# so use /sys/class/dmcard* instead.
if [[ $(cat /sys/class/drm/card*-HDMI-A-1/status | grep -Ec "^connected") -eq 1 ]]; then
# log-file "HDMI TV connected" ~/bin/log-hotplugtv;
/bin/sleep 2;
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
sudo -u rick -E pacmd set-card-profile 0 output:hdmi-stereo;
else
# log-file "HDMI TV disconnected" ~/bin/log-hotplugtv;
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
sudo -u rick -E pacmd set-card-profile 0 output:analog-stereo;
fi
exit 0
두 개의 어커런스를 rick
자신의 사용자 ID (예 UTF-8
: 등) 로 바꿔야합니다 .
나는 이것이 자동으로 bash 변수로 설정된 사용자 이름으로보다 전문적 일 수 있다는 것을 알고 있지만 아직 숙련되지 않았습니다 : (어쨌든, 파일을 저장하고 종료하십시오 gedit
.
2 단계 : udev 규칙 작성
udev는 HDMI 모니터를 연결하고 분리 할 때 핫 플러그 이벤트를 모니터링합니다. 새 규칙을 만들려면 다음을 입력하십시오.
cd /etc/udev/rules.d
sudo cp 70-persistent-net.rules 99-hotplugtv.rules
gksu gedit 99-hotplugtv.rules
참고 : 파일 70-persistent-net.rules
이 디렉토리에 없으면 다른 파일을 복사하십시오. 파일 내용이 필요하지 않으며 파일 권한 만 동일하므로 파일 내용이 동일합니다.
에디터는 관련없는 텍스트를 보여주고 강조 표시하고 삭제합니다. 그런 다음 아래 코드를 강조 표시하여 편집기에 붙여 넣으십시오.
# NAME: 99-hotplugtv.rules
# PATH: /etc/udev/rules.d
# DESC: Update pulseaudio output device when HDMI TV plugged / unplugged
# CALL: automatically called on system events
# DATE: Created Nov 26, 2016.
# NOTE: in future may requre systemd service hooks
ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/usr/local/bin/hotplugtv"
파일을 저장하고 종료하십시오.
다시 부팅하지 않고 규칙을 활성화하려면 udev를 다시로드해야합니다.
sudo udevadm control --reload-rules
이제 HDMI 모니터 / TV 및 사운드 스위치를 적절하게 연결 및 분리 할 수 있습니다.
경고
시스템에서 HDMI를 뽑으면 사운드가 랩탑 스피커로 자동 전환됩니다. 귀하의 시스템에서는 그렇지 않았습니다. HDMI를 뽑을 때 소리가 랩탑 스피커로 전달되지 않으면 코드를 추가로 개선해야 할 수 있습니다. 작동 방식 / 작동하지 않는 방식에 대해서는 의견을 통해 회신 해주십시오
CLI에서 빠른 테스트
다음을 사용하여 터미널에서 코드를 빠르게 테스트 할 수 있습니다.
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
PulseAudio 내에서 장치 이름 해독
아래 코드는 동일한 명령을 두 번 사용합니다. 소리가 외부 HDMI TV로 설정된 경우 소리가 랩탑의 내장 스피커로 설정되어있을 때 두 번째입니다. PulseAudio가 사용하는 이름을 볼 때마다 :
$ pacmd list-sinks | grep -e 'name:' -e 'index'
* index: 28
name: <alsa_output.pci-0000_00_1b.0.hdmi-stereo>
───────────────────────────────────────────────────────────────────────────────
$ pacmd list-sinks | grep -e 'name:' -e 'index'
* index: 30
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
사운드 카드가 여러 개인 경우
이 명령 aplay -l
을 사용하여 0보다 큰 카드가 있는지 확인하십시오. 그렇다면 스크립트에서 적절한 카드 번호를 사용해야합니다. 예를 들면 다음과 같습니다.
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: 92HD91BXX Analog [92HD91BXX Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 0/1
Subdevice #0: subdevice #0
위의 예에서 모든 카드 번호는 출력 소스가 다른 0입니다. USB 스피커가 있으면 0과 다른 카드 번호를 가질 수 있습니다.
2016 년 12 월 2 일 편집
알 수없는 이유로 오늘 스크립트가 손상되었습니다. 위의 코드는 "$ (cat / sys / class / drm / card0-HDMI-A-1 / status")를 읽는 데 사용되었지만 변경 card0
해야 card1
하고 위의 코드가 수정되었습니다. 변경된 내용을 설명 할 수 없습니다. 2016 년 11 월 26 일 이후 정기 우분투 업데이트 이외의 시스템에서.
2016 년 12 월 14 일 편집
다시로 다시 전환 할 필요가 위의 코드 :. "$ (고양이 / SYS / 클래스 / DRM / card0-HDMI는-A-1 / 상태"대신 사이에 코드를 수정의 card0
와 card1
기준에 개정 프로그램을 부팅에 따라 card*
두 시나리오를 캡처 .