如何在 xte 中模拟 Fn(功能键)按键

如何在 xte 中模拟 Fn(功能键)按键

xte 是 xautomation 包的一部分。经过几个小时的阅读手册页和寻找文档或工作示例后,我仍然无法让 xte 模拟Fn-F7按键。

xte 'keydown Meta_L' 'key F7' 'keyup Meta_L'

我尝试过 Meta_L、Meta_R、Multi_key、key F7、keydown F7 然后 keyup F7。似乎没有组合可行。

Fn您知道如何使用命令/脚本中的键来模拟组合按键吗?

答案1

模拟 fn + f 键按键通常非常棘手或几乎不可能xte,因为 fn 键本身根本没有注册xev,并且内核通常无法看到 fn 键或 fn 组合,就像其他普通键盘键一样。

概括

我实际上设法设置了三个组合键(fn + f1、fn + f2 和 fn + f3),因为按下每个组合键都会导致内核发出“按下了未知键...设置键码”对话框。这意味着我可以设置键码,然后转到键盘快捷键对话框并查看是否分配了键符,例如 XF86Paste。如果是这样,现在可以分配一个程序从它们启动,现在也可以使用它来xte发出以下命令,这对我来说相当于按下 fn + f1:

xte 'keydown XF86Paste' 'keyup XF86Paste'

这可能是我的一台笔记本电脑的一个特点,我可以像普通的多媒体键一样设置这三个 fn 组合显示在这里,但我还是会向您解释这个过程以及我遵循的具体步骤。


完整解释

您可能无法设置这些键,因为通常您无法设置这些键,但我发现可以设置两个或三个键。依次按下 fn 和每个功能键 (f1-f12),同时查看内核日志:

tail -f /var/log/kern.log

如果它们被识别,您将看到一个内核扫描码:

atkbd serio0: Unknown key pressed (translated set 2, code 0xa7 on isa0060/serio0).   
kernel: [22751.972058] atkbd serio0: Use 'setkeycodes e027 <keycode>' to make it known.

现在,例如,您必须使用内核提供的信息设置这些组合键 - 即使用内核扫描码和您选择的键码(最好是一个大数字,这样它就不会干扰其他任何东西)。使用 查看您当前的键码sudo dumpkeys | grep ^keycode,如下所述在这篇有用的 Ubuntu wiki 文章中

很明显,因为 fn 不被识别为一个键,而只能与另一个键组合,所以例如组合键 fn + f3 实际上被视为单个键,因此可以像其他单个多媒体按钮一样进行设置:

sudo setkeycodes e027 135 

必须为要设置的每个组合键单独输入上述命令,并且/etc/rc.local如果希望在启动时加载它们,则必须将其放入(不带 sudo 前缀)。

现在,您必须检查是否有与新键码关联的 X 键符,方法是转到键盘快捷键并查看是否可以设置组合键(例如 fn + F1)。如果可以,则会出现 XF86Paste 之类的键符,并且可以设置快捷方式来启动您想要的任何程序。

现在您需要做的就是测试一下xte在键盘快捷键对话框中看到的特定组合(例如 fn + f1)的键符(例如 XF86Paste),然后输入相应的命令:

xte 'keydown XF86Paste' 'keyup XF86Paste'

这相当于您按下并按下 fn + f1。

如果您已设置使用与键盘符号关联的组合键(fn + f...)启动的程序,则该xte事件将启动该程序,并且您将知道该设置已生效。


结论

这是设置 fn + 功能键组合的一种方法,但只有当内核将至少一个组合识别为未知但可设置的键时,您的笔记本电脑才可以使用这种方法。对于我来说,只有 fn +f1、fn +f2 和 fn + f3 是可设置的,但对于您的计算机会有所不同。如果您想尝试修改“睡眠”fn + 功能键按钮的操作,请参阅这篇 Ubuntu 维基文章,但可能不是完全最新的。

答案2

看起来 xte 的作者已经简单地修复/解决了这个问题。

作为测试,我将 F7 键绑定到音频静音功能,然后,

echo 'key F7' | xte 

并确认F7键已成功生成,由xte完成。

相关内容