我目前的问题是:在我的 Acer Nitro 笔记本电脑键盘上,有一个 Nitro 键 - 这是其他笔记本电脑品牌没有的特殊键。您在下图中看到,退格键旁边有一个奇怪的 N 键 - 那是 Nitro 键。
我想开发一个 GUI 应用程序,这样每当按下 Nitro 按钮时,我的应用程序就会出现。我正在使用 Ubuntu 22.04。
根据我的发现,我想我必须编写一个 LKM 来捕获 Nitro 按键事件并从那里启动应用程序。我在这里关注答案(https://stackoverflow.com/questions/33836541/linux-kernel-how-to-capture-a-key-press-and-replace-it-with-another-key)来捕获按键事件。
我想知道是否可以在 LKM 中启动 GTK 应用程序 - 换句话说,将示例代码放在这里(https://www.gtk.org/docs/getting-started/hello-world)在我的内核模块代码中. 另外,我想知道我是否走在实现目标的正确轨道上。
提前致谢!
[UPD]澄清我想要什么:Acer Nitro 笔记本电脑通常有一个名为 Nitrosense 的应用程序,它提供了一个 GUI 来更改键盘颜色和风扇速度。Nitro 键在按下时向用户显示 GUI。但是,Nitrosense 应用程序仅适用于 Windows - 我想为 Ubuntu 编写相同的东西。到目前为止,我发现了各种关于更改键盘颜色和风扇速度的存储库,但是当我按下 Nitro 键时打开的应用程序没有存储库,所以我想构建这样的东西。我在 Ubuntu 22.04 上使用 GNOME 42。我想要的是每当用户(已经登录)按下 Nitro 键时,一个 GUI 会自动显示让我做一些事情。
[UPD2]我还发现了这个 repo https://github.com/kphanipavan/PredatorNonSense,它似乎试图做与我对另一个 Acer 品牌的关注相同的事情。我认为这可能会有所帮助,将看到。
但是,当我尝试时xev
,没有打印任何内容,这让我认为 X Server 无法识别 Nitro 按键事件。我想我应该寻找文档来编写一个模块来将 Nitro 关键事件发送到 X 服务器?
我试图进入 GNOME 控制中心的键盘设置以尝试添加键盘快捷键,但它也无法识别 Nitro 键 - 可能是因为 GNOME 在 X Server 上运行而 X Server 无法识别 Nitro 键事件?
我还查看了我在 UPD2 中提到的 repo,所以作者所做的也是通过不断地grep
从日志中轮询evtest
以查看是否按下了键 - 查看这个 shell 命令https://github.com/kphanipavan/PredatorNonSense/blob /master/PNS.sh。
我想我还可以做的是编写一个简单的 systemd 服务来轮询键盘设备文件并检查 Nitro 是否被按下。但是,有人提到这可能会浪费大量资源。对此有何建议?
因此,您需要将 Nitro 按钮公开为例如内核输入层事件。然后一些用户空间应用程序可以对其进行操作并启动您的 UI 应用程序。
请记住,Linux 是多用户的,该系统是为您拥有一台机器和数十人使用具有不同帐户的 GUI 的情况而设计的。所以你不能只是“启动一个应用程序”,你需要找到合适的用户。但是内核与用户无关。
这意味着这个特定用户必须采取行动。最简单的地方是该特定用户的窗口管理器配置(我假设是你)。
这不好,而且它不会工作。
资源:
用于
evtest
查看是否Nitro已经产生了按键事件。如果是这样,您不必编写内核模块。然后使用xev
它来查看它是否已经被转换为 X 事件。如果它不产生按键事件,那么对实际事件的搜索将会变得有趣......
最后,找出您的桌面使用的窗口管理器,然后找到您的窗口管理器的谷歌文档,并找出如何为某个按键启动程序。
(顺便说一句,通常最好只粘贴由四个空格而不是图像缩进的文本)
所以这是代码 425 的普通按键和释放事件
KEY_PRESENTATION
。如果您想制作自己的键盘布局,将此代码映射到 X 键符,我建议您阅读An Unreliable Guide to XKB Configuration (2004)。使用新名称复制现有布局,然后对其进行修改,这样在系统包更新时您就不会丢失它。
如果您想要一个小型用户空间程序来侦听该键,请选择一种具有内核输入层库的语言,例如Python。确保使用
/dev/input/by-path/...
与您的键盘相对应的符号链接,这些/dev/input/eventX
数字在引导期间不稳定。考虑到您的系统可能已经配置为进行热管理(通过 ACPI thermod 守护程序或其他方式),我绝对不会尝试在其背后使用风扇速度。
关于更改键盘颜色的能力,您正确地写道,这只能通过一些适当的设备驱动程序来完成。
您的键盘(几乎可以肯定是某些 HID 兼容设备)必须向内核公开一些输出设备(不同于与键盘键传输相关的输入设备),如果想要向您的键盘发送任何命令,则需要正确处理这些设备)
您可以从Acer Gaming RGB 键盘背光和 Turbo 模式 Linux 内核模块中获得灵感
这基本上应该旨在公开 /sys/devices 树中的控件。
您可以对这些控件采取行动的方式将取决于您在用户空间中,从大胆地呼应 /sys/devices 控件到任何 gtk 小部件的概念。
使用任何键盘键(包括您的特殊 Nitro 键)激活它是一个简单的键盘映射问题,您的 DE 可能能够通过基本系统设置处理。