리눅스에 Steam을 설치하고 라이브러리에서 게임을 내려받아 즐기려던 순간, 좋아하는 게임을 실행하고 스피커나 헤드폰을 켰는데 갑자기 거슬리는 잡음과 끊김 소리가 들려 급히 음소거 버튼을 눌러본 경험이 있으신가요? 리눅스 환경에서 Windows용 Steam 게임을 플레이할 때 자주 겪는 상황입니다.
이 문제의 원인은 PulseAudio의 잘못된 설정 파라미터로, 어떤 리눅스 배포판에서든 나타날 수 있습니다. 다행히도 해결 방법은 아주 간단합니다. 몇 가지 설정만 조정하면 Steam 게임의 잡음 문제를 손쉽게 고칠 수 있습니다.
PulseAudio 데몬 설정 변경하기
해결 과정은 크게 두 단계로 진행되며, 이후 필요하면 추가적인 문제 해결 작업도 할 수 있습니다. 먼저 PulseAudio 데몬 설정부터 살펴보겠습니다.
터미널을 열고 다음 명령어를 입력하세요.
sudo nano /etc/pulse/daemon.conf
default-fragments와 default-fragment-size-msec라는 두 개의 파라미터를 찾습니다. 보통 이미 존재하지만, 없다면 직접 추가해도 됩니다. 값을 각각 2와 4로 설정하세요. 완성된 모습은 다음과 같습니다.
default-fragments = 2 default-fragment-size-msec = 4
파일을 저장한 후, 변경 사항을 적용하기 위해 PulseAudio를 재시작합니다.
pulseaudio -k
첫 번째 단계는 여기까지입니다. 다음 단계는 더욱 간단하니 걱정하지 마세요!
사운드 서버 설정 변경하기
다시 텍스트 편집기를 실행하고, 이번에는 PulseAudio 사운드 서버가 시작되는 방식을 정의하는 파일을 편집합니다.
sudo nano /etc/pulse/default.pa
udev를 사용해 드라이버 모듈을 불러오도록 지시하는 섹션을 찾으세요. 다음과 같은 형태로 되어 있습니다.
### Automatically load driver modules depending on the hardware available .ifexists module-udev-detect.so load-module module-udev-detect .else ### Use the static hardware detection module (for systems that lack udev support) load-module module-detect .endif
load-module module-udev-detect 줄 끝에 tsched=0을 추가해 다음과 같이 수정합니다.
### Automatically load driver modules depending on the hardware available .ifexists module-udev-detect.so load-module module-udev-detect tsched=0 .else ### Use the static hardware detection module (for systems that lack udev support) load-module module-detect .endif
변경 사항을 저장한 후, 다시 한번 PulseAudio를 재시작합니다.
pulseaudio -k
이것으로 끝입니다. 이제 잡음 문제가 사라졌기를 바랍니다.
문제가 계속된다면: 트러블슈팅
위 설정 변경으로 상황이 나아졌지만 완전히 해결되지 않았다면, 첫 번째 파일을 다시 열어 default-fragments와 default-fragment-size-msec 값을 조금씩 올려보세요. 예를 들어 "3"과 "5", 또는 "4"와 "8"처럼 말입니다. 처음부터 너무 크게 올리지 말고, 문제가 해결될 때까지 점진적으로 값을 늘려가는 것이 좋습니다.
반대로 설정 변경 후 오히려 문제가 심해졌다면, 반대 방향으로 시도해볼 가치가 있습니다. 두 파라미터의 값을 낮추고, 두 번째 파일에서 tsched=1로 수정하세요.
PulseAudio를 다시 재시작한 후 문제가 해결되었는지 확인합니다. 그래도 해결되지 않는다면 두 파일의 변경 사항을 모두 되돌리세요. 안타깝지만 이 경우 문제의 원인은 다른 곳에 있는 것입니다.
이럴 때는 오디오 서브시스템의 드라이버를 바꿔보는 것도 방법입니다. 다만 드라이버는 대개 커널에 포함되어 있기 때문에, 배포판의 커널을 다른 것으로 교체해야 합니다. 최신 커널이 있다면 업그레이드하고, 없다면 이전 커널로 되돌리거나 Liquorix 같은 대체 커널을 설치해 보세요.
드라이버, 버퍼, 스케줄링의 원리
이 파라미터들이 왜 문제를 해결했는지 궁금할 수 있습니다. 그 비결은 오디오 하드웨어, 드라이버, 그리고 PulseAudio가 이를 활용하는 방식에 있습니다.
먼저 변경한 두 개의 파라미터는 오디오 장치의 버퍼를 여러 조각(fragment)으로 나누는 역할을 합니다. 오디오 서브시스템에 따라 이렇게 하면 운영체제가 데이터를 오디오 장치로 더 원활하게 전송해 소리로 변환하는 데 도움이 됩니다.
두 번째 파라미터는 PulseAudio의 스케줄링 방식을 변경합니다. PulseAudio는 0.9.11 버전부터 시스템 타이머 기반 모델을 사용하지만, 이 방식은 하드웨어와 드라이버가 정확한 타이밍 정보를 반환해야 제대로 동작합니다. 인텔 오디오 솔루션 등 일부 하드웨어는 이를 잘 지원하며, 이것이 현대적이고 더 나은 접근 방식으로 평가됩니다. 반면 Creative의 많은 사운드카드처럼 지원하지 않는 경우도 있습니다. 따라서 하드웨어와 드라이버에 따라 타이머 스케줄러(tsched 파라미터)를 켜거나(1) 끄는(0) 것만으로 결과가 크게 달라질 수 있습니다.
참고로 우분투에서 소리가 아예 나지 않는 문제가 있다면 별도의 해결 방법을 적용해야 하니, 해당 가이드를 참고하는 것이 좋습니다.