我正在尝试在 Ubuntu 16.10 上将 Insert 键重新映射到 End 并将 shift+Insert 重新映射到 Home。灵感来自将 Super+[左|右] 映射到 Home/End和其他一些资源我制作了以下 mysymbols 文件:
partial modifier_keys
xkb_symbols "insert_end_home" {
key <INS> {[ End, Home ]};
};
它适用于End
,但 shift+Insert 不会产生该Home
函数。我怎样才能解决这个问题?
编辑
按照@dirkt的建议进行修改后,xmodmap
我仍然只能得到 Home 或 End 。这是xev
我按下Insert
和 然后按下 时的输出shift+Insert
。确实有一个FocusOut
事件,但这意味着什么呢?
KeyPress event, serial 37, synthetic NO, window 0x3800001,
root 0xed, subw 0x0, time 56790713, (-342,308), root:(439,360),
state 0x0, keycode 118 (keysym 0xff50, Home), same_screen YES,
XKeysymToKeycode returns keycode: 110
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x3800001,
root 0xed, subw 0x0, time 56790753, (-342,308), root:(439,360),
state 0x0, keycode 118 (keysym 0xff50, Home), same_screen YES,
XKeysymToKeycode returns keycode: 110
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 37, synthetic NO, window 0x3800001,
root 0xed, subw 0x0, time 56796591, (-342,308), root:(439,360),
state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 37, synthetic NO, window 0x3800001,
root 0xed, subw 0x0, time 56796755, (-342,308), root:(439,360),
state 0x1, keycode 118 (keysym 0xff57, End), same_screen YES,
XKeysymToKeycode returns keycode: 115
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x3800001,
root 0xed, subw 0x0, time 56796811, (-342,308), root:(439,360),
state 0x1, keycode 118 (keysym 0xff57, End), same_screen YES,
XKeysymToKeycode returns keycode: 115
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x3800001,
root 0xed, subw 0x0, time 56797003, (-342,308), root:(439,360),
state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
FocusOut event, serial 37, synthetic NO, window 0x3800001,
mode NotifyNormal, detail NotifyNonlinear
PropertyNotify event, serial 37, synthetic NO, window 0x3800001,
atom 0x168 (_NET_WM_STATE), time 56802723, state PropertyNewValue
另外,这里是输出xmodmap -pm
:
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
答案1
尝试写入xkb
文件很困难,请xmodmap
改为使用。
登录时自动加载映射的标准名称是~/.Xmodmap
,某些显示管理器是开箱即用的,对于某些显示管理器,您必须修改登录脚本。
不要尝试xmodmap
显式地使用 in或类似的内容,如果您通过等.profile
方式登录,这会给您带来麻烦。ssh
编辑:正如 中所解释的man xmodmap
,你不能keycode
用这种方式描述组合Alt,只能用Shift和 来描述组合Mode_Switch:
一个键最多可以附加八个键符,但是最后四个键符不用于任何主要的 X 服务器实现。当没有修饰键与此键一起按下时,使用第一个键符号,第二个键符号与 Shift 键一起按下,第三个键符号在 Mode_switch 键与此键一起使用时使用,第四个键符号在同时使用 Mode_switch 和 Shift 键时使用。
对于我的键盘,我已分配Mode_Switch给左侧的 Windows 键(恰好Super_L
在我的键盘上);
keysym Super_L = Mode_switch
因此,要么将一些您不使用的键指定为Mode_Switch,要么阅读如何使用xkbd
单词。这XKB 配置指南不可靠可能有帮助。