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

xte是xautomation包的一部分。 经过几个小时的阅读手册并寻找文档或工作示例,我仍然无法让xte模仿FnF7按键。

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

我尝试过Meta_L,Meta_R,Multi_key,键F7,keydown F7然后键盘F7。 没有任何组合似乎有效。

知道我怎么能用命令/脚本中的Fn键模拟组合按键?

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

摘要

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

 xte 'keydown XF86Paste' 'keyup XF86Paste' 

它可能是我的一台笔记本电脑的一种特殊性,我可以设置这些fn组合中的三种,如正常的多媒体键,如此处所示 ,但我将为您解释该过程以及我遵循的特定步骤。


完整解释

你可能无法设置密钥,通常你不能,但我可以设置两个或三个,正如我发现的那样。 在查看内核日志的同时依次按fn和每个function键(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 ' to make it known. 

现在,例如,您必须使用内核给出的信息设置这些组合键 – 即使用内核扫描码和您选择的键码(最好是高数字,这样它就不会干扰其他任何事情)。 使用sudo dumpkeys | grep ^keycode查看当前的密钥代码 sudo dumpkeys | grep ^keycode ,如这篇有用的Ubuntu wiki文章中所述 。)

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

 sudo setkeycodes e027 135 

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

现在,您必须通过转到键盘快捷键并查看是否可以设置组合键(例如fn + F1)来检查是否存在与新键码相关联的X键。 如果可以的话,会出现一个像XF86Paste这样的键,并且可以设置快捷键以启动你想要的任何程序。

现在你需要做的就是用xte来测试它是注意你在特定组合的键盘快捷键对话框中看到的键(例如XF86Paste)(例如.fn + f1),并输入相应的命令:

 xte 'keydown XF86Paste' 'keyup XF86Paste' 

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

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


结论

这是一种设置fn +function键组合的方法,但只有当内核将至少一种组合识别为未知但可设置的键时,才能对您的笔记本电脑进行设置。 只有fn + f1,fn + f2和fn + f3可供我设置,但它会因您的计算机而异。 如果你想尝试修改’sleep’fn + function key按钮的动作,请参阅这篇Ubuntu wiki文章 ,但它可能不完全是最新的。