我有一台笔记本电脑,还连接了一个外接 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