Linux의 Python에서 키보드나 마우스, 기타 장치의 입력을 받아서 이용하고 싶을 때가 있다.
이러한 입력은 /dev/input 하위의 여러 장치로 들어온다. 이 폴더들은 기본적으로 root 소유이며 755 속성을 가지고 있다. chmod로 속성을 변경하여도 재부팅하면 다시 돌아온다. 따라서 주로 이용하는 계정에 권한을 부여하는 방법을 이용한다. 다음과 같이 계정에 input 권한을 준다.
$ sudo adduser 계정 input
다음으로 PIP로 evdev를 설치한다.
$ pip3 install evdev
장치에 배정된 event 번호를 알기 위해서 Python에서 다음의 코드를 실행한다. 주의할 점은 부팅 이후에 장치를 연결한 경우와 부팅 과정에서부터 연결된 경우는 순서가 바뀔 수 있다는 것이다. 구글 검색을 하면 나오는 명령어와 거의 유사한데, 버전이 업그레이드 되면서 device.path로 변경하도록 하는 메세지가 나오니 해당 내용에 맞추어 존다.
>>> devices = [evdev.InputDevice(path) for path in evdev.list_devices()]
>>> for device in devices:
print(device.path, device.name, device.phys)
원하는 장치를 다음과 같이 지정해 준다.
>>> dev = evdev.InputDevice('/dev/input/event0')
키보드 입력에 대한 예제가 많이 있고, 보통 다음과 같이 loop를 돌려서 입력 결과를 받는다. list 형식으로 받아서 이용하는 것이 일반적인 것 같다. key_down과 key_up 등이 나오는데 구글 검색으로는 보통 key_down를 이용하는 것 같다. 아마도, 키보드를 누르면서 입력하는 것이니 그렇게 처리되는게 아닌가 싶었다.
입력 값들을 모으기 위해서는 보통 .keystate == 1를 이용하는 것 같다.
>>> for event in device.read_loop():
if event.type == evdev.ecodes.EV_KEY:
inputs = evdev.categorize(event)
print(inputs)
if inputs.keystate == 1:
text += inputs.keycode