Keyboard 检测是否存在数字键盘?

Keyboard 检测是否存在数字键盘?,keyboard,Keyboard,是否可以确定是否有数字键盘连接到系统?桌面键盘通常有numpad,而笔记本电脑通常没有(尽管它们将numpad键放在普通键盘中,并通过Num Lock激活)。操作系统是否知道numpad键在物理上是否是分开的?如果是这样,这些信息是否以某种方式暴露在程序中 了解这一点有助于确定适当的默认键绑定。如果它不可用,那么我将不得不选择一个保守的默认值(不使用numpad),这意味着需要一个稍微恼人的额外配置步骤,以便为使用单独numpad的人提供更好的行为,或者我必须选择一个非保守的默认值,并激怒没有n

是否可以确定是否有数字键盘连接到系统?桌面键盘通常有numpad,而笔记本电脑通常没有(尽管它们将numpad键放在普通键盘中,并通过Num Lock激活)。操作系统是否知道numpad键在物理上是否是分开的?如果是这样,这些信息是否以某种方式暴露在程序中


了解这一点有助于确定适当的默认键绑定。如果它不可用,那么我将不得不选择一个保守的默认值(不使用numpad),这意味着需要一个稍微恼人的额外配置步骤,以便为使用单独numpad的人提供更好的行为,或者我必须选择一个非保守的默认值,并激怒没有numpad的人…

我不相信你可以查询键盘功能,但iirc有一个“numpad”键。;)

您应该能够查询
Num
是打开还是关闭,但是关闭它并不是知道没有数字键盘的简单方法

你可能要做的是检测按键是否被按下,然后下意识地诱使用户这样做,这将识别出所说的特征。

安装这些软件包

sudo apt-get install -y numlockx xdotool x11-utils
然后使用这样的脚本

#!/bin/bash
cd
numlockx off &
rm -f s1.sh s2.sh out
 echo -e "#\041/bin/bash
sleep 2
xdotool key KP_5 | xev > out
exit 0" >> s1.sh
chmod +x s1.sh
echo -e "#\041/bin/bash
sleep 9
killall -9 xev
sleep 5
xdotool key BackSpace
exit 0" >> s2.sh
chmod +x s2.sh


bash s1.sh &
bash s2.sh

rm -f s1.sh s2.sh
if [[ "$(cat out | grep "keycode 84" | grep "KP_Begin" )" != "" ]]; then
  echo "Separated Numpad Detected!"
fi
rm out
exit 0
因为
KP_Begin
是numlock未激活时numpad键
KP_5
的按键代码,在带有真实键盘的真实键盘中。
在3台电脑上进行测试,其中一台电脑有单独的键盘E2,没有键盘。

您可以实际设置Numlock键的状态(请参阅此处的第三个答案:)。我认为(虽然未经测试)你可以尝试将Numlock设置为“开”,然后检测它是否仍然开着-当然,如果键盘缺少Numlock键,那么检查它会显示它的状态为关闭?不确定是否必须有一个键或者甚至是一个numpad才能通过通用api启用该键?是的,我可能错了,因为远程桌面用numlock键做了一些有趣的事情,让我觉得这是行不通的。