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

발행: (2025년 12월 8일 오전 03:32 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

Linux에서 맞춤 오디오 제어: 헤드폰, 스피커 및 듀얼 오디오를 단일 명령으로 전환

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는 시스템 전체를 제어할 수 있으니, 직접 오디오 컨트롤러를 만들면 어떨까?

바로 그렇게 했습니다. 아래는 도구를 만들고 자신의 환경에 맞게 적용하는 단계별 가이드입니다.

VScode 터미널에 표시된 프로그램 인터페이스

사전 준비

  • 최신 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

~/binPATH에 포함돼 있는지 확인:

export PATH="$HOME/bin:$PATH"

쉘 설정을 다시 로드:

source ~/.bashrc

추가 팁

연속 오디오로 테스트해 보기:

speaker-test -t wav -c 2

키보드 단축키 (GNOME/KDE/i3)

  • Super + F11audioctl toggle
  • Super + F12audioctl 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

Back to Blog

관련 글

더 보기 »

12일간의 Shell

기사 URL: https://12days.cmdchallenge.com 댓글 URL: https://news.ycombinator.com/item?id=46190577 점수: 31 댓글: 8…

내 Dev Tool 리스트 2025

TL;DR  macOS bash AeroSpace 윈도우 매니저 brew install --cask nikitabobko/tap/aerospace 핵심 유틸리티 brew install atuin chezmoi gh fzf eza bat ripgrep st…