我想将按键映​​射到 Lubuntu 中的快捷键上,但 xev 的输出让我感到困惑

我想将按键映​​射到 Lubuntu 中的快捷键上,但 xev 的输出让我感到困惑

我使用的是东芝 r835,安装了 Lubuntu。全新安装后,机器开机时按电源按钮没有任何反应。我按照以下方法修复了电源按钮这个建议

我将这些行添加到 ~/.config/openbox/lubuntu-rc.xml

<keybind key="XF86PowerOff">
<action name="Execute">
<command>lubuntu-logout</command>
</action>
</keybind>

这对我来说很有意义。

我想将其他几个键映射到类似的快捷键。例如,当我按 Fn-F1 时,我想锁定屏幕。我想我会添加类似

<keybind key="XF86ScreenSaver">
<action name="Execute">
<command>xscreensaver-command -lock</command>
</action>
</keybind>

但是,当我按下 Fn-F1 时,它会打开 Lubuntu 菜单,就像我按下了该键一样。如果我打开了终端,Super_L它还会输入字母。我想要的快捷方式似乎被忽略了。lxscreensaver-command -lock发生什么事了?为什么我的快捷方式不起作用?

我以为我可以用 xev 解决这个问题,但是 xev 的输出让我感到困惑:

FocusOut event, serial 41, synthetic NO, window 0x2000001,
mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 41, synthetic NO, window 0x2000001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 41, synthetic NO, window 0x0,
    keys:  0   0   0   0   0   64  0   0   0   0   0   0   0   0   0   0   
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

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

KeyPress event, serial 41, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525549, (289,-138), root:(341,155),
    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 0x2000001,
    root 0xae, subw 0x0, time 16525550, (289,-138), root:(341,155),
    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 0x2000001,
    root 0xae, subw 0x0, time 16525639, (289,-138), root:(341,155),
    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 0x2000001,
    root 0xae, subw 0x0, time 16525646, (289,-138), root:(341,155),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

我似乎得到了键码 160,我认为是 XF86ScreenSaver,但也好像我按下了 键Super_Ll键。我认为所有这些输出都来自一次 Fn-F1 按键。这让我很困惑。我怎样才能让 Fn-F1 锁定屏幕,而不是打开 Lubuntu 菜单并输入字母“l”?

答案1

您可以使用 xbindkeys 应用程序完成此操作。打开终端窗口并输入以下内容:

sudo apt-get install xbindkeys

安装后,您需要在主目录中创建两个文件,分别名为:

.xbindkeysrc

此文件将保存你的按键绑定配置

.xbindkeys.noauto

这只是一个空白文件,但当它存在时,它会阻止 Xserverxbindkeys在启动时启动。虽然我们希望它在启动时启动,但我们希望通过启动应用程序自行启动它。这样做的原因是 Xserver 在启动过程中过早地启动它,这有时会导致我们放入文件中的配置.xbindkeysrc不起作用。


现在将以下几行添加到您的.xbindkeysrc文件中

"xscreensaver-command -lock"
c:160

保存文件

现在创建一个小脚本,将xbindkeys其放入我们的启动应用程序中:

打开您最喜欢的文本编辑器并复制并粘贴或键入以下行:

#!/bin/bash

sleep 10
/usr/bin/xbindkeys &

将其保存在您的主目录中xbstart.sh或您想要的任何内容

使其可执行

chmod 755 xbstart.sh

现在只需将该脚本添加到您的启动应用程序并重新启动。


当您登录时,系统xbindkeys会调用它并读取您的.xbindkeysrc文件,然后在后台运行。它会不断监视您的按键,当keycode 160按下按键时,它会在 Xserver 有机会运行xscreensaver-command -lock而不是打开菜单之前将其捕获。

答案2

我添加了这个

<keybind key="C-A-L">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

所以当我执行++Crt时我的 screebscaver 启动了......AltL就像@fossfreedom 给我看

所以我认为你必须做类似的事情

<keybind key="C-F1">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

但首先检查该键绑定是否尚未使用。

...关于您想要的 fn 选项:我将引用维基百科

与其他修饰键(例如 Ctrl、Shift 和 AltGr)不同,键盘内的微控制器通常会根据 Fn 键是否被按下而发出不同的键码。这使得键盘可以模拟全尺寸键盘,因此无需创建专门的键映射;操作系统可以使用为全尺寸键盘设计的标准键映射。由于操作系统没有 Fn 键的概念,因此无法在软件中重新映射该键,这与所有其他标准键盘键不同。

相关内容