linux: 외부 키보드가 노트북에 연결되어 있는지 감지

linux: 외부 키보드가 노트북에 연결되어 있는지 감지

저는 Ubuntu Virtualbox를 실행하는 OSX 노트북을 가지고 있으며, 사무실에 있을 때 연결하는 노트북 키보드나 외부 USB 키보드를 사용하여 상호 작용할 수 있습니다.

Ubuntu Virtualbox의 키맵이 그에 따라 변경되도록 외부 키보드가 연결되어 있는지 감지하기 위해 실행할 수 있는 스크립트가 있습니까?

현재 이 명령을 실행하려면 "mac" 또는 "key"를 수동으로 실행합니다.

setxkbmap -layout gb

또는

xmodmap .Xmodmap

키보드를 연결하거나 분리할 때 자동으로 동일한 작업을 수행하고 싶습니다. 어떤 아이디어가 있나요?

답변1

udev이를 위해 -rule을 사용할 수 있습니다 . 내 예에서는 무선 마우스용 USB 어댑터를 사용하고 있으므로 그에 따라 조정해야 합니다.

1. 식별자 가져오기

장치에 고유한 규칙을 부여하려면 장치를 올바르게 식별해야 합니다. 이렇게 하려면 udevadm(USB 키보드가 로 나타나야 합니다 /dev/usb/<device>. 장치를 연결했다가 빼서 장치가 나타나는지(사라지는지) 확인하십시오)의 출력을 사용하십시오. 공급업체 및 장치 ID는 충분히 고유해야 하지만 일치하는 항목이 많을수록 좋습니다.

udeadm info -a -n /dev/usb/hiddev0 | grep 'idVendor\|idProduct'
ATTRS{idVendor}=="0e8f"
ATTRS{idProduct}=="00a4"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0001"

ID의 출력과 일치하는 두 값을 확인합니다 lsusb(어떤 장치인지 알아보려면 키보드 유무에 따른 차이를 테스트 lsubs하거나 출력에서 ​​이름이 일치하는지 확인할 수 있습니다).

lsusb
Bus 005 Device 004: ID 0e8f:00a4 GreenAsia Inc.

따라서 공급업체 ID와 제품 ID로 각각 0e8f및 를 사용합니다.00a4

2. 규칙 만들기

규칙 자체는 단순히 수행할 작업을 나열합니다. /etc/udev/rules.d/예를 들어 저장합니다 keyboard.rules( .rules접미사는 필수입니다). 이 파일은 일부 속성, 작업을 일치( ==)하고 스크립트를 실행합니다.

ACTION=="add", ATTRS{idVendor}=="0e8f", ATTRS{idProduct}=="00a4", RUN+="/full/path/to/script.sh"

이 섹션에 문제 가 있을 수 있습니다 ACTION=="remove". 읽어 보세요.이것. 문제는 삭제 시 일부 속성이 제거되므로 udev더 이상 삭제 규칙과 일치할 수 없다는 것입니다.

내 경우에는 udeadm monitor --environemnt장치를 사용하고 플러그를 뽑았습니다. 나는 선택했다

ID_MODEL_ID=00a4

그리고 이를 유일한 요구 사항으로 사용하십시오(좋은 일치를 얻으려면 여기에서 시행착오를 거쳐야 할 수도 있지만 키맵만 변경하는 경우에는 단일 일치가 꽤 좋습니다). ENV대신 규칙을 삭제해야 합니다 ATTRS(AFAIK ENV는 플러그인 규칙에도 작동하지만 ATTRS삭제는 실패함).

ACTION=="remove", ENV{ID_MODEL_ID}=="00a4", RUN+="/path/to/removal_script.sh"

추가 및 제거 규칙은 작업당 한 줄로 구성된 파일일 수 있습니다.

3. 스크립트

스크립트는 항상 에 의해 실행되므로 roota) root(보안상의 이유로)만이 작성할 수 있고 b) 사용자가 명령을 실행해야 하는 경우 sudo -u user1 command스크립트에서 해당 스크립트를 사용하십시오. 물론 실행 가능해야 합니다. 명령을 직접 실행하려는 경우(즉, 스크립트를 사용하지 않고) 해당 명령에 대한 절대 경로를 사용하십시오.

행운을 빌어요.

관련 정보