저는 키를 눌렀을 때 다른 소리를 낼 수 있도록 Ruby 프로그램을 만들고 있습니다. A 키는 S 키와 다른 소리를냅니다. Ruby를 사용하는 대신 원시 입력을 얻고 싶습니다.
예를 들어 /dev/input/mice를 읽으면 모든 마우스 이벤트를 얻을 수 있습니다. 내 코드에서 이것을 사용하여 마우스 움직임을 기반으로 일부 작업을 수행할 수 있습니다.
어떤 파일을 열면 모든 키보드에 대한 이벤트를 얻을 수 있나요?
답변1
여기에는 두 가지 레이어가 관련되어 있습니다. input
다양한 키보드, 마우스, 조이스틱 등을 공통 프레임워크로 변환하여 /dev/input/*
장치 파일(장치당 하나의 파일)에서 사용할 수 있도록 하는 커널 레이어와 X(또는 사용자에 따라) 배포 Wayland 레이어는 이러한 파일을 읽고 그래픽 응용 프로그램에서 이해할 수 있는 X 이벤트로 변환합니다. 후자는 입력 장치를 결합하여 "모든 장치의 키보드 이벤트" 및 "모든 장치의 마우스 이벤트"로 사용할 수 있도록 합니다. 단순화되었지만 첫 번째 근사치가 될 수 있습니다).
애플리케이션이 상호 작용하는 자연스러운 방법은 X 레이어를 사용하는 것입니다(Ruby가 이것을 추상화한다고 확신합니다). 이는 응용 프로그램이 소리를 재생할 뿐만 아니라 무언가를 표시하는 경우(아무 것도 표시하지 않더라도) 특히 권장됩니다.
물론 원하는 경우 모든 파일을 열고 /dev/input/*
해당 파일의 이벤트를 해석할 수도 있지만 새 키보드와 마우스가 연결되면 실패하므로 이러한 이벤트에도 반응하려고 합니다.
이 /dev/input/mice
추상화는 마우스에만 존재하며 사람들이 단일 PS/2 키보드를 사용할 때 고안된 레거시 솔루션이지만 다양한 마우스 장치가 있었습니다. 이 파일은 X 레이어가 활성 마우스 입력 장치로 간주하는 것과 일치하지 않을 수 있으며 키보드에 대한 동등한 추상화가 없습니다.