xev 的输出是什么意思?

xev 的输出是什么意思?

我有兴趣重新映射键盘上的一些键。特别是,我想按住功能键,按 F1 键,然后触发脚本。我知道这xev对于找出与按键关联的键码很有用。例如,当我按下该x键时,我得到:

KeyPress event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1597243, (-190,43), root:(910,336),
    state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
    XLookupString gives 1 bytes: (78) "x"
    XmbLookupString gives 1 bytes: (78) "x"
    XFilterEvent returns: False

KeyRelease event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1597363, (-190,43), root:(910,336),
    state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
    XLookupString gives 1 bytes: (78) "x"
    XFilterEvent returns: False

这对我来说很有意义。

但是,当我按 Function-F1 时,我不明白会发生什么。为什么按 Function-F1 看起来就像我也按住了 Windows 按钮并输入了字母l

xev当我按下 Function-F1 时输出:

KeyPress event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735349, (-157,221), root:(943,514),
    state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735350, (-157,221), root:(943,514),
    state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
    XLookupString gives 1 bytes: (6c) "l"
    XmbLookupString gives 1 bytes: (6c) "l"
    XFilterEvent returns: False

MappingNotify event, serial 41, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyPress event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735356, (-157,221), root:(943,514),
    state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735357, (-157,221), root:(943,514),
    state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

MappingNotify event, serial 42, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyRelease event, serial 42, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735463, (-157,221), root:(943,514),
    state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
    XLookupString gives 1 bytes: (6c) "l"
    XFilterEvent returns: False

KeyRelease event, serial 43, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735470, (-157,221), root:(943,514),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

当我在文本窗口聚焦的情况下按 Function-F1 时,它会键入字母l

背景信息:在东芝 r835 上运行 Lubuntu 11.10。很高兴提供任何可能有用的进一步详细信息。

编辑:

作为比较,当我输入 Function-F12 时,我得到:

KeyPress event, serial 41, synthetic NO, window 0x2200001,
    root 0xae, subw 0x0, time 8369184, (-620,473), root:(480,766),
    state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 41, synthetic NO, window 0x2200001,
    root 0xae, subw 0x0, time 8369344, (-620,473), root:(480,766),
    state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

我想检查一下 F1-F12 键是否有什么特别之处,但看起来至少其中一些键按我的预期工作。

答案1

当您说“Function-F1”时,我假设您的意思是按Fn笔记本电脑角落里那个有趣的小键,然后再按F1键盘左上角的键。并且您正在尝试映射某些笔记本电脑键盘具有的额外键(例如“睡眠”)之一。

看起来这个键实际上是在为您按下多个键。首先,我将Win+L视为一个组合。在 Windows 上,此快捷方式会锁定屏幕,但不会启动屏幕保护程序。

接下来,我看到 XF86ScreenSaver 的映射,这可能意味着 X 正在看到某种睡眠键代码。我猜测笔记本电脑键盘上的那个键实际上是在发送Win+ L+这三个键码Sleep,以方便 Windows 用户快速锁定屏幕并激活屏幕保护程序。

我不确定有什么好方法可以过滤掉这些。这Fn Linux 内核通常看不到键盘上的按键相反,它会更改键盘告诉内核的代码。当我尝试使用 USB RF PowerPoint 遥控器时开发办公室在 Linux 上,我发现启动/停止演示的按钮只是一个发送交替F5Esc关键代码的蹩脚控件。其他按钮也同样蹩脚,比如发送出去b使屏幕空白。

答案2

我用了xbindkeys以此目的。只需运行xbindkeys -k并按下所需的按钮即可。

您应该得到如下输出:

"(Scheme function)"
    m:0x0 + c:244
    XF86Battery

将其粘贴到.xbindkeysrc主目录中的文件中。现在您想用(Scheme Function)您希望执行的命令替换该部分,例如perl /home/my_script.pl运行脚本。

这将使您重新映射键的任务变得更加容易。

相关内容