입력 장치를 비활성화하는 방법은 무엇입니까?

입력 장치를 비활성화하는 방법은 무엇입니까?

내 노트북에 내장된 키보드가 고장났습니다(Shift 버튼이 가끔 눌림). 외장 키보드만 사용하는데 내장 키보드가 간섭을 하네요. (장치를 분리할 수 없습니다.)

비활성화를 사용할 수 있지만 xinput다시 활성화됩니다(참조키보드를 영구적으로 비활성화).

장치를 인식했습니다. ( lsinput예를 들어 설치해야 합니다 apt install input-utils.)

sudo lsinput

/dev/input/event0
   bustype : BUS_I8042
   vendor  : 0x1
   product : 0x1
   version : 43841
   name    : "AT Translated Set 2 keyboard"
   phys    : "isa0060/serio0/input0"
   bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP

어떻게 비활성화하나요?

답변1

블랙리스트에 올리는 것이 하나의 선택이 될 수 있습니다. 마찬가지로, 해당 atkbd모듈이 전달되고 있고 다른 어떤 모듈에도 해당 특정 모듈이 필요하지 않은 경우 해당 모듈을 블랙리스트에 추가하세요.

그렇지 않으면 unbind옵션이 될 수 있습니다.

테스트할 노트북이 없어서 여분의 마우스를 시스템에 연결한 다음 비활성화했습니다.

이것은 마우스입니다:

I: Bus=0003 Vendor=04f3 Product=0235 Version=0111
N: Name="OM"
P: Phys=usb-0000:00:14.0-10.1/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb2/2-10/2-10.1/2-10.1:1.0/0003:04F3:0235.0004/input/input12
U: Uniq=
H: Handlers=event12 mouse1 
B: PROP=0
B: EV=17
B: KEY=70000 0 0 0 0
B: REL=903
B: MSC=10

현재 겪고 있는 일 /sys/bus/hid/...:

# head /sys/bus/hid/drivers/*/*/*/*/name
==> /sys/bus/hid/drivers/hid-generic/0003:046A:010D.0001/input/input3/name <==
HID 046a:010d

==> /sys/bus/hid/drivers/hid-generic/0003:046A:010D.0002/input/input4/name <==
HID 046a:010d

==> /sys/bus/hid/drivers/hid-generic/0003:046D:C077.0003/input/input5/name <==
Logitech USB Optical Mouse

==> /sys/bus/hid/drivers/hid-generic/0003:04F3:0235.0004/input/input12/name <==
OM

알았어, 여기서 내보내자.

# echo 0003:04F3:0235.0004 > /sys/bus/hid/drivers/hid-generic/unbind

그것은 사라진다. 마우스 커서가 더 이상 움직이지 않습니다. 더 이상 입력 장치로 표시되지 않습니다. 정말 사라졌습니다.

따라서 ing을 사용하여 이와 같은 작업을 수행할 수 있으며 unbind, 사용하는 드라이버에 따라 블랙리스트에 올릴 수도 있습니다. 주요 문제는 바인딩을 해제할 올바른 이름과 위치를 찾은 다음 사용자 지정 udev 규칙을 사용하여 자동화하는 것입니다. 그렇지 않은 경우 플러그를 뽑았다가 다시 연결하면 다시 나타납니다.

답변2

USB 레벨을 살펴봐도 수정할 수 있는 항목이 표시되지 않는 경우 다음 두 가지 작업은 입력 레이어 레벨에서 USB 레벨을 "잡거나" X 레벨에서 활성화되지 않도록 방지하는 것입니다.

일등을 위해서,

evtest --grab /dev/input/event0 > /dev/null

또는 비슷한 방법으로 트릭을 수행해야 합니다. 스크래핑은 스크래핑 애플리케이션만 이벤트를 수신하도록 보장합니다. 즉, X는 어떤 이벤트도 수신하지 않습니다.

두 번째 항목의 경우 다음 줄을 따라 InputClass섹션을 추가하세요 .xorg.conf

Section "InputClass"
    Identifier "BrokenKeyboard"
    MatchDevicePath "/dev/input/by-path/platform-i8042-serio-0-event-kb"
    Option "Ignore" "true"
EndSection

경로가 실제로 키보드에 연결된 경로라고 가정합니다. 여기서는 등을 사용 하지 마십시오 /dev/input/event0. 크로스 부팅 일관성을 보장하지 않습니다.

답변3

뒤늦게나마 애플 유저들을 위해 위의 답변을 조금 설명드리고 싶었습니다. 내부 키보드가 고장난 MBP를 가지고 있는데 evtest입력을 받아 에 보내는데 /dev/null이것이 가장 일반적인 조언인 것 같습니다. 이 해결 방법의 문제점은 커널을 업데이트하면 이벤트 번호가 변경되고, 저처럼 부팅 시 실행되는 스크립트가 있는 경우 모든 커널 업데이트에서 번호를 수동으로 업데이트해야 한다는 것입니다. 이것이 바로 using이 필요한 부분 unbind이며, 위의 답변이 어떻게 제가 최종적으로 포기하도록 영감을 주었는지에 대해 evtest저는 이 작업을 완벽하게 수행하는 것처럼 보이는 간단한 줄을 생각해 냈습니다.

전체 명령은 다음과 같습니다.

head /sys/bus/hid/drivers/*/*/*/*/name | grep "apple" | sed -E 's/[^0-9A-F:.]*//g' | awk '{ print substr( $0, 1, length($0)-2 ) }' > /sys/bus/hid/drivers/apple/unbind

우리는 첫 번째 부분이 무엇을 하는지 알고 있으므로 sedand 의 필요성을 설명하겠습니다 awk. heada로 실행하면 grep다음과 유사한 내용이 출력됩니다.

/sys/bus/hid/drivers/apple/0003:046D:C077.0003/input/input18/name

이제 sed16진수 문자가 아닌 모든 것을 제거하는 데 사용합니다.

0003:046D:C077.000318

입력 번호도 끝에 포함되어 있지만 필요하지 않으므로 이를 사용하여 awk문자열의 마지막 두 문자를 제거합니다.

0003:046D:C077.0003

물론, 이 문자열을 에 보낼 출력 방향이 있습니다 /sys/bus/hid/drivers/apple/unbind. 이를 시작 시 실행할 수 있는 스크립트에 넣으면 작업이 완료됩니다. hid-generic장치에 맞게 수정 해야 합니다 . Apple에는 이 작업을 더 쉽게 해주는 자체 입력 드라이버 디렉터리가 있으므로 grep"apple"만 사용하면 충분합니다.

편집자: 이것이 크라우드소싱 정보의 아름다움입니다. 이 솔루션을 제공한 아래 Stephen Kitt에게 감사드립니다. 내 것보다 훨씬 우아하고 입력 장치 번호를 올바르게 고려합니다.

for name in /sys/bus/hid/drivers/apple/*/*/*/name; do device=$(cut -d/ -f7 <<<"$name"); [ "$device" != "*" ] && printf "%s" "$device" > /sys/bus/hid/drivers/apple/unbind; done

관련 정보