USB 마우스를 껐다가 다시 켠 후에도 USB 마우스의 xinput 설정이 유지되도록 하고 싶습니다. 이 이벤트를 어떻게 모니터링할 수 있나요?
USB 수신기를 뽑지 않았기 때문에 작동하지 않습니다. 장치를 분리했다가 다시 연결한 후, 종료, 다시 시작한 후에도 xinput 설정을 유지하는 방법은 무엇입니까?
제가 아는 한 udev는 HW 감지 응용 프로그램에 사용할 수 있지만 Logitech Unifying Receiver와 같은 장치의 상태 변화를 감지할 수는 없는 것 같습니다.
이 문제를 해결하는 열쇠는 수신기에서 이벤트를 성공적으로 추적하고 xinput 명령을 실행하는 스크립트를 작성하는 것입니다. 이 이벤트를 어떻게 감지할 수 있는지 아는 사람이 있나요? Solaar는 물론 이를 감지할 수 있지만 이것이 전문가가 아닌 Linux 사용자에게 간단하다는 의미는 아닙니다.
감사해요!
답변1
나는 Unix Stack Exchange의 다른 게시물에서 나온 제안을 기반으로 이 문제를 해결했습니다.
간단히 말해서 마우스의 변경 사항을 찾기 위해 2초마다 반복되는 백그라운드 쉘 스크립트를 실행하고, 변경 사항이 발견되면 xinput 명령을 다시 실행합니다.
원래의 (더 간단한) 솔루션은 여기에 게시되어 있습니다.
https://unix.stackexchange.com/questions/332573/how-to-make-xinput-commands-permanent/340594#340594
내가 실행하는 스크립트는 다음과 같습니다 ~/.xinitrc
.
# Map mouse button 8 (top right) to button 2 (top left) and vice versa, run when changes to the mouse occur
while true; do
NEW_MOUSEID=$(xinput | grep "Expert Mouse" | grep -o -E '[0-9]+' | head -n 1)
if [ "$MOUSEID" != "$NEW_MOUSEID" ]; then
MOUSEID=$NEW_MOUSEID
if [ "$MOUSEID" != "" ]; then
xinput --set-button-map $MOUSEID 1 8 3 4 5 6 7 2 9 10 11 12
fi
fi
sleep 2
done &
기본 구조:
- 2초마다 xinput에서 USB ID의 변경 사항을 확인하세요.
- 마우스 ID가 비어 있으면 연결되지 않은 것입니다. xinput을 실행하지 마세요(실행하면 오류가 발생합니다).
- 명령 을 구문 분석하면
xinput
마우스 "Expert Mouse"에 대한 USB 장치 ID가 반환됩니다(예: "14").
원래 답변에서는 변경 사항을 모니터링 lsusb
하고 명령을 다시 실행하는 것이 좋습니다. 그것도 잘 작동합니다.