#title USB 마우스 설정 팁
[[TableOfContents]]
= USB 마우스 설정 팁 =
== 소개 ==
이 글은 리눅스에서 USB 마우스를 설정하기 위한 팁이다.

== 설정 ==
=== BIOS 설정 ===
BIOS 설정은 필요 없다. USB legacy support가 필요하다는 소문이 있지만, 그 설정은 USB 드라이버가 없지만 키보드나 마우스가 절실히 필요한 상황에서 입력 장치를 사용할 수 있게 해주는 설정일 뿐이다. "fsck를 할까요? (y/n)"이라고 컴퓨터가 물어볼 때 USB 키보드가 인식이 안되고 있으면 난감할 것이다. 그럴 때 필요하긴 하지만, 마우스 지원을 위해 꼭 필요한 옵션은 아니다.

=== 커널 설정 (2.6.9) ===

 * General setup -> Support for hot-pluggable devices
 * General setup -> Configure standard kernel features (for small systems)
 * Bus options (PCI, PCMCIA, EISA, MCA, ISA) -> PCI support

위와 같이 준비를 마치고 다음을 선택한다.

 1. Device Drivers -> Input device support -> Input devices -> Userland interfaces -> Mouse interface
 1. Device Drivers -> USB support -> Support for Host-side USB
 1. USB 컨트롤러에 맞는 host controller interface 선택
  * "lspci -v | grep HCI"로 컨트롤러 확인
    * EHCI HCD (USB 2.0) support
    * UHCI HCD (most Intel and VIA) support
    * OHCI HCD support
 1. 마우스 드라이버 선택
  * Device Drivers -> USB support -> USB Human Interface Device (full HID) support: 추천
    * Device Drivers -> USB support -> HID input layer support
  * Device Drivers -> USB support -> USB HID Boot Protocol drivers: 비추천
    * Device Drivers -> USB support -> USB HID Boot Protocol drivers -> USB HIDBP Mouse (simple Boot) support

마우스 드라이버를 두개 모두 선택하더라도 실질적으로는 하나만 사용된다. 확실하게 필요한 것 한가지만 선택하면 속 편하다. 입력장치 설정에서 X/Y 해상도를 입력하면 마우스의 감도가 변한다는 소문(?)이 있지만 커널 설정의 도움말에는 그런 말은 없다.

=== 장치 설정 ===
마우스 장치 파일이 없을 경우 만들어주자. 배포판에 따라서는 /dev/input/mice 대신에 /dev/input 파일이 사용될 수도 있다.

{{{
# cd /dev && MAKEDEV usb && MAKEDEV input
}}}

다음과 같이 수동으로 할 수도 있다.

{{{
# mkdir /dev/input
# mknod /dev/input/mice c 13 63
# mknod /dev/input/mouse0 c 13 32
}}}

{{{
crw-rw---- 1 root root 13, 63 2004-01-01 09:31 mice
crw-rw---- 1 root root 13, 32 2004-01-01 09:31 mouse0
crw-rw---- 1 root root 13, 33 2004-01-01 09:31 mouse1
crw-rw---- 1 root root 13, 34 2004-01-01 09:31 mouse2
crw-rw---- 1 root root 13, 35 2004-01-01 09:31 mouse3
}}}

/dev/input/mice는 USB 마우스 전체를 대표하는 장치이고, /dev/input/mouse*는 USB 마우스 하나하나의 장치이다. 필요하다면 원하는 만큼 만들어주자.

==== 장치 시험 ====
모듈 생성을 선택했다면 입력 장치(input), 마우스 장치(mousedev), USB 지원(usbcore), USB 호스트 컨트롤러, 마우스 드라이버(usbhid/hid/usbmouse) 등의 모듈을 modprobe로 올린다. 아래 모듈 예제 부분을 참고바람. (참고로 커널 2.6의 경우 input 모듈이 생기지 않을 수도 있다.)

root로 콘솔에서 "cat /dev/input/mice"를 실행한 후 마우스를 움직였을 때 콘솔 화면에 내용이 나타나면 성공이다. 확인이 끝나면 Ctrl-C를 누른다. 혹시 화면이 깨진다면 침착하게 "setterm -reset" 또는 "setterm -initialize"를 실행한다.

=== 프로그램 설정 ===
==== X 설정 ====
{{{#!vim xf86conf
Section "InputDevice"
    Identifier "USB Mice"
    Driver "mouse"
    Option "Protocol" "IMPS/2"
    Option "Device" "/dev/input/mice"
    Option "ZAxisMapping" "4 5"
    Option "Buttons" "5"
EndSection
}}}

[XFree86] 4.x등의 경우 프로토콜은 IMPS/2로, 장치는 적절한 장치로 맞춘다. 버튼이 셋보다 많다면 !ZAxisMapping, Buttons를 적절히 수정하고 xmodmap을 활용한다.

{{{#!vim xf86conf
Section "ServerLayout"
    Identifier     "XFree86 Configured"
    Screen         "Screen0"
    InputDevice    "Mouse0" "CorePointer"
    InputDevice    "Mouse1" "SendCoreEvents"
    InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "InputDevice"
    Identifier  "Mouse0"
    Driver      "mouse"
    Option      "Protocol" "PS/2"
    Option      "Device" "/dev/psaux"
    Option      "Buttons" "5"
    Option      "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    Identifier  "Mouse1"
    Driver      "mouse"
    Option      "Protocol" "IMPS/2"
    Option      "Device" "/dev/input/mice"
    Option      "Buttons" "5"
    Option      "ZAxisMapping" "4 5"
EndSection
}}}

PS/2 마우스와 USB 마우스를 동시에 사용할 경우 한쪽은 !CorePointer로, 다른 한쪽은 !SendCoreEvents로 잡는다.

==== 콘솔 설정 ====
{{{
# /usr/sbin/gpm -m /dev/input/mice -t imps2
}}}

프로토콜은 imps2로, 장치는 적절한 장치로 한다.

{{{
# /usr/sbin/gpm -m /dev/input/mice -t imps2 -M -m /dev/psaux -t ps2 -R imps2
}}}

콘솔만 사용하고 PS/2 마우스와 USB 마우스를 함께 사용할 경우 위와 같이 해준다. DeleteMe 혹시 X에서도 마우스 설정을 두번 해주고 gpm에서도 -R을 켜주면 X에서 PS/2 마우스가 두배 빠르게 움직이지 않나요?

== 모듈 예제 ==
=== Full HID 설정 ===
Kernel 2.6 
{{{
Module                  Size  Used by
uhci_hcd               32880  0
mousedev               10444  0
usbhid                 32768  0
usbcore               114784  4 uhci_hcd,usbhid
}}}

Kernel 2.4 
{{{
Module                  Size  Used by    Not tainted
uhci                   25884   0 (unused)
mousedev                4308   0
hid                    21988   0 (unused)
usbcore                63756   1 [uhci hid]
input                   3648   0 [mousedev hid]
}}}

Kernel 2.2 
{{{
Module                  Size  Used by
hid                    11820   0 (unused)
mousedev                3952   0 (unused)
input                   2908   0 [hid mousedev]
usb-uhci               20040   0 (unused)
usbcore                27908   0 [hid usb-uhci]
}}}

=== HIDBP 설정 ===
Kernel 2.6 
{{{
Module                  Size  Used by
usbmouse                5664  0
uhci_hcd               32880  0
mousedev               10444  0
usbcore               114784  4 usbmouse,uhci_hcd
}}}


Kernel 2.4 
{{{
Module                  Size  Used by    Not tainted
usbmouse                2264   0 (unused)
uhci                   25884   0 (unused)
mousedev                4308   0
usbcore                63756   1 [usbmouse uhci]
input                   3648   0 [usbmouse mousedev]
}}}


Kernel 2.2
{{{
Module                  Size  Used by
mousedev                3952   0 (unused)
usbmouse                1708   0 (unused)
input                   2908   0 [mousedev usbmouse]
usb-uhci               20040   0 (unused)
usbcore                27908   0 [usbmouse usb-uhci]
}}}

== 그래도 안되면 ==
KLDPBBS:34151#133667

= 참고 문헌 =
[http://www.linux-usb.org/ The Linux USB Guide]

DebianKorea:UseUSBmouseWithPS2mouse

= Q and A =
'''Q''' : mousedev 를 모듈로 넣으려면 menuconfig 에서 어떤 옵션을 선택해야 하나요?(커널은 2.6.7 입니다.)

{{{
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
}}}

처럼, 모듈이 아닌, 커널내에 들어가는 것 같은데. 저것을 임의로 m 으로 바꾸면 안되죠?(make menuconfig 에서는 못 찾겠습니다.)
이런것을 대조 해놓은 것은 없나요? (usbmouse 는 menuconfig 의 어느 항목 이런식으로 찾기 쉽게. )

'''A''' : 위의 섹션 1.2.2를 보시면 menuconfig에서 어떤 항목을 골라야 할지 대충 아실 수 있습니다.

Full HID 로 시도를 했는데, HIDBP 로 바꾸어서 성공했습니다. mousedev 는 모듈이 아닌 커널 내로 들어가는 것 같습니다. 모듈로딩에서 빼고 시도했습니다.
  모듈 예제 부분을 보시면 아시겠지만 mousedev를 모듈로 만드셔도 충분히 잘 돌아갈 수 있습니다.
    예. 그부분이 mousedev 을 올리려면 실패를 해서요. CONFIG_INPUT_MOUSEDEV=y 이 m (모듈) 로는 안되더라구요.그냥커널안으로..다른버전,커널로 해봐야 겠습니다.(젠투에서 하는데, 안되는 것인지 못하는 것인지..^^)
      .config 파일을 임의로 편집하지 마시고, make menuconfig을 하셔서 정상적인 설정을 해주시기 바랍니다. 설정 항목 관련 help 내용을 읽어보시면 어떤 모듈 이름이 사용될지를 확인하실 수 있습니다.

----
CategoryTips