우분투에서 Logitech Marble Trackball 휠 설정하기 – 2

리눅스에서 로지텍 마블 트랙볼의 보조 버튼을 사용하여 휠을 사용할 수 있게 설정을 했다.

지난번 설정의 가장 큰 문제점은 트랙볼의 설정을 .Xinitrc 에서 했기 때문에

  1. Im-config 에서 사용자가 설정파일 건드렸다고 에러를 뿜뿜.
  2. 트랙볼의 USB 를 뽑을 때 마다 설정이 초기화 되어서 다시 설정을 해 줘야 함

의 문제점이 있었다.

그래서 위 문제를 해결하고자, 엄청 삽질을 했는데, 결론부터 말하자면 xorg.conf 파일에 설정을 추가해 주는 것으로 해결할 수 있었다.

https://help.ubuntu.com/community/Logitech_Marblemouse_USB#Configuration

터미널을 열고,

% cd /etc/X11

우분투의 경우 사용자가 딱히 건드린 것이 없다면 xorg.conf 파일이 없을 것이다. 그냥 하나 만든다.

% sudo nano xorg.conf

Section “InputClass”
Identifier “Marble Mouse”
MatchProduct “Logitech USB Trackball”
Driver “libinput”
Option “ScrollMethod” “button”
Option “ScrollButton” “9”
EndSection

취향에 따라 스크롤 버튼은 8 이나 9 로 설정한다. 저장하고 재시작하면 적용된다.

이제 마블 트랙볼을 아무리 뽑았다 꼽아도 제대로 휠이 동작한다.

 


 

이게 해결책이긴 한데, 이걸 발견하기 전에 한 삽질이 너무 버라이어티해서 일단 기록해 둔다.

USB 를 꼽을 때 스크립트를 실행할 수 있는 방법을 검색하여 udev 라는 것을 찾아내었다. udev 는 시스템에 상주해 있는 데몬인데, 새로 끼우거나 제거하는 장치를 관리하며 설정된 rule 에 따라 스크립트를 실행하는 등의 작업을 할 수 있다.

 

udev 에서 실행시킬 스크립트를 먼저 준비했다.

% cd /usr/bin

% sudo nano logitechmarblewheelset.sh

#!/bin/bash

export DISPLAY=:0

xinput –set-prop “Logitech USB Trackball” “libinput Scroll Method Enabled” 0 0 1
xinput –set-prop “Logitech USB Trackball” “libinput Button Scrolling Button” 9

저장한 다음 쉘로 빠져나와서 실행 권한을 준다.

% sudo chmod +x ./logitechmarblewheelset.sh

마블 트랙볼을 뽑았다 다시 끼운 다음, 위 스크립트를 실행해서 동작 여부를 확인했다.

% logitechmarblewheelset.sh

 

그 다음 udev 에 적용할 rule 를 작성한다.

% cd /etc/udev/rules.d

룰의 명명 규칙은 딱 두가지다. 서로 겹치지 말 것, 확장자가 rules 일 것.

% sudo nano 85-LogitechMarble.rules

ACTION==”add”, ENV{DEVTYPE}==”usb_device”, ENV{PRODUCT}==”46d/c408/1400″ RUN+=”/usr/bin/Logitech_Marble_Trackball.sh”

중간의 값들을 확인하기 위해서는 시스템에 연결된 usb 의 정보를 확인할 필요가 있다.

그 첫번째가 lsusb…

% lsusb

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 004: ID 04f2:b5f7 Chicony Electronics Co., Ltd
Bus 001 Device 003: ID 8087:0a2a Intel Corp.
Bus 001 Device 007: ID 046d:c408 Logitech, Inc. Marble Mouse (4-button)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

 

그리고 udevadm 이라는 툴이다. 옛날 자료는 udevinfo 라고 되어 있는데, 최신 우분투는 udevadm 을 쓴다.

% udevadm monitor

이러면 USB 장비를 빼거나 끼울 때 마다 화면에 udev 의 동작이 뜬다.

…..

UDEV [4228.926389] add /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV [4228.930021] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
UDEV [4228.933146] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:046D:C408.0008 (hid)
UDEV [4228.937848] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:046D:C408.0008/input/input29 (input)
UDEV [4228.937964] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:046D:C408.0008/hidraw/hidraw1 (hidraw)
UDEV [4228.943622] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:046D:C408.0008/input/input29/mouse1 (input)
UDEV [4229.033038] add /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:046D:C408.0008/input/input29/event8 (input)
UDEV [4229.035980] bind /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:046D:C408.0008 (hid)
UDEV [4229.038523] bind /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 (usb)
UDEV [4229.047518] bind /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)

…..

저 중에서 /devices 로 시작하는 부분이 장치의 경로다. 저걸 복사해서…

% udevadm test /devices/pci0000:00/0000:00:14.0/usb1/1-2

하면, rule이 제대로 되었는지 확인을 하고 가상으로 해당 장치를 설치한 결과를 보여준다.

…..

Starting ‘mtp-probe /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2 1 8’
‘mtp-probe /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2 1 8′(out) ‘0’
Process ‘mtp-probe /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2 1 8’ succeeded.
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2
DEVNAME=/dev/bus/usb/001/008
DEVTYPE=usb_device
DRIVER=usb
PRODUCT=46d/c408/1400

……
ACTION=add
SUBSYSTEM=usb
ID_VENDOR=Logitech
ID_VENDOR_ENC=Logitech
ID_VENDOR_ID=046d
ID_MODEL=USB_Trackball
ID_MODEL_ENC=USB\x20Trackball
ID_MODEL_ID=c408
ID_REVISION=1400
ID_SERIAL=Logitech_USB_Trackball
ID_BUS=usb
ID_USB_INTERFACES=:030102:
ID_VENDOR_FROM_DATABASE=Logitech, Inc.
ID_MODEL_FROM_DATABASE=Marble Mouse (4-button)
UPOWER_VENDOR=Logitech, Inc.
USEC_INITIALIZED=4228904195
run: ‘/usr/bin/Logitech_Marble_Trackball.sh’
run: ‘VBoxCreateUSBNode.sh 189 7 00 vboxusers’
Unload module index
Unloaded link configuration context.

내가 만든 rule 이 제대로 적용이 되어서 run 에 해당 스크립트가 뜬게 보인다.

자, 이제 USB 를 다시 뺐다 꼽아본다.

…..

아무리 해도 안된다. 원인은 xinput 이 usb 장치가 완전히 인식이 된 다음에 동작하기 때문에, 저 시점에서 구동되는 스크립트에 포함된 xinput 명령어는 로지텍 마블 트랙볼을 찾질 못하고, 그래서 속성을 적용하지 못한다. 나랑 똑같은 삽질을 한 사람이 한둘이 아닌지, xinput list 를 검색해서 있으면 옵션을 설정하는 스크립트를 짠 사람도 있어서, 그 스크립트 가져다 고쳐서 해봤는데도 다 안된다.

이유는 udev 가 백그라운드 실행을 지원하지 않기 때문이다. 아마 보안상 이유인거 같은데, 무조건 실행된 스크립트가 끝나야 다음 동작으로 넘어가므로, 스크립트에서 장치가 추가되길 기다리며 아무리 슬립을 하거나 루프를 돌아봐야 소용 없다. 스크립트가 안 끝나면 장치 추가가 안 되니까!!!

이 시점에서 udev 를 이용하는 것은 포기했다. 그래서 찾은게 xorg.conf 에 설정을 추가하는 것인데, 처음에는 /usr/share/X11/xorg.conf.d/40-libinput.conf 에 설정을 넣는 것이었는데, 이 파일을 건드리기만 하면 X 가 PCI 어쩌구 에러를 내뿜으며 뜨질 않았다. Ctrl + Alt + F2 를 이용해서 다른 쉘을 열고, 해당 설정 파일을 원복하니 그제서야 제대로 부팅….

근데 결국 해결책을 찾은 사이트가 이전 포스팅에서 참고했던 사이트라는 것이 함정…T^T;;

 


참고 사이트

https://help.ubuntu.com/community/Logitech_Marblemouse_USB#Configuration

https://unix.stackexchange.com/questions/36251/in-which-log-should-i-check-for-udev-errors/36255

https://www.x.org/releases/current/doc/man/man5/xorg.conf.5.xhtml

https://ubuntuforums.org/showthread.php?t=1865740

https://superuser.com/questions/449131/starting-custom-script-after-input-device-is-connected

http://kjjeon.blogspot.com/2015/05/udev-usb-mount.html

http://www.reactivated.net/writing_udev_rules.html

 

 

 

 

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.