LG XNOTE C1 노트북 우분투 사용시 사운드 재생 문제

오랫동안 묵혀두었던 LG XNOTE C1 노트북에 우분투를 설치했는데, 사운드 카드를 통해 오디오가 재생되지 않았습니다. 한동안 오디오를 재생할 일이 없어서 그냥 사용하다가, 오늘 갑자기 필요해져서 급하게 문제를 해결했는데, 그 과정을 기록해 둡니다.

일단 확인 결과 사운드 카드 관련 드라이버는 모두 정상적으로 동작합니다. 하지만, 역시나 가장 문제 많은 snd-hda-intel 드라이버를 사용하고 있었습니다. 그래서 더 정확히 사용하는 모델을 확인하기 위해 /proc/asound/pcm 파일을 열어보니 다음과 같이 ALC883 모델을 사용하고 있습니다.

00-00: ALC883 Analog : ALC883 Analog : playback 1 : capture 1
00-01: ALC883 Digital : ALC883 Digital : playback 1 : capture 1
00-02: ALC883 Analog : ALC883 Analog : capture 1

이제 이 칩셋을 사용하는 모델 목록을 얻기 위해 리눅스 커널 소스 문서 디렉토리에서 해당 파일을 검색합니다.(Documentation/sound/alsa/HD-Audio-Models.txt) 그러면 ALC883 칩은 다음과 같은 목록이 있습니다.

ALC882/883/885/888/889
======================
  3stack-dig    3-jack with SPDIF I/O
  6stack-dig    6-jack digital with SPDIF I/O
  arima         Arima W820Di1
  targa         Targa T8, MSI-1049 T8
  asus-a7j      ASUS A7J
  asus-a7m      ASUS A7M
  macpro        MacPro support
  mb5           Macbook 5,1
  macmini3      Macmini 3,1
  mba21         Macbook Air 2,1
  mbp3          Macbook Pro rev3
  imac24        iMac 24'' with jack detection
  imac91        iMac 9,1
  w2jc          ASUS W2JC
  3stack-2ch-dig        3-jack with SPDIF I/O (ALC883)
  alc883-6stack-dig     6-jack digital with SPDIF I/O (ALC883)
  3stack-6ch    3-jack 6-channel
  3stack-6ch-dig 3-jack 6-channel with SPDIF I/O
  ...
  auto          auto-config reading BIOS (default)

이제 남은 일은 /etc/modprobe.d/alsa-base.conf 파일 마지막 부분에 다음과 같은 내용을 추가하고, 위 문서에 있는 각 모델 이름을 지정하고 재부팅한 뒤 사운드 재생 테스트 과정을 모든 모델에 대해 반복합니다.

options snd-hda-intel model=3stack-dig

다행히 제 경우 첫번째 모델이었습니다. 빙고!

[추가 - 2010.08.19] 우분투 10.10 알파 버전에서는 터치패드 버튼도 이상 동작합니다. 여러 사이트를 참고 했지만, 일단 다음 내용을 위와 동일한 방법으로 추가해서 일반 마우스처럼 사용하고 있습니다.

options psmouse proto=imps
Posted in 카스탈리엔 | Tagged , | Leave a comment

우분투 10.10 한글 글꼴 설정

Btrfs 파일 시스템을 사용해 보려고 새로 나온 우분투 10.10 알파 3 버전을 설치했습니다. 그런데, 아니나 다를까 한글 글꼴 설정은 여전히 맘에 들지 않는군요. 예전에는 이것 저것 쉽게 찾아 고쳤는데, 시간이 점점 흘러서 그 과정을 자꾸 잊어버리게 되다 보니 오늘은 조금 더 많이 헤매게 되어 기록해 두려고 합니다.

먼저 메인 글꼴로 사용하는 나눔글꼴은 우분투 저장소에 패키지(ttf-nanum, ttf-nanum-coding)가 이미 올라와 있어서 그대로 설치해서 사용했습니다. 더불어 기본적인 MS 글꼴 패키지(ttf-mscorefonts-installer)를 설치하고, 터미널 글꼴로 사용하는 드로이드 글꼴(ttf-droid)은 설치만 해놓고 cairo 라이브러리 패치 작업은 뒤로 미룬 채 일단 ‘시스템-기본 설정-모양‘은 다음 그림과 같이 설정했습니다.

이제 글꼴 설정 파일을 건드려야 하는데, 제일  먼저 /etc/fonts/conf.d/ 디렉토리에서 10-hinting-slight.conf 파일과 29-language-selector-ko-kr.conf 파일을 삭제합니다. 그래야 일반적인 영문 / 한글 글꼴에 대한 힌팅이 예쁘게 동작합니다. 그 다음에 같은 디렉토리의 69-language-selector-ko-kr.conf 파일을 다음과 같이 수정합니다.

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Set preferred Korean fonts -->
<match target="pattern">
  <test qual="any" name="family">
    <string>sans-serif</string>
  </test>
  <edit name="family" mode="prepend" binding="strong">
    <string>나눔고딕</string>
    <string>DejaVu Sans</string>
    <string>UnDotum</string>
  </edit>
</match>
<match target="pattern">
  <test qual="any" name="family">
    <string>serif</string>
  </test>
  <edit name="family" mode="prepend" binding="strong">
    <string>나눔명조</string>
    <string>DejaVu Serif</string>
    <string>UnBatang</string>
  </edit>
</match>
<match target="pattern">
  <test qual="any" name="family">
    <string>monospace</string>
  </test>
  <edit name="family" mode="prepend" binding="strong">
    <string>DejaVu Sans Mono</string>
    <string>Droid Sans Mono</string>
    <string>나눔고딕코딩</string>
    <string>Guseul</string>
    <string>UnDotum</string>
  </edit>
</match>
<match target="font">
   <test name="family">
    <string>나눔고딕</string>
    <string>NanumGothic</string>
    <string>나눔고딕코딩</string>
    <string>NanumGothicCoding</string>
    <string>맑은 고딕</string>
    <string>Malgun Gothic</string>
    <string>UnDotum</string>
    <string>UnBatang</string>
  </test>
  <edit name="hintstyle" mode="assign">
    <const>hintmedium</const>
  </edit>
</match>
<match target="font">
  <test name="family">
    <string>나눔명조</string>
    <string>NanumMyeongjo</string>
  </test>
  <edit name="hintstyle" mode="assign">
    <const>hintslight</const>
  </edit>
</match>
<match target="font">
  <test name="family">
    <string>DejaVu Sans Mono</string>
    <string>Droid Sans Mono</string>
  </test>
  <edit name="hintstyle" mode="assign">
    <const>hintslight</const>
  </edit>
</match>
</fontconfig>

뭐, 대충 이 정도만 설정해도 깔끔한 모양의 글꼴을 볼 수 있습니다.

사족) Btrfs 파일 시스템은 많은 디스크 I/O가 동시에 걸리면 시스템 전체가 느려지는 듯한 느낌이 여전히 듭니다. 뭐, 앞으로 조금씩 더 좋아지겠지요.

Posted in 카스탈리엔 | Tagged , , | Leave a comment

리눅스 커널 로그 버퍼 읽기

우분투 최신 버전을 설치하면 kerneloops-daemon 패키지가 자동으로 설치됩니다. 이 프로그램은 커널 로그 메시지를 주기적으로(10초 간격으로) 가져와서 파싱(parsing)한 뒤 커널 패닉(OOPS) 메시지를 추출해 이를 D-Bus를 통해 전달하는 역할을 하는데. kerneloops-applet 패키지를 설치하면 로그인시 자동으로 애플릿 하나가 실행되면서 D-Bus에서 메시지를 받아 사용자 확인을 거쳐 kerneloops.org 사이트 등으로 보고서를 자동으로 전송합니다. 참고로, 우분투에서 데몬을 동작하게 하려면 /etc/default/kerneloops 파일 안에서 enabled 항목을 1로 변경해야 하고, 세부 동작 옵션은 /etc/kerneloops.conf 설정 파일을 수정하면 됩니다.

그런데 이 kernelooops 소스를 검토하던 중 커널 로그 버퍼(보통 dmesg 명령 결과)를 가져오기 위해 다음과 같은 시스템콜을 직접 호출하는 것을 발견했습니다. (kerneloops 패키지 소스 안에 dmesg.c:423)

syscall(__NR_syslog, 3, buffer, getpagesize());

이 시스템 콜 사용법이 궁금해서 dmesg 소스를 확인해 보니 여기서는 다음과 같은 C 라이브러리 함수를 사용합니다. (util-linux 패키지 소스 안에 sys-utils/dmesg.c:120)

n = klogctl(3, buf, sz); /* read only */

그래서 매뉴얼을 찾아보니(man klogctl) 둘 모두 같은 동작을 하는 것은 물론, 지금껏 모르고 있었던 몇가지 기능도 알 수 있었습니다.

예를 들어, 매뉴얼에도 나와 있듯이, 지금까지는 syslogd 데몬과 통신하는 syslog(3) 함수만 알고 있었는데,  이 함수는 커널 syslog 시스템콜과 아무 관계가 없다는 점 등입니다. 참고로, 리눅스 커널 소스는 kernel/printk.c 파일에 있는 do_syslog() 함수가 실제로 syslog 시스템콜을 처리하고 있습니다.

Posted in 카스탈리엔 | Tagged , | Leave a comment