8
23
2013
11

xmodmap 和 fcitx 配合使用

本文来自依云's Blog,转载请注明。

很早之前,因为有了 fcitx-keyboard,fcitx 能够管理键盘布局了。于是乎,经常干了什么事情之后,xmodmap 的效果就没了。

为了解决这个问题,fcitx 可以在相关事件时自动调用 xmodmap 命令。然后我发现,xmodmap 命令经常会调用很多很多次。我笔记本的配置还好,那个 xmodmap 配置调用多次会有命令失败,所以只要调整下顺序就可以保证键映射正确:

keysym Pause = Print
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock
keycode 107 = Super_R Sys_Req Super_R Sys_Req

这样子日志里会多一些消息,无所谓了,反正桌面日志我只保留最近的一份。

可是,我另外的系统上只需要交换 EscCaps Lock 这两个键:

remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

于是,当 fcitx 调用偶数次 xmodmap 时,这两个键就给交换回去了……实际的效果是,我几乎每次从挂起中恢复,都需要手动执行一次 xmodmap。更烦的是,几乎每次在 gnome-screensaver 里输入密码时,大小写切换键默认是开着的。这时候我得按按 Esc 或者 Caps Lock,或者是输入一个字符后再按它们中的一个。一直以来没找到规律……

最后,终于查阅 xmodmap 手册,写了下面这个简单的脚本:

#!/bin/bash -e

[[ -n $(xmodmap -pk | awk '$1 == 66 && $3 == "(Escape)"') ]] || xmodmap ~/.Xmodmap

如果 Esc 键已经交换过了,就不要再交换一次了。

再设置 fcitx 执行这个我自己的脚本就可以了:

fcitx 中的 xmodmap 配置

2013年8月28日更新:csslayer 最近已经修复了 fcitx 多次调用 xmodmap 的问题,不再需要这样特别的设置了。感谢 csslayer 的及时修正=w=

Category: Linux | Tags: fcitx X Window X window xmodmap | Read Count: 6336
MasterRay 说:
Aug 23, 2013 07:54:17 PM

我用 setxkbmap -option ctrl:nocaps; caps -> ctrl; xcape https://github.com/alols/xcape 在 ctrl 被單獨按時作爲 esc 處理……但是 vim 裏識別 ctrl->esc 的延時有點大,不知怎麼處理

Avatar_small
依云 说:
Aug 23, 2013 08:33:07 PM

我只想换 Esc 和 Caps 啦……

eleven.i386 说:
Aug 23, 2013 08:42:48 PM

喵, 咱想知道这个干嘛用?

Avatar_small
依云 说:
Aug 23, 2013 10:40:02 PM

交换 Esc 和 Caps 键,不要让它在切换键盘布局时或者莫名其妙地失效……

HeYSH 说:
Aug 23, 2013 11:22:06 PM

原来是fcitx搞的鬼!我说怎么有时候Esc突然不好使了呢……

然后开一个终端又变回去了233

csslayer 说:
Aug 25, 2013 11:24:16 AM

ˊ_>ˋ 调用多次什么的应该早就修复了啊

而且我在调用之前都会故意重置一次

Avatar_small
依云 说:
Aug 25, 2013 01:26:19 PM

我从来没发现那个问题修复了,而且我遇到的问题是怎么回事呢?

csslayer 说:
Aug 26, 2013 02:16:03 PM

ˊ_>ˋ 不知道,你的锁屏程序为啥还会触发键盘事件

我今年1月的时候fix的

你在 xkb.c 的 855 行那加个

if (xkbEvent->any.xkb_type == XkbNewKeyboardNotify) {
FcitxLog(INFO, "serial:%d", xkbEvent->new_kbd.serial);
}

来 debug 看看

csslayer 说:
Aug 26, 2013 03:21:18 PM

ˊ_>ˋ 似乎我还是对那个 event 理解有点问题……我换个方式实现一下…

你有空来试试 master…

Avatar_small
依云 说:
Aug 26, 2013 08:57:09 PM

好像现在终于好了耶~我再多用用。

对了,xmodmap 配置文件里扩展下 ~ 吧 :-)

csslayer 说:
Aug 26, 2013 10:39:49 PM

你不加参数的话默认就用 ~/.Xmodmap 了,如果存在的话


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

部分静态文件存储由又拍云存储提供。 | Theme: Aeros 2.0 by TheBuckmaker.com