如何在 Fedora 26 (Wayland) 上禁用内置键盘?

如何在 Fedora 26 (Wayland) 上禁用内置键盘?

我安装了 Fedora 26 并注意到内部键盘的行为有点奇怪。按键一直被按下。

我使用的是外接键盘,所以我可以不用内置键盘。

PS:这不是重复的如何在插入 USB 键盘时禁用笔记本电脑键盘?因为答案是 Xorg 而不是 Wayland

答案1

我无法尝试此操作,但也许您可以使用从不需要的设备“抓取”输入,evtest以便它们不会传递到其他进程。从 中查找设备ls /dev/input/by-id/。例如,我有/dev/input/by-id/usb-05f3_0007-event-kbd一个指向 的符号链接../event2。想必对于内置键盘来说应该有一个类似的非 USB“kbd”。然后你可以尝试

sudo evtest --grab /dev/input/event2

在适当的文件或链接上。

答案2

如何使用 udev 禁用键盘

这将允许您使用 udev 规则禁用键盘,而无需始终在后台运行进程。

  1. 跑步sudo evtest。这将列出设备和所有输入设备的名称。如果设备是/dev/input/eventX,那么您的“设备事件编号”是X。例如,我的内置键盘列出为:

    /dev/input/event4:  AT Translated Set 2 keyboard
    

    所以我的“设备事件编号”是 4。

  2. evtest询问您“设备事件编号”。输入它(在我的例子中是4)并按 ENTER。确保捕获键盘事件,然后使用以下命令关闭进程CTRL+C

  3. 跑步

    udevadm info --attribute-walk --path=$(udevadm info --query=path --name=/dev/input/eventX)
    

    /dev/input/eventX之前找到的设备在哪里。这将列出与设备及其父设备匹配的 udev 规则。看archlinux udev 文档更多细节。

    就我而言,列出了:

    Udevadm info starts with the device specified by the devpath and then
    walks up the chain of parent devices. It prints for every device
    found, all possible attributes in the udev rules key format.
    A rule to match, can be composed by the attributes of the device
    and the attributes from one single parent device.
    
      looking at device '/devices/platform/i8042/serio0/input/input4/event4':
        KERNEL=="event4"
        SUBSYSTEM=="input"
        DRIVER==""
        ATTR{power/control}=="auto"
        ATTR{power/runtime_active_time}=="0"
        ATTR{power/runtime_status}=="unsupported"
        ATTR{power/runtime_suspended_time}=="0"
    
      looking at parent device '/devices/platform/i8042/serio0/input/input4':
        KERNELS=="input4"
        SUBSYSTEMS=="input"
        DRIVERS==""
        ATTRS{capabilities/abs}=="0"
        ATTRS{capabilities/ev}=="120013"
        ATTRS{capabilities/ff}=="0"
        ATTRS{capabilities/key}=="10000 c020000000000 0 0 700f02000003 3802078f870f401 febfffdfffefffff fffffffffffffffe"
        ATTRS{capabilities/led}=="7"
        ATTRS{capabilities/msc}=="10"
        ATTRS{capabilities/rel}=="0"
        ATTRS{capabilities/snd}=="0"
        ATTRS{capabilities/sw}=="0"
        ATTRS{id/bustype}=="0011"
        ATTRS{id/product}=="0001"
        ATTRS{id/vendor}=="0001"
        ATTRS{id/version}=="ab41"
        ATTRS{inhibited}=="0"
        ATTRS{name}=="AT Translated Set 2 keyboard"
        ATTRS{phys}=="isa0060/serio0/input0"
        ATTRS{power/control}=="auto"
        ATTRS{power/runtime_active_time}=="0"
        ATTRS{power/runtime_status}=="unsupported"
        ATTRS{power/runtime_suspended_time}=="0"
        ATTRS{properties}=="0"
        ATTRS{uniq}==""
    
      looking at parent device '/devices/platform/i8042/serio0':
        KERNELS=="serio0"
        SUBSYSTEMS=="serio"
        DRIVERS=="atkbd"
        ATTRS{bind_mode}=="auto"
        ATTRS{description}=="i8042 KBD port"
        ATTRS{drvctl}=="(write-only)"
        ATTRS{err_count}=="0"
        ATTRS{extra}=="0"
        ATTRS{firmware_id}=="PNP: PNP0303"
        ATTRS{force_release}=="369-370"
        ATTRS{id/extra}=="00"
        ATTRS{id/id}=="00"
        ATTRS{id/proto}=="00"
        ATTRS{id/type}=="06"
        ATTRS{power/control}=="auto"
        ATTRS{power/runtime_active_time}=="0"
        ATTRS{power/runtime_status}=="unsupported"
        ATTRS{power/runtime_suspended_time}=="0"
        ATTRS{power/wakeup}=="disabled"
        ATTRS{power/wakeup_abort_count}==""
        ATTRS{power/wakeup_active}==""
        ATTRS{power/wakeup_active_count}==""
        ATTRS{power/wakeup_count}==""
        ATTRS{power/wakeup_expire_count}==""
        ATTRS{power/wakeup_last_time_ms}==""
        ATTRS{power/wakeup_max_time_ms}==""
        ATTRS{power/wakeup_total_time_ms}==""
        ATTRS{scroll}=="0"
        ATTRS{set}=="2"
        ATTRS{softraw}=="1"
        ATTRS{softrepeat}=="0"
    
      looking at parent device '/devices/platform/i8042':
        KERNELS=="i8042"
        SUBSYSTEMS=="platform"
        DRIVERS=="i8042"
        ATTRS{driver_override}=="(null)"
        ATTRS{power/control}=="auto"
        ATTRS{power/runtime_active_time}=="0"
        ATTRS{power/runtime_status}=="unsupported"
        ATTRS{power/runtime_suspended_time}=="0"
    
      looking at parent device '/devices/platform':
        KERNELS=="platform"
        SUBSYSTEMS==""
        DRIVERS==""
        ATTRS{power/control}=="auto"
        ATTRS{power/runtime_active_time}=="0"
        ATTRS{power/runtime_status}=="unsupported"
        ATTRS{power/runtime_suspended_time}=="0"
    
  4. 构建一个与您的设备及其父设备匹配的 udev 规则,仅此而已。通过在开始时使用较大的数字命名它,确保它最后运行。

    匹配设备后,将其LIBINPUT_IGNORE_DEVICE选项设置为 0 以外的任何值(例如 1)。请参阅关于忽略特定设备的 libinput 指南更多细节。

    例如,这是我的/etc/udev/rules.d/99-ignore-my-device.rules

    KERNELS=="input4", SUBSYSTEMS=="input", ATTRS{id/product}=="0001", ATTRS{id/vendor}=="0001", ATTRS{id/version}=="ab41", ENV{LIBINPUT_IGNORE_DEVICE}="1"
    
  5. 重新启动您的设备。 udev 规则仅适用于新连接的设备,不适用于已连接的设备。

完毕!

答案3

我也有同样的问题。 Wayland 合成器为键盘创建一个抽象,因此所有客户端都看不到硬件键盘。我尝试如下并且有效:

sudo libinput list-devices

就我而言,它会导致 /dev/input/event6。然后你可以使用 evtest 作为 meuh 的答案。

相关内容