私のキーボードは偽のイベントを生成します。

私のキーボードは偽のイベントを生成します。

端末を使用しているときに面倒な問題がありますが、どのように表現するのかわからないため、Googleで解決策を見つけることができません。

端末にテキストを読み込み(たとえば、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を実行する理由をソースコードで見つけることです。

関連情報