Linux에서 맞춤 오디오 제어: 하나의 명령으로 헤드폰, 스피커 및 듀얼 오디오 전환
Source: Dev.to

TL;DR: audioctl이라는 스크립트를 만들었으며, 단일 명령으로 HDMI를 통한 헤드폰, 아날로그 스피커, 혹은 두 장치를 동시에 사용할 수 있습니다. 모두 pactl, Bash, 그리고 Linux의 힘을 이용한 것입니다.
pactl이란?
pactl(PulseAudio Control의 약자)은 PulseAudio와 완전 호환되는 PipeWire(Fedora, Ubuntu 22.04+, Arch, NixOS 등 최신 배포판의 기본 오디오 서버)를 제어하는 명령줄 도구입니다.
pactl로 할 수 있는 일:
- 오디오 장치(싱크 및 소스) 목록 보기
- 볼륨 조절
- 출력 전환
- 오디오 스트림을 장치 간 이동
- 모듈 로드/언로드(
module-combine-sink등)
터미널 오디오의 “스위스 군용 나이프”이며, 이번 튜토리얼에서 만들 모든 것의 기반이 됩니다.
문제 상황
나는 다음과 같은 단순하지만 흔한 구성을 사용합니다:
- 헤드폰은 모니터에 연결돼 있고, 모니터는 HDMI로 PC에 연결돼 있습니다.
- 스피커는 컴퓨터의 아날로그 오디오 출력에 연결돼 있습니다.
시아버지는 UI에서 이미 할 수 있던 스피커와 헤드폰 전환 외에도 두 장치를 동시에 사용할 수 있기를 원했습니다(접근성 때문).
그래서 생각했습니다: Linux는 시스템 전체를 제어할 수 있으니, 직접 오디오 컨트롤러를 만들면 어떨까?
바로 그렇게 했습니다. 아래는 도구를 만들고 자신의 환경에 맞게 적용하는 단계별 가이드입니다.
사전 준비
- 최신 Linux 시스템(Ubuntu, Fedora, Arch, NixOS 등)과 PulseAudio 혹은 PipeWire가 설치돼 있어야 합니다.
- 터미널과 텍스트 편집기.
- 최소 두 개의 정상 작동 오디오 출력.
💡 PipeWire인지 PulseAudio인지 확인하려면:
pactl info | grep "Server Name"
출력에 “PipeWire” 혹은 “PulseAudio”가 보이면 준비 완료!
1단계: 오디오 설정 파악하기
싱크(오디오 출력) 목록 보기
pactl list sinks short
예시 출력
52 alsa_output.pci-0000_01_00.1.hdmi-stereo ... RUNNING
57 alsa_output.pci-0000_09_00.6.analog-stereo ... SUSPENDED
RUNNING= 현재 사용 중SUSPENDED= 사용 가능하지만 대기 중
오디오 카드 목록 보기
pactl list cards
아날로그 장치를 찾아 활성 프로파일(예: output:analog-stereo)을 확인합니다.
2단계: 기본 볼륨 제어
pactl은 특수 식별자 @DEFAULT_SINK@를 이용해 기본 싱크의 볼륨을 조절할 수 있습니다.
# 볼륨을 5% 올리기
pactl set-sink-volume @DEFAULT_SINK@ +5%
# 볼륨을 5% 내리기
pactl set-sink-volume @DEFAULT_SINK@ -5%
3단계: 오디오 출력 전환하기
기본 싱크 설정:
pactl set-default-sink SINK_NAME
활성 스트림을 수동으로 이동:
pactl list short sink-inputs
pactl move-sink-input STREAM_ID NEW_SINK
4단계: 두 장치에 동시에 오디오 출력하기(듀얼 모드)
HDMI와 아날로그 출력을 모두 포워드하는 결합 싱크를 생성합니다:
pactl load-module module-combine-sink \
sink_name=combined_output \
slaves=alsa_output.hdmi,alsa_output.analog \
sink_properties=device.description="Dual_HDMI+Analog"
5단계: 최종 스크립트 — audioctl
#!/usr/bin/env bash
# audioctl – 간단한 오디오 출력 스위처
# (전체 스크립트는 생략; 전체 코드는 “Full Code” 섹션을 참고)
# 예시 골격:
# - 사용 가능한 싱크 탐지
# - 명령어 수신: toggle, speakers, headphones, dual
# - pactl을 이용해 기본 싱크 설정 또는 결합 싱크 로드
설치 방법
chmod +x ~/projects/audioctl
mkdir -p ~/bin
ln -sf ~/projects/audioctl ~/bin/audioctl
~/bin이 PATH에 포함돼 있는지 확인:
export PATH="$HOME/bin:$PATH"
쉘 설정을 다시 로드:
source ~/.bashrc
추가 팁
연속 오디오로 테스트해 보기:
speaker-test -t wav -c 2
키보드 단축키 (GNOME/KDE/i3)
Super + F11→audioctl toggleSuper + F12→audioctl dual
디버그 & 유용한 참고 자료
빠른 디버그 명령:
pactl list sinks short
pactl get-default-sink
pactl list short sink-inputs
pactl list cards
공식 문서
- PulseAudio CLI 문서
- PipeWire 문서
module-combine-sink문서
결론
60줄 이하의 Bash만으로 실제 문제를 해결했으며, 그래픽 앱이 제공하지 못하는 유연성을 얻었습니다.
✨ 제어는 여러분의 손에—그리고 터미널에 있습니다.
전체 코드
https://gist.github.com/igorgbr/8031267dee77acf6d7d298ec72a37f94