在不使用 X-Windows 的情况下在 Linux 中设置或读取 Caps Lock 状态
Posted
技术标签:
【中文标题】在不使用 X-Windows 的情况下在 Linux 中设置或读取 Caps Lock 状态【英文标题】:Set or read Caps Lock state in Linux without using X-Windows 【发布时间】:2018-06-15 07:52:28 【问题描述】:我们正在为嵌入式应用程序运行 Yocto Linux。我正在寻找一种方法来通过 bash 提示符或代码以编程方式控制 Caps Lock 状态,设置状态或读取状态以便知道状态,而不使用 X-Windows。我们没有安装 X-Windows 库,目前无法添加它们。我们找到的所有解决方案都需要 X-Windows 库或使用 X 工具,例如 xmodmap。任何帮助将不胜感激。这似乎是一件很简单的事情,需要将 X-Windows 引入我们的嵌入式设备。难道没有我们可以读取的 sysfs 条目吗?
这个问题类似于How can I turn on/off Caps Lock, Scroll Lock, Num Lock key programatically on Linux,但我正在寻找不需要 X-Window 库或实用程序的解决方案。
【问题讨论】:
【参考方案1】:一点背景。大写锁定状态不是由键盘本身维护,而是由管理键盘的任何软件维护。每次按下大写锁定键时,键盘都会向软件发送一个代码,软件确定是打开还是关闭大写锁定,相应地设置一个标志,然后向键盘发送命令以打开大写锁定 LED或关闭。
所以在这种情况下,如果您不使用 X,我假设管理键盘的软件是 Linux 内核的控制台。这有许多 ioctl 可用于管理大写锁定标志,并分别管理 LED 状态。有关详细信息,请参阅man pageconsole_ioctl(4)
。
还有一个setleds(1)
程序(man page) 可用于轻松发出这些ioctl。它是 kbd 工具包的一部分,似乎已经有一个 Yocto recipe。
【讨论】:
谢谢。我从另一个来源收到了相同的答案,并且在 /dev/tty1 上使用 KDGKBLED ioctl 对我们来说效果很好。我正要自己回答这个问题。即使我们的设备上没有任何物理 LED,基本上也可以读取和控制终端上的 LED。以上是关于在不使用 X-Windows 的情况下在 Linux 中设置或读取 Caps Lock 状态的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以在不使用 getImageData() 的情况下在 JavaScript 中找到像素的颜色?
在不使用 boost::promise 的情况下在 boost 线程中返回值
如何在不使用   的情况下在行内元素之间添加空格 [重复]