Category Archives: HOWTO

Amarok 2와 mpd에서 블루투스 헤드셋 사용하기

Amarok 1.x까지만 하더라도 프로그램 내부적으로 엔진을 선택할 수 있었고, 엔진의 세세한 설정도 프로그램 안에서 할 수 있었다. 그러나 Amarok 2로 올라오면서 KDE 4의 오디오 시스템 Phonon을 사용하게 되었다. 따라서 오디오 출력도 이 놈한테 다 맡겨 버려서 현재의 Amarok 2에서는 오디오 출력을 직접 설정할 수 있는 방법이 없다. 따라서 직접 ALSA 설정을 건드려 줘서 Phonon이 블루투스 헤드셋을 인식할 수 있도록 해야 한다.

ALSA 설정을 편집하려면 ~/.asoundrc, /etc/asound.conf 파일을 건드리면 된다. 여태까지는 전자로 잘 써 왔으나 혹시나 mpd에 관심이 있다면 후자의 파일을 건드리는 것을 추천한다. 여태까지 리눅스에서는 블루투스 헤드셋을 사용하려면 온갖 잡다한 모듈을 설치해야 했으나 이제는 BlueZ에서 바로 오디오 출력을 지원하기 때문에 설정을 잠깐만 해 주면 된다.

하여튼 저 페이지에 있는 것을 참고해서 헤드셋 설정을 대강 적어 주면 된다. 나의 경우 이렇게 설정하였다.

pcm.bluetooth_hw {
type bluetooth
device 맥:주:소:알:아:서
profile "auto"
}
ctl.bluetooth {
type bluetooth
device 어:디:다:써:먹:니
}
pcm.bluetooth {
type plug
slave.pcm "bluetooth_hw"
hint {
show on
description "Bluetooth"
}
}

여기서 주목해야 할 것은 pcm.bluetooth의 hint 부분이다. 아직까지 Phonon은 장치 이름을 100% 완벽하게 인식하지는 않는다. PulseAudio Trac에도 나와 있듯이 이름을 알아낼 수 있는 장치는 알아서 이름을 표시해 주고, 이름을 알아낼 수 없는 장치는 hint를 사용해서 설명을 적어 줘야 한다. 이를 응용하여 블루투스 헤드셋 장치에도 이름을 적어 주었다. 어쨌든 지금까지 과정을 잘 따라왔다면 헤드셋을 어떻게 페어링시킨 다음 시스템 설정 -> 소리로 가 본다.

시스템 설정의 소리 부분

시스템 설정의 소리 부분

맨 아래에 Bluetooth라는 장치가 보이면 성공한 것이다. 이제 이것을 맨 위로 올린 다음 Amarok에서 소리를 재생하면 블루투스 헤드셋으로 소리가 분명히 난다. Amarok을 실행시키기 전 페어링 모드로 바꿔 두는 것이 몸에 좋다.

mpd에서 블루투스 헤드셋을 사용하려면 위 단계를 그대로 따라한 다음, /etc/mpd.conf에 오디오 출력을 하나 추가해 주면 된다.

audio_output {
type "alsa"
name "Bluetooth"
device "bluetooth"
}

mpd 클라이언트가 출력을 바꿀 수 있을 정도로 똑똑하다면 저기 저 블루투스 출력으로 바꿔 주면 헤드셋에서 소리가 난다. 나의 경우 qmpdclient를 사용했고 이 클라이언트는 출력을 바꾸는 것을 다행히도 지원한다.

qmpdclient 설정 화면

qmpdclient 설정 화면

만약 블루투스 헤드셋이 이전/다음 트랙 등의 기능을 지원한다면 uinput 모듈을 올리면 이 기능을 사용할 수 있다.

FAT32에 당하다

양동찬 서버 백업을 내 외장하드에 테스트해서 풀던 중 특정한 파일에서 오류가 났다. LANG=ko_KR.EUCKR 이라는 환경 변수를 줘 보아도 파일 이름이 깨지는 것은 계속 일어났다. 그 파일들은 UTF-8 시스템에 비정상적으로 업로드된 인코딩이 EUC-KR인 파일들이었고, 그게 외장하드에서 문제가 되었다. FAT32 파일 시스템의 문자 범위 제한 때문인지 모르겠지만 계속 파일을 열 수 없다는 오류 덕분에 복구가 힘든 줄 알았다.

그런데 scp를 통해서 백업 파일들을 서버에 복사한 다음 서버에서 tar xvf를 시도해 보았다. 멀쩡하게 잘 풀린다? 그 다음 convmv 시켜서 인코딩을 원위치시킨 다음 처리를 끝냈다. 태터툴즈 DB는 가상 서버 안에서 sql을 복사해 오는 것으로 끝났다. 좀 일이 어이없이 돌아가는 것 같았다. 그게 무슨 일인지 궁금해서 좀 뒤져 보았다.

예상대로 위키백과가 답을 주었다. 일부 ASCII 문자열들이 FAT에서는 제어 문자로 사용되고 있었고 파일 이름 문자로 사용될 수 없었다. 아마 비정상적인 UTF-8 시퀀스를 처리하면서 이런 문자를 쓰려고 시도를 했고, 그 결과 읽을 수 없는 파일 이름이 나온 것 같다. 정상적인 UTF-8 시퀀스라면 이런 일이 없을 것 같은데 말이다. 서버의 파일 시스템은 XFS였고, XFS에는 특별히 이런 제어 문자 제한이 없었던 것 같다. 그 덕분에 정상적으로 파일 압축을 풀 수 있었다.

뭐 결론은 convmv를 통해서 끝냈다. 하여간 꽤나 재미있는 삽질이었다.

우분투와 MX610

로지텍 MX610. 정말 비싸면서도 좋은 마우스이다. 이 마우스는 틸트 휠+음량 조절+LED까지 달려 있는 정말 괜찮은 녀석이지만, 좀 심각한 흠이라면 셋포인트의 불안정성과 리눅스에서는 완전 안습이 된다는 것이다. 그러나 어렵지 않게 MX610을 리눅스에서 쓸 수 있는 방법이 있다. 크게 X.org 설정과 xbindkeys, 그리고 LED로 이루어질 것이다.

우선 우분투의 /etc/X11/xorg.conf 파일을 열고 이 내용을 적절한 위치에 붙인다.

Section "InputDevice"
   Identifier  "Mouse0"
	 Driver "evdev"
	 Option "Buttons" "12"
	 Option "ZAxisMapping" "4 5"
	 Option "HWHEELRelativeAxisButtons" "7 6"
   Option      "evBits" "+1-2"
   Option      "keyBits" "~272-287"
   Option      "relBits" "~0-2 ~6 ~8"
	 Option "ButtonMapping" "1 2 3 4 5 7 6 8 9 10 11 12"
EndSection

evdev 장치 드라이버는 많은 USB 마우스에 대해서 작동한다. 버튼 4,5를 휠에 배당하며, HWHEEL…. 줄은 수평 스크롤을 바로잡아 준다. 내 경우 이 줄을 빼고 xev로 확인한 결과 수평 스크롤이 반대로 되는 문제가 생겼다. 그 다음에 나오는 각종 Bits 줄은 마우스 장치 인식 정보이다. ButtonMapping 줄은 하드웨어 대 소프트웨어 버튼을 매핑시켜 준다. 이론상으로는 수평 스크롤을 바로잡을 수 있을 거 같지만 내게는 안 통했다.

이제 X 서버를 다시 시작하면 마우스를 다시 인식은 할 것이다. 그리고 마우스의 수평 스크롤은 작동할 것이다. 그러나 사이드 버튼은 아직도 작동하지 않는다. 각각 버튼 8,9로 인식되지만 이들이 동작할 수 있도록 설정되지 않았기 때문이다. 이를 위해서 sudo apt-get install xbindkeys xvkbd를 내린다. xbindkeys는 마우스 버튼을 키 입력에 할당하고 xvkbd는 가상의 키보드 입력을 한다. 그 다음 홈 디렉토리에 .xbindkeysrc 파일을 만든다.

"xvkbd -xsendevent -text "\[Alt_L]\[Left]""
  m:0x10 + b:9
"xvkbd -xsendevent -text "\[Alt_L]\[Right]""
  m:0x10 + b:8

키 입력을 바꾸려면 -text 다음의 키를 바꿔 주면 된다. 이제 xbindkeys가 시작될 때 같이 실행되도록 하면 된다. 마지막으로 LED 부분은 mx610hack이라는 프로그램을 사용하면 된다. 알아서 빌드하거나 deb 파일을 받아서 설치하면 mx610hack이 생긴다. mx610hack을 실행하면 더 자세한 도움말을 얻을 수 있다.
ek040000000023.deb

질문 하나. MX610이 이렇게 비싼 마우스였나요?

<moon_child> peremen, 근데 FPS라도 하십니까?
<moon_child> ��, 사는 것은 아니고...
<moon_child> 리뷰가 올라와 있을거니까
<peremen> moon_child, 아니오
<peremen> 그냥 산겁니다
<moon_child> -_-;
<moon_child> 그럼 저에게(?)
<peremen> moon_child, 터치패드 박살나서
...
<moon_child> 그렇다고 MX시리즈를...
<moon_child> 갑부 peremen -_-b!
<peremen> 잃어버려서
<ball2000> ..
<peremen> MX610 샀죠
<Lexif-dev> 애도....
<Lexif-dev> 610은 저에게 선물 하시고...
<Lexif-dev> vx레볼루션을 한번 알아보시면...
<Lexif-dev> -_-);;;
<Lexif-dev> mx레볼루션은 산다는게 계속 여유가 없어서...

사렬 쏙꾹.

rsync로 MP3 관리하기

rsync라는 좋은 도구가 있다. 이것은 네트워크 상에서 파일을 동기화할 떄 유용하지만, 가끔씩은 로컬에서 동기화할 때도 잘 사용될 수 있다. 나의 경우 메인 노트북, 외장하드, H320 셋 다에 같은 음악 파일을 관리해야 하기 때문에 “주 저장소”로 메인 노트북을 선택했다. 그리고 외정하드와 H320에 있는 음악들은 충돌을 방지하기 위해서 다 지웠다. 그리고 내려 준 rsync 명령은 다음과 같다.

rsync -arvuP ~/Music /media/H300; rsync -arvuP ~/Music /media/disk

~/Music 부분은 주 저장소로 사용할 홈의 음악 디렉토리, /media/disk/는 외장하드, /media/H300은 이름 그대로이다. 주의할 점은 이 정도만 명령을 내려도 자기가 알아서 Music 디렉토리를 만들고 그 안에 파일을 동기화시킨다는 것이다. in_ur_eyes 님이 이 스위치를 붙이고 동기화하라고 알려 주셨는데, 풀이해 보면 다음과 같다.

  • -a: Archive 모드
  • -r: 서브디렉토리도 동기화
  • -v: 진행 과정 보여주기
  • -u: 대상 디렉토리의 파일이 새로우면 건너뛰기
  • -P: 부분적으로 전송된 파일을 그대로 두고, 진행 과정 보여주기
  • –delete: 원본에서 지워진 파일 대상에서 삭제하기

첫 동기화에서는 삭제 옵션을 붙이지 말고, 두 번째 이후 동기화에서 붙이는 것이 안전하다. 이 정도 명령을 내리면 파일들의 목록을 뱉어내면서 복사하는 모습이 보일 것이다. 자, 이제 동기화 끝.

아마록 같은 플레이어에서 미디어 장치 관리를 지원해 주지만, 콘솔을 좋아하는 ㅂㅌ이거나 그게 싫다면 rsync를 사용해서 콘솔에서 작업하는 것이 훨씬 재미있을 것이다. 특히 MP3 플레이어가 너무 낡아서 Amarok을 제대로 지원하지 않거나 단순한 이동식 디스크로 인식되는 경우에는 rsync가 유용할 것이다.

/dev/hda가 /dev/sda로 바뀌었어요!

나는 다행히도 UUID 기반 /etc/fstab을 쓰고 있어서 문제가 될 게 없었지만, 일부 사람들에게는 이것이 커널 패닉을 가져올 수도 있다고 한다. 오늘 우분투 페이스티 커널을 올리고 보니 갑자기 하드들이 /dev/sda*로 바뀌어 있어서, 나는 또 내 노트북에 웬 SCSI 하드나며 놀랬다. 나는 커널 패닉도 없이 진입할 수도 있었던 것이, /etc/fstab이 이미 UUID 기반이었기 때문이다. 내 /etc/fstab을 공개하면, 다음과 같다.

proc /proc proc defaults 0 0
UUID=b4decbf9-9f1a-4014-a548-775d4ef02056 / ext3 defaults,errors=remount-ro 0 1
UUID=234f689b-3051-42be-aaa6-304cae77cdab /home xfs defaults 0 1
UUID=1eaba941-5085-4759-8776-2ec579290f76 none swap sw 0 0
UUID=7D26FC7531899EDE /media/win ntfs-3g defaults,locale=ko_KR.UTF-8,umask=007,gid=46 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0

현재 커널이 내 파티션을 어떤 UUID로 인식하는지 알고 싶으면 ls -la /dev/disk/by-uuid를 하면 된다. UUID 파티션 테이블은 많은 리눅스 배포판에서 도입을 했거나 고려 중에 있으며, /dev/hda -> /dev/sda로 바뀌는 일이 아무이 많이 일어나도 전혀 무관하게 작동하기 때문에 UUID 기반 파티션 테이블로 바꿔 보기 바란다.