将插入键映射到 End/Home

将插入键映射到 End/Home

我正在尝试在 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 配置指南不可靠可能有帮助。

相关内容