본문 바로가기

Geek

소니 바이오 노트북의 Fn 조합키 및 전용 버튼을 리눅스에서 사용하기.

현재 내가 갖고 있는 Sony Vaio VGN-TX91에 Fedora core 5설치해서 잘 사용하고 있다. 3D 데스크탑이 지원되는 core 6로 바꾸고 싶긴 하지만, 지금도 느려터진 노트북에 괜한 짓하는 것 같아 아직은 업그레이드를 생각하고 있진 않다.

자주 사용하지만, 항상 까먹는 세팅이 있는데 그것이 바로 노트북 키보드에 있는 Vaio 전용키들에 대한 셋팅이다. 이참에 조금 정리해서 나중에 삽질할때 좀 참고하고자 글을 써 본다.

1. sonypi 커널 모듈 설치확인 및 초기 로딩
사용자 삽입 이미지
위와 같이 제대로 설치가 되어 있다면, /etc/rc.d/rc.local 파일에 다음과 같은 실행문을 삽입한다.

# warmstar add for sony vaio key activating
/sbin/modprobe sonypi

이와 같은 과정이 필요한 것은 소니 키(버튼)이벤트가 부팅시에 바로 로딩되지 않기 때문이다. 어차피 사용하기로 맘 먹었으면, rc.init 스크립트가 모두 종료된 후 모듈이 제대로 커널에서 인식이 되도록 해놓는 것이 속편하다.

2. 디바이스 이벤트 권한 설정
일단 위와 같이 설정이 모두 끝나면 바이오 전용 키들의 버튼 이벤트를 커널에서 인식하게 된다. 그럼 이벤트를 사용할 수 있는데 여기에서 사용하고자 하는 것은 evrouter라는 프로그램을 이용하여 키 이벤트와 실행 프로세스를 연결할 것이다. 다만 한가지 유의할 점은 evrouter라는 프로그램을 이용하여 모든 사용자가 모두 사용할 수 있도록 root로 실행해 버리면 본의 아니게 백도어를 만들수도 있다. -_-;; 그렇기 때문에 일단 디바이스 이벤트에 대한 권한을 일반 사용자에게도 주고 evrouter를 실행시키도록 하자.

/etc/security/console.perms.d/50-default.perms 파일을 통해 디바이스의 권한을 설정할 수 있는데 이 파일에 다음의 내용을 삽입하도록 하자.

<input>=/dev/input/*
<console>  0644 <input>      0644 root

아마 파일을 열어보면 위 내용을 어디다 삽입해야 적당한지 금방 알 수 있을 것이다.
그럼 여기까지 기본적인 설정이 끝났다. 다음은 evrouter의 사용법에 대해 알아보도록 하자.

3. evrouter를 통한 키값 덤프 및 설정 파일 생성.
1, 2의 과정이 모두 끝났다면 아래 화면과 같이 실행한다.

evrouter -d /dev/input/event*

사용자 삽입 이미지
위와 같이 실행해보고 바이오 키를 눌러보면 위 그림의 검은색 영역과 같이 키값을 표시하며 설정파일에 들어갈 수 있는 내용을 표시한다.

Window "키 이벤트가 실행되는 윈도우 제목"
"Sony Vaio Keys" "/dev/input/event7" none key/148 "연결시킬 프로그램 및 키 값!"

좀 더 자세한 예제는 /usr/share/doc/evrouter/examples/example 파일에 있으니 확인해보도록 하자. 위와 같은 방식으로 설정한 설정파일을 /etc/ 디렉토리에 저장한다. 참고로 내가 설정한 데이터를 올려놓도록 하겠다.
4. 실행 스크립터 생성 및 등록
위와 같이 설정파일이 모두 만들어졌으면 아래와 같은 쉘 스크립트를 만들고 스크립트를 자신의 Xwindow 시작 세션에 등록하면 끝이다. Gnome의 경우 "데스크탑>기본설정>추가기본설정>세션"에서 등록시킬 수 있다.

<실행스크립트>
#!/bin/bash

EVROUTER=/usr/bin/evrouter
EVROUTERCONF=/etc/evrouterrc
EVDEVICE="/dev/input/event*"

EVPS=`ps -C evrouter|grep -v PID|awk -F" " '{print$1}'|xargs`
EVTMP="/tmp/.evrouter"

if [ $EVPS ]; then
kill -9 $EVPS
fi

if [ $EVTMP ]; then
rm -f $EVTMP*
fi

$EVROUTER -c $EVROUTERCONF $EVDEVICE &2> /dev/null

나는 위의 스크립트를 /usr/local/bin/에 저장하고 사용하는데 이는 어차피 개인적인 성향이니 각자 나름대로 해보자.