我想为 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+Left
Fn+Right
"backward"
"forward"
keycode 173
Fn+Left
keycode 171
Fn+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)" };
};