xinput을 이용한 리눅스에서 터치패드 끄고 켜기
랩탑에서 타이핑을 하다보면 무심결에 터치패드를 건드려서 엉뚱한 데다 키 입력을 해 댄다든가 하는 짜증나는 경우가 있는데, 이 것 때문에 원래 다 지워주는게 인지상정인 랩탑 제조사 번들 프로그램 중 FN키 활성화 하는 프로그램은 꼭 지우지 않고 남겨 두게 된다. 윈도우야 제조사에서 프로그램을 챙겨 주니 그걸 깔면 되긴 하는 데, 리눅스를 오히려 메인으로 쓰는 내 입장에서는 어쨌든 자구책을 강구할 수 밖에 없다. 그것도 가급적이면 최대한 간단하게...
다행스럽게도 xinput이란 놈이 있어서 간편하게 입력 장치를 컨트롤 할 수 있다. 우선 그냥 쉘에서 xinput을 입력해보자. 아래와 같이 현재 연결되어 있는 입력 장치의 목록을 출력해 줄 것이다.
$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=12 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ LG HD WebCam id=10 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
여기서 ETPS/2 Elantech Touchpad가 내 랩탑에 설치되어 있는 터치패드 입력 장치이다. 물론 이건 노트북 제조사나 모델에 따라 상이할 수 있으니 무엇이 실제 터치패드인 지는 실제로 보고 직접 판단하는 수 밖에 없다. 어쨌건 터치패드 장치의 이름과 id를 알아 냈으니 xinput list-props <device_id>를 입력하여 어떤 property가 있는 지 살펴 보자.
$ xinput list-props 12
Device 'ETPS/2 Elantech Touchpad':
Device Enabled (139): 1
Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (262): 1
Device Accel Constant Deceleration (263): 2.500000
Device Accel Adaptive Deceleration (264): 1.000000
Device Accel Velocity Scaling (265): 12.500000
Synaptics Edges (266): 110, 2662, 71, 1249
Synaptics Finger (267): 1, 1, 0
Synaptics Tap Time (268): 180
Synaptics Tap Move (269): 135
Synaptics Tap Durations (270): 180, 100, 100
Synaptics ClickPad (271): 0
Synaptics Middle Button Timeout (272): 75
Synaptics Two-Finger Pressure (273): 282
Synaptics Two-Finger Width (274): 7
Synaptics Scrolling Distance (275): 61, 61
Synaptics Edge Scrolling (276): 1, 1, 0
Synaptics Two-Finger Scrolling (277): 0, 0
Synaptics Move Speed (278): 1.000000, 1.750000, 0.065147, 0.000000
Synaptics Off (279): 2
Synaptics Locked Drags (280): 0
Synaptics Locked Drags Timeout (281): 5000
Synaptics Tap Action (282): 2, 3, 0, 0, 1, 3, 0
Synaptics Click Action (283): 1, 1, 0
Synaptics Circular Scrolling (284): 0
Synaptics Circular Scrolling Distance (285): 0.100000
Synaptics Circular Scrolling Trigger (286): 0
Synaptics Circular Pad (287): 0
Synaptics Palm Detection (288): 0
Synaptics Palm Dimensions (289): 10, 200
Synaptics Coasting Speed (290): 20.000000, 50.000000
Synaptics Pressure Motion (291): 30, 160
Synaptics Pressure Motion Factor (292): 1.000000, 1.000000
Synaptics Resolution Detect (293): 1
Synaptics Grab Event Device (294): 0
Synaptics Gestures (295): 1
Synaptics Capabilities (296): 1, 0, 1, 1, 1, 1, 1
Synaptics Pad Resolution (297): 31, 31
Synaptics Area (298): 0, 0, 0, 0
Synaptics Noise Cancellation (299): 15, 15
Device Product ID (257): 2, 14
Device Node (258): "/dev/input/event6"
뭐 여러가지 설정 값들이 쭉 출력 되지만 사실 우리에게 중요 한 것은 장치의 활성화 정보일 뿐이다. 위 리스트의 Device Enabled (139): 1에서 확인 할 수 있듯 현재 내 터치패드 입력은 활성화 되어 있는 상태이다. 이제 이 터치패드를 끄려면? 간단하게 xinput disable <device_id> 명령을 실행하면 되고, 다시 활성화를 시키려면 xinput enable <device_id>를 하면 된다. 비활성화를 시켰다면 터치 패드는 더 이상 동작을 하지 않을 것이고 xinput list-props 명령어로 확인 해도 비 활성화가 되어 있음을 확인할 수 있다.
$ xinput list-props 12
Device 'ETPS/2 Elantech Touchpad':
Device Enabled (139): 0
Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (262): 1
Device Accel Constant Deceleration (263): 2.500000
...
매번 이 짓을 할 수는 없으니, 이제 이걸 이용해서 간단한 스크립트를 만들어 보자. 커맨드 라인에서도 사용할 수 있어야 하겠지만 최종적으로는 단축키에 넣고 쓰게 될 거니 토글을 지원하도록 작성해 보자. 이왕이면 하는 김에 desktop notification까지 띄워서 변경 사항을 표시하도록 해주면 더 좋지 않을까.
#!/bin/sh
XINPUT="xinput"
TP_KEYWORD="Touchpad"
TP_CMD=
TP_ID=`$XINPUT | grep $TP_KEYWORD | awk -F '=' '{ print $2; }' | awk '{ print $1; }'`
if [ -z "$TP_ID" ]; then
echo "Unable to find touchpad" 1>&2
exit 1
fi
if [ -n "$1" ]; then
case $1 in
on)
TP_CMD="enable"
;;
off)
TP_CMD="disable"
;;
*)
echo "Usage: $0 [on|off]" 1>&2
echo "\ton : Turn on touchpad" 1>&2
echo "\toff : Turn off touchpad" 1>&2
echo "\tWith no argument, it toggles its state" 1>&2
exit 1
;;
esac
else
# toggle
TP_STATE=`$XINPUT list-props $TP_ID | grep "Device Enabled" | awk -F ':' '{ print $2; }'`
if [ -n "$TP_STATE" ]; then
if [ $TP_STATE -eq 0 ]; then
TP_CMD="enable"
else
TP_CMD="disable"
fi
else
echo "Something goes wrong..." 1>&2
exit 1
fi
fi
if $XINPUT $TP_CMD $TP_ID; then
notify-send -i "touchpad_$TP_CMD" -u low "Touchpad "$TP_CMD"d"
fi
위의 쉘 스크립트를 적당한 이름, 가령 touchpad 같은 걸로 저장하고, 이왕 하는 김에 이쁘게 나오도록 아래의 아이콘 이미지들을 /usr/local/share/icons 혹은 ~/.local/share/icons같은 곳에 넣어서 desktop notification을 표시할 때 현재 터치패드 상태 아이콘도 나오도록 하자.
스크립트 자체는 간단하게 on이나 off를 인자로 주면 터치패드를 켜거나 끌 수 있고, 인자 없이 실행하면 현재 상태를 토글한다. 이 스크립트를 Win-F5같은 데다가 글로벌 단축키로 설정해 주면 간편하게 터치패드를 끄거나 켤 수 있다. 주의할 점은 $TP_KEYWORD에 지정되어 있는 문자열인데, 만약 xinput을 실행해서 나오는 터치패드의 장치명이 Touchpad라는 문구를 포함하지 않고 있다면 적당한 다른 키워드로 바꿔줘야 정상적으로 동작할 것이다.
물론 Win-F5같은 키 조합 대신 원래 윈도우에서 쓰는 FN키 조합의 키 바인딩을 사용할 수 있으면 좋겠으나, 내 경우 해당 키를 입력했을 때 acpi_listen으로 살펴보니 적절한 값이 나오지 않아서 포기했다. 관심이 있는 사람들은 Ubuntu 도움말의 LaptopSpecialKeys 항목을 참고해서 시도해 보기 바란다.
'생활의발견' 카테고리의 다른 글
| VirtualBox에서 물리 디스크 파티션 사용하기 (0) | 2016.04.27 |
|---|---|
| Lisp용 Syntaxhighlighter brush 적용하기 (0) | 2016.04.18 |
| 티스토리에 Syntax Highlighter 적용하기 (0) | 2012.09.05 |
| 네이트온에서 피진으로 갈아타자 (0) | 2012.06.05 |
| 리눅스 폰트 설정 : 안티 앨리어싱 추가하기 (0) | 2010.05.18 |