내 키보드가 가짜 이벤트를 생성합니다.

내 키보드가 가짜 이벤트를 생성합니다.

터미널을 사용하면서 귀찮은 문제가 있는데 어떻게 표현해야 할지 몰라서 구글에서 해결 방법을 찾을 수 없습니다.

터미널에 텍스트를 로드하고(예: dmesg 이후) 관심 있는 텍스트 비트를 찾기 위해 위로 스크롤하려고 하면 임의의 시간이 지나면 터미널이 자동으로 커서가 있는 위치로 아래로 스크롤됩니다.

또한, xscreensaver가 실행 중일 때 키보드 입력 없이 로그인 GUI가 나타나는 것을 발견했습니다. xscreensaver에 입력을 시작할 때 더 많은 시간(열이 증가함)을 제공하는 "경과 시간" 열이 있다는 것을 알고 계셨습니까? 글쎄, 내가 입력하지 않으면 한 번 증가합니다 ...

키보드에서 임의의 입력이 있는 줄 알았는데, 이 짜증나는 문제를 어떻게 해결할 수 있을까요?

xev에 의해 생성된 이벤트를 추적하려고 시도했지만 매우 어렵습니다.

터미널에서 "키보드를 누를 때 스크롤"을 선택 취소하여 일시적으로 문제를 해결했지만 이는 합리적으로 영구적인 해결 방법은 아닙니다. xscreensaver가 확인한 바와 같이 전체 시스템이 영향을 받았습니다.

Acer Aspire e1-571g 노트북입니다. 최근에 Funtoo를 설치했습니다. 아직 각 하드웨어의 임시 구성을 마무리하는 중입니다.

Funtoo를 설치하기 전에는 Arch Linux가 있었고 모든 것이 잘 작동했기 때문에 하드웨어에는 아무런 문제가 없고 현재 구성에만 문제가 있다고 생각했습니다.

cpu:                                                            
                   Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz, 1383 MHz
                   Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz, 1400 MHz
                   Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz, 1350 MHz
                   Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz, 1472 MHz
keyboard:
  /dev/input/event4    AT Translated Set 2 keyboard
mouse:
  /dev/input/mice      SynPS/2 Synaptics TouchPad
graphics card:
                       Intel 3rd Gen Core processor Graphics Controller
                       nVidia VGA compatible controller
sound:
                       Intel 7 Series/C210 Series Chipset Family High Definition Audio Controller
storage:
                       Intel 7 Series Chipset Family 6-port SATA Controller [AHCI mode]
network:
  eth0                 Broadcom NetLink BCM57785 Gigabit Ethernet PCIe
  wlan0                Intel Centrino Wireless-N 105 BGN
network interface:
  wlan0                WLAN network interface
  lo                   Loopback network interface
  eth0                 Ethernet network interface
  sit0                 Network Interface
disk:
  /dev/sda             KINGSTON SH103S3
partition:
  /dev/sda1            Partition
  /dev/sda2            Partition
  /dev/sda3            Partition
  /dev/sda4            Partition
cdrom:
  /dev/sr0             HL-DT-ST DVDRAM GT51N
usb controller:
                       Intel 7 Series/C210 Series Chipset Family USB xHCI Host Controller
                       Intel 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2
                       Intel 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1
bios:
                       BIOS
bridge:
                       Intel 3rd Gen Core processor DRAM Controller
                       Intel Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port
                       Intel 7 Series/C210 Series Chipset Family PCI Express Root Port 1
                       Intel 7 Series/C210 Series Chipset Family PCI Express Root Port 2
                       Intel HM77 Express Chipset LPC Controller
hub:
                       Linux 4.3.0-gentoo ehci_hcd EHCI Host Controller
                       Hub
                       Linux 4.3.0-gentoo ehci_hcd EHCI Host Controller
                       Hub
                       Linux 4.3.0-gentoo xhci-hcd xHCI Host Controller
                       Linux 4.3.0-gentoo xhci-hcd xHCI Host Controller
memory:
                       Main Memory
unknown:
                       FPU
                       DMA controller
                       PIC
                       Keyboard controller
                       PS/2 Controller
                       Intel 7 Series/C210 Series Chipset Family MEI Controller #1
                       Intel 7 Series/C210 Series Chipset Family SMBus Controller
                       Broadcom NetXtreme BCM57765 Memory Card Reader
                       Broadcom System peripheral
                       Broadcom System peripheral
                       Chicony Electronics HD WebCam

어떤 아이디어/솔루션이 있나요?

고쳐 쓰다: Stéphane 덕분에 가짜 이벤트를 생성하는 장치가 id=5라는 것을 알게 되었습니다.

⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]

...그리고 확인하기 위해 저도 이 작업을 수행했습니다.

xinput test-xi2 --root 5

출력은 다음과 같습니다

EVENT type 13 (RawKeyPress)
    device: 5 (5)
    detail: 255
    valuators:

EVENT type 14 (RawKeyRelease)
    device: 5 (5)
    detail: 255
    valuators:

...아직도 해결 방법을 모르겠습니다. 비활성화하려고 시도했지만 오류가 발생했습니다.

답변1

이는 실제 키보드의 문제가 아니라 가짜 키 이벤트가 전송되는 문제입니다 xfce4-power-manager.

xfce4-power-manager척하는 거야가짜(키코드 255, 할당되지 않음) 프리젠테이션 모드(보통 영화를 보거나 프리젠테이션을 할 때)에서 화면 보호기가 시작되지 않도록 하는 키보드 이벤트(키를 누른 후 키를 놓음, 소스 코드에 따라 20초마다 한 번씩) 프로모션 회의).

이 동작은 1.5.2(2015-01-06 기준 최신 버전)에 추가되어 수정되었습니다.이 오류데모 모드에서 가능한 모든 유형의 화면 보호기를 비활성화합니다.

이것은 당신에게 영향을 미치는 부작용을 가질 수 있습니다이미 해당 오류를 발견했습니다..

그래서 두고 싶다고?데모 모드문제를 피하기 위해. 이 문제는 xfce4-power-manager에 대한 버그로 제기되어 변경 사항을 되돌리거나 #11083에 대한 더 나은 수정 사항을 찾을 수 있도록 해야 합니다.


문제에 대한 설명만큼 흥미로운 점은 궁극적으로 범인을 어떻게 찾았는가입니다.

xinput test-xi2 --root

모든 X 입력 이벤트를 보고하고 해당 이벤트의 출처와 성격을 알려줍니다. 그 결과는 다음과 같습니다.

EVENT type 13 (RawKeyPress)
    device: 5 (5)
    detail: 255
    valuators:

EVENT type 14 (RawKeyRelease)
    device: 5 (5)
    detail: 255
    valuators:

키 코드가 255인 기기 5의 키 출시 이벤트입니다.

xinput list입력 장치를 식별해 보겠습니다.

⎣ Virtual core keyboard                      id=3    [master keyboard (2)]
 ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]

id=5 장치는 소프트웨어 생성 이벤트의 소스 역할을 하는 가상 장치입니다. 다음 명령을 사용하여 이벤트를 생성할 수 있습니다.

xdotool key x

또는

xte 'key x'

xte아래에서 명령을 실행 하면 ltrace다음과 같은 결과가 나오는 것을 확인할 수 있습니다.

XStringToKeysym(0x7ffed76983e0, 0x7ffed76983e0, 0, 0x7f34e491deb0) = 120
XKeysymToKeycode(0x23abfe0, 120, 120, 0x7f34e4ce7139)              = 53
XTestFakeKeyEvent(0x23abfe0, 53, 1, 0)                             = 1

XTestFakeKeyEvent는 이러한 키 이벤트를 전송하기 위한 표준 X API입니다.

이제 우리는 무엇이 255개의 주요 이벤트를 보냈는지 알고 싶습니다. 현재 실행 중인 애플리케이션 중 이 API를 사용하는 애플리케이션을 찾아볼 수 있습니다.

sudo lsof -Fn -nPd txt | sed -n '/proc/!s/^n//p' | sort -u | xargs grep -l XTestFakeKeyEvent

또는 더 강력한 동등물:

sudo lsof -Fn -nPd txt | sed -n '/^n\/proc/!s/^n//p' |
  sort -u | xargs -d '\n' grep -l XTestFakeKeyEvent

txt현재 열려 있고 실행 파일( )로 모든 프로세스(라이브러리 및 실행 파일 포함)에 매핑된 파일을 나열하고 XTestFakeKeyEvent에 대해 해당 파일 내에서 grep을 수행합니다.

xfce4-power-manager를 반환합니다.

이제 남은 일은 프로세스가 이러한 XTestFakeKeyEvent를 실행하는 이유를 소스 코드에서 찾는 것입니다.

관련 정보