ibus 覆盖我的 xmodmap

ibus 覆盖我的 xmodmap

我使用 xmodmap 来切换 Ctrl 和 Alt 键:

~ $> cat .Xmodmap
!
! based on: http://www.emacswiki.org/emacs/SwapControlAltAndCapsLock#toc8
!

!----------------------------------------------------------
! Swap Control and Alt keys, both sides
!----------------------------------------------------------

! First clear all modifiers & control
clear control
clear mod1
clear mod4

! Swap Control_L and Alt_L
keycode  64 = Control_L
keycode  37 = Alt_L Meta_L

! Menu becomes Alt_R Meta_R (AltGr)
! keycode 135 = Alt_R Meta_R

! Define Control_R and Alt_R similar to Control_L and Alt_L
keycode 108 = Control_L
keycode 105 = Alt_L Meta_L

! We need to set keycodes first, as some programs (emacs!) read
! the key names and seem to ignore what's below.
add mod1    = Alt_L Alt_R Meta_L Meta_R
add mod4    = Super_L Super_R
add control = Control_L Control_R


!------------------------------------------
! Caps_Lock becomes an additional BackSpace
!------------------------------------------
! remove lock = Caps_Lock
! keysym Caps_Lock = BackSpaceclear control
! clear mod1
! keycode 37 = Alt_L Meta_L
! keycode 64 = Control_L
! keycode 105 = Alt_R Meta_R
! keycode 108 = Control_R
! add control = Control_L Control_R
! add mod1 = Alt_L Meta_L Alt_R Meta_R

一切正常;但是,当我启动 ibus 时,键映射会被 ibus 取代。有没有办法避免这种情况?

答案1

您是否已尝试过以下操作?

...尝试在 IBus 偏好设置中的“高级”选项卡下启用“使用系统键盘布局”选项。

提示来自http://tots.1o24.org/how-to-stop-ibus-from-removing-your-xmodmap-mappings/

答案2

这不完全是 IBus 的问题(IBus 有很多问题(1),但我不认为这是问题)。

Ubuntu 和任何现代 Linux 一样,使用xkb扩展来定义键盘。xmodmap是一种遗留的东西不保证能用

文档相当缺乏。Arch Linux(一如既往)有一个很好的页面我已经设法调整我的键盘以避免切换,因为 Ubuntu Gnome(2) 中的错误会困扰您。

系统很复杂---我找到了一些帮助这里, 和这里。但理解如何改变修饰符仍然超出了我的技能范围……而且我怀疑周围很少有人理解它(可怕)。


脚注:

(1)键盘一直默认使用错误的布局https://bugs.launchpad.net/ubuntu/+source/gnome-settings-daemon/+bug/1246272, 多得多...

(2)https://bugs.launchpad.net/ubuntu/+source/gnome-settings-daemon/+bug/1218322https://bugs.launchpad.net/gnome-settings-daemon/+bug/1244090

答案3

  • 实际上,其设置 GUI 中隐藏了一个 ibus 选项,用于.xmodmap在方法更改时重新加载。

    dconf write /desktop/ibus/general/use-xmodmap true
    

    我还没有尝试过,但你可以检查/etc/dconf/db/ibus.d/00-upstream-settings可用的选项。

    我正在使用 Xubuntu 16.04,它可能与 14.04 不同。

  • 其他方式

    1. 停止 ibus 使用系统键盘映射

      dconf write /desktop/ibus/general/use-system-keyboard-layout false
      

      或使用ibus-setup

    2. 更改其自身的键映射

      $ cat /usr/share/ibus/keymaps/modifiers 
      keycode 29 = Control_L
      keycode 42 = Shift_L
      keycode 54 = Shift_R
      keycode 56 = Alt_L
      keycode 97 = Control_R
      keycode 100 = Alt_R
      keycode 125 = Super_L
      keycode 126 = Super_R
      keycode 127 = Menu
      

      参考:用于配置路径

      键映射获取 ()

      IBusKeymap * ibus_keymap_get  (const gchar *name);
      
      Get an IBusKeymap associated with the giving name.
      
      This function loads the keymap file specified in name in
       the IBUS_DATA_DIR/keymaps directory.
      
      name :
        The keymap file to be loaded, such as 'us', 'jp'.
      
      Returns :
        An IBusKeymap associated with the giving name; or NULL if failed.
      

答案4

我之前已经遇到过这个问题,最终找到了解决方案,即通过键盘快捷键执行一个有两个作业的命令:

  • 发送Alt+Shift按键至系统(此组合键将改变 IBUS 的输入源)
  • 将我的 xmodmap 配置文件加载到系统键盘映射中

请查看我的帖子以获取有关此解决方案的更多详细信息: http://blog.z1k.pw/?p=60

相关内容