锁定内置笔记本电脑键盘但保持外部 USB 键盘功能正常

锁定内置笔记本电脑键盘但保持外部 USB 键盘功能正常

我有一台笔记本电脑,还连接了一个外接 USB 键盘。能否以某种方式锁定内置笔记本电脑键盘(即按下的键应无效)但保持外接键盘响应?

我正在运行 Ubuntu Gnome 16.04。我的笔记本电脑是联想 ThinkPad T420。

答案1

是的,这应该是可能的,通过使用xinput

首先,xinput list在终端中运行。您应该看到类似以下内容:

zachary@MCServer:~$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]

现在,您可能会看到两个键盘,而不仅仅是一个,因为您插入了两个键盘。我建议拔下 USB 键盘并运行命令。

记下 的 ID Virtual core XTEST keyboard。在我的例子中,它是5

插入 USB 键盘,因为您即将禁用内置键盘。

运行此命令:

xinput set-prop 5 "Device Enabled" 0

并将 5 替换为您的设备 ID。

要重新启用键盘:

xinput set-prop 5 "Device Enabled" 1`

将 5 替换为您的设备 ID。

如果您愿意,您还可以将它们放在单独的脚本中,然后从终端运行它们(或.desktop为您制作的脚本创建文件)。

编辑:
如果您愿意,我编写了一个脚本,用于检查指定设备的状态xinput并切换它(如果关闭则切换为打开,如果打开则切换为关闭)。您需要将变量更改device为相应的 ID。

#!/bin/bash

device=5 #Change this to reflect your device's ID

output=$(xinput list-props $device | awk '/Device Enabled/{print $4}')

if [ $output == 1 ]
  then
    xinput set-prop $device "Device Enabled" 0
elif [ $output == 0 ]
  then
    xinput set-prop $device "Device Enabled" 1
else
  echo "Something's up."
fi

编辑2:
改进的脚本 - 自动设备 ID 检测(假设其名称是固定的)和桌面通知。

#!/usr/bin/env bash

# name of the device - we hope this will not change
DEVNAME="AT Translated Set 2 keyboard"
# here we find the device ID corresponding to the name
device=$(xinput list | grep "${DEVNAME}" | sed "s/.*${DEVNAME}.*id=\([0-9]*\).*/\1/g")
# here we get the enabled state
state=$(xinput list-props $device | awk '/Device Enabled/{print $4}')

if [ ${state} == 1 ]; then
    # if it is enabled, disable it and show a notification
    xinput set-prop ${device} 'Device Enabled' 0
    notify-send -u normal "Keyboard lock" "Keyboard \"${DEVNAME}\" (id=${device}) was disabled."
elif [ ${state} == 0 ]; then
    # if it is disabled, enable it and show a notification
    xinput set-prop ${device} 'Device Enabled' 1
    notify-send -u normal "Keyboard lock" "Keyboard \"${DEVNAME}\" (id=${device}) was enabled."
else
    # some weird state - do nothing and show critical notification
    notify-send -u critical "Keyboard lock" "Keyboard \"${DEVNAME}\" (id=${device}) is neither enabled nor disabled. State is \"${state}\""
fi

相关内容