请原谅我对 linux 操作系统/硬件问题的无知...我只是一个程序员 :)
我有一个应用程序调用一些 bash 脚本来启动外部应用程序,在本例中为 Firefox。该应用程序在具有触摸屏功能的信息亭上运行。在启动 Firefox 时,我还启动了一个虚拟键盘应用程序,允许用户进行键盘输入。
然而,信息亭也有 PS/2 和 USB 插槽,允许用户插入键盘。如果插入了键盘,如果我不必启动虚拟键盘并为 Firefox 窗口提供更多屏幕空间,那就太好了。
有没有办法让我检测是否从 bash 脚本插入了键盘?它会出现在 /dev 中吗?如果是,它会出现在一致的位置吗?如果用户使用 PS/2 或 USB 键盘会有所不同吗?
谢谢!
对于 USB 设备,您可以使用
lsusb
并搜索具有键盘协议(接口协议 1)的人机接口设备(接口类 3),例如此外,你可以让
udev
帮助你。列出下面的设备/dev/input/by-path/
和键盘设备-kdb
(至少在 Ubuntu 中,其中 udev 规则指定它),例如对于 USB 键盘,我通常通过简单地在“lsusb -v”输出中搜索“Keyboard”一词来找到键盘设备:
示例输出:
一种更通用的方法是在 /sys/bus 中搜索 bInterfaceClass 03 和 bInterfaceProtocol 01 的任何设备。由于您必须检测非 USB 设备,并且您希望在脚本中使用输出,因此这种方法可能会更好为你:
示例输出:
警告:我找不到 PS/2 键盘来测试这个脚本。由于该线程现在已有七年多的历史,我猜原始问题的作者早已继续前进,不再需要 PS/2 检测。无论如何,我都会留下这个答案,希望其他人会发现它有用,但请注意,我没有用非 USB 设备测试过这个。
一种方法是这样做:
您还可以使用Upstart和udev来检测键盘的存在并对其采取行动。
对于 USB,您可以在 /sys/bus/usb/devices 中搜索配置为具有 HID 类 (0x03) 和协议键盘 (0x01) 接口的设备。
bash 脚本:
/sys/class/input
PS/2 键盘在设备中列出。USB 键盘也可能在那里,因为下面的鼠标是 USB 之一:另一个发现是键盘目录包含状态键的子目录: