设置 fn + 箭头代表 'home' 和 'end'

设置 fn + 箭头代表 'home' 和 'end'

我想为 fn+right/left 键添加设置功能,使其类似于 Mac 中的“home”和“end”。我并不是要替换“home”和“end”按钮,只是添加另一个“home”/“end”键。这样做的好处是可以编写/修改文本。我经常使用箭头键,也使用 home 和 end 按钮,但为什么要跳转到一个全新的按钮呢?我的左手已经靠近 fn(功能)键了,随时可以按下 control 或 shift。

我该如何设置?

谢谢。

答案1

我绝对明白你为什么要这么做!以下是我所做的事情:

启动终端并运行“xev”。将鼠标光标放在事件测试器窗口上,然后按 fn+right/left。您应该得到如下读数:

    KeyRelease event, serial 36, synthetic NO, window 0x5200001,
root 0xb2, subw 0x0, time 89989888, (98,124), root:(1007,175),
state 0x0, keycode 171 (keysym 0x1008ff17, XF86AudioNext), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

这是我的键盘和 fn+right。查找键码 - 这里是 171。

现在去编辑主目录中的 .bashrc 文件。它是隐藏的,因此在 Nautilus 中按 Ctrl+H 来显示。然后添加几行

    xmodmap -e "keycode 171 = Home"
    xmodmap -e "keycode xxx = End"

其中,用获得的密钥代码替换 171 和 xxx。然后保存并关闭文件。关闭所有终端,打开一个,您就可以开始了!

现在,有一个缺点:你必须在每次启动时激活它。你只需打开一个终端即可,仅此而已。你可以立即将其再次关闭。或者你可以尝试修复它以自动执行此操作,如这里所述。我只是使用快捷方式运行终端,然后将其杀死……

答案2

如果您使用的是 Ubuntu+Gnome,并且在输入或xev时没有显示任何内容- 那么您可能像我一样在 Gnome 会话中有一个拦截器。此外,我的硬件笔记本电脑键盘显示和播放器/音乐图标的左键和右键 - 这意味着我的硬件键盘发送和。Fn+LeftFn+Right"backward""forward"keycode 173Fn+Leftkeycode 171Fn+Right

禁用 gnome 会话监听器

您可以使用 UI 禁用监听器dconf-editor

安装并运行dconf-editor

转到以下路径并禁用并放入Use default value空数组。[]Custom value

为了Fn+Left

/org/gnome/settings-daemon/plugins/media-keys/previous-static

为了Fn+Right

/org/gnome/settings-daemon/plugins/media-keys/next-static

应用两个路径的更改并关闭dconf-editor

使用 xmodmap 应用软件按钮映射

现在应用自定义处理程序Fn+Left

xmodmap -e "keycode 171 = End"

在此设置之前,对我来说xmodmap -pk | grep -i '171'

171     0x1008ff17 (XF86AudioNext)  0x0000 (NoSymbol)   0x1008ff17 (XF86AudioNext)  0x0000 (NoSymbol)   0x1008ff17 (XF86AudioNext)

这样设置之后:

171     0xff57 (End)    0x0000 (NoSymbol)   0xff57 (End)    0x0000 (NoSymbol)   0xff57 (End)

应用自定义处理程序Fn+Right

xmodmap -e "keycode 173 = Home"

xmodmap -pk | grep -i '173'

173     0x1008ff16 (XF86AudioPrev)  0x0000 (NoSymbol)   0x1008ff16 (XF86AudioPrev)  0x0000 (NoSymbol)   0x1008ff16 (XF86AudioPrev)

后:

173     0xff50 (Home)   0x0000 (NoSymbol)   0xff50 (Home)   0x0000 (NoSymbol)   0xff50 (Home)

现在它对我来说已经起作用了。但是结果不是永久的,重启后你必须再次执行此操作。一些用于执行此操作的启动脚本效果不佳,因为xmodmap必须在一段时间后(当它准备好时)才初始化。

使用 xkb 应用软件按钮映射

事实证明它xmodmap已经过时并且不再在 Gnome 中使用。

永久解决方案就是使用xkb

fn_mod在(sudo 需要)创建符号文件,/usr/share/X11/xkb/symbols/内容如下:

// /usr/share/X11/xkb/symbols/inet
// key <I171>   {      [ XF86AudioNext         ]       };
// key <I173>   {      [ XF86AudioPrev         ]       };
//
// /usr/share/X11/xkb/symbols/pc
// key <HOME> { [  Home         ]   };
// key  <END> { [  End          ]   };
//
// make Fn+Left (keycode 171) act as Home
partial modifier_keys
xkb_symbols "left_as_home" {
    key <I171> { [ End ] };
};

// make Fn+Right (keycode 173) act as End
partial modifier_keys
xkb_symbols "right_as_end" {
    key <I173> { [ Home ] };
};

请备份以下文件,以免损坏它们:

/usr/share/X11/xkb/rules/evdev.xml
/usr/share/X11/xkb/rules/evdev
/usr/share/X11/xkb/rules/evdev.lst

evdev.xml在( <xkbConfigRegistry>-> <optionList>->)中添加以下内容:

    <group allowMultipleSelection="true">
      <configItem>
        <name>fn_mod</name>
        <description>Fn key behavior</description>
      </configItem>
      <option>
        <configItem>
          <name>fn_mod:left_as_home</name>
          <description>Fn+Left (aka XF86AudioPrev) act as Home</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>fn_mod:right_as_end</name>
          <description>Fn+Right (aka XF86AudioNext) act as End</description>
        </configItem>
      </option>
    </group>

将以下内容添加到evdev(查找行! option = symbols并附加到下一行):

  fn_mod:left_as_home  = +fn_mod(left_as_home)
  fn_mod:right_as_end  = +fn_mod(right_as_end)

将以下内容添加到evdev.lst(查找行! option并附加到下一行):

  fn_mod               Fn key behavior
  fn_mod:left_as_home  Fn+Left (aka XF86AudioPrev) act as Home
  fn_mod:right_as_end  Fn+Right (aka XF86AudioNext) act as End

evdev.xml更改将在 中创建 UI 调整gnome-tweaks。要检查/启用此功能,gnome-tweaks请转到Keyboard & Mouse-> Additional Layout Options-> Fn key behavior

最后重新启动会话并检查终端。

$ setxkbmap -query
rules:      evdev
model:      pc105
layout:     us,ru,us
variant:    ,,
options:    fn_mod:left_as_home,fn_mod:right_as_end
$ setxkbmap -print
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+ru:2+us:3+inet(evdev)+fn_mod(left_as_home)+fn_mod(right_as_end)" };
    xkb_geometry  { include "pc(pc105)" };
};

相关内容