首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的键盘产生虚假事件

我的键盘产生虚假事件
EN

Unix & Linux用户
提问于 2016-01-04 15:44:48
回答 1查看 1.3K关注 0票数 7

我在使用终端时遇到了一个恼人的问题,我无法在谷歌上寻找解决方案,因为我不知道该怎么表达。

当我在终端上加载文本时(例如,在dmesg之后),我尝试向上滚动以查找我感兴趣的文本,在随机时间之后,终端会自动向下滚动到光标所在的位置。

另外,我注意到当xscreensaver运行时,登录gui不需要从键盘输入。您是否知道,在xscreensaver中,有一个“流逝时间”栏,当您开始键入时,它会给您更多的时间(栏数增加)?嗯,在没有我任何投入的情况下增加了一次.

我以为我有一些随机输入的键盘,但如何解决这个烦人的问题?

我一直试图跟踪xev生成的事件,但这是相当困难的。

在终端上,我暂时解决了“键盘上滚动按下”,但这不是一个合理的永久解决方案。正如xscreensaver确认的那样,整个系统都受到了影响。

这是一台笔记本电脑宏基Aspire E1-571 g。我最近安装了Funtoo。我仍在完成配置我的硬件中的每一个部分。

在安装Funtoo之前,我有Arch,而且一切都很好,所以我认为硬件没有问题,只是当前配置的一个问题。

代码语言:javascript
复制
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。

代码语言:javascript
复制
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]

...and确认我也这么做了:

代码语言:javascript
复制
xinput test-xi2 --root 5

产出如下:

代码语言:javascript
复制
EVENT type 13 (RawKeyPress)
    device: 5 (5)
    detail: 255
    valuators:

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

...still不知道怎么解决。我也试图禁用它,但我有一个错误。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-01-06 18:37:18

这不是真正键盘的问题,而是xfce4-power-manager发送的假键事件。

xfce4-power-manager是伪造的虚拟键盘事件(键码255,未分配的)键盘事件(按下键,然后按下键释放,根据源代码,每20秒一次),以确保屏幕保护程序不会在呈现模式下启动(通常,当您在看电影或做演示时)。

这种行为是在1.5.2中添加的(截至2015-01-06年的最新版本),以修复这只虫子,在显示模式下禁用所有可能类型的屏幕保护程序。

这有你受到影响的副作用,那就是已经注意到了那个臭虫

因此,为了避免出现问题,您应该保留该演示模式。这个问题可能应该作为针对xfce4电源管理器的一个bug来提出,这样就可以恢复更改,或者找到一个更好的#11083补丁。

对这个问题的解释同样有趣的是,我们是如何最终找到罪魁祸首的:

代码语言:javascript
复制
xinput test-xi2 --root

报告所有的X输入事件,告诉我们它们的来源和性质。这导致:

代码语言:javascript
复制
EVENT type 13 (RawKeyPress)
    device: 5 (5)
    detail: 255
    valuators:

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

这是一个键按,然后是来自设备5的密钥代码255的键释放事件。

xinput list允许我们识别输入设备:

代码语言:javascript
复制
⎣ Virtual core keyboard                      id=3    [master keyboard (2)]
 ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]

该id=5设备是一个虚拟设备,它充当软件生成事件的源,您可以使用:

代码语言:javascript
复制
xdotool key x

代码语言:javascript
复制
xte 'key x'

如果您在xte下运行该ltrace命令,您会注意到它是这样的:

代码语言:javascript
复制
XStringToKeysym(0x7ffed76983e0, 0x7ffed76983e0, 0, 0x7f34e491deb0) = 120
XKeysymToKeycode(0x23abfe0, 120, 120, 0x7f34e4ce7139)              = 53
XTestFakeKeyEvent(0x23abfe0, 53, 1, 0)                             = 1

XTestFakeKeyEvent是发送这些按键事件的标准X。

现在,我们想知道是什么在发送这255个按键事件。我们可以尝试找到当前正在运行的应用程序中的哪个使用该API。

代码语言:javascript
复制
sudo lsof -Fn -nPd txt | sed -n '/proc/!s/^n//p' | sort -u | xargs grep -l XTestFakeKeyEvent

或更健壮的对应物:

代码语言:javascript
复制
sudo lsof -Fn -nPd txt | sed -n '/^n\/proc/!s/^n//p' |
  sort -u | xargs -d '\n' grep -l XTestFakeKeyEvent

列出当前作为可执行文件(txt)打开和命名为任何进程(包括库和可执行文件)的文件,以及其中XTestFakeKeyEvent的grep。

返回了xfce4电源管理器。

剩下要做的就是查看源代码,了解为什么该流程会出现这些XTestFakeKeyEvent。

票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/253184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档