在不使用 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 中找到像素的颜色?

在不使用 JOIN 的情况下在 HSQLDB 中进行透视

在不使用 boost::promise 的情况下在 boost 线程中返回值

如何在不使用 &nbsp 的情况下在行内元素之间添加空格 [重复]

如何在不使用 Segue 的情况下在单独的 UIViewController 中选择实例变量

如何在不使用数据透视和反透视的情况下在 SQL Server 中水平显示数据?