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 |