问题描述
Ubuntu 13.101(可能还有上游 gnome)引入了 very annoying bug :按下键盘布局切换快捷键会使焦点移到某个系统窗口,然后回到按下快捷键的窗口。一些应用程序有一些动作必然会改变焦点,例如 twitter(在浏览器中)在失去焦点时关闭回复文本输入字段等。所以 ubuntu 的本机键盘切换器不适合我,直到修复。
X内置了切换机制,而且好很多,除了不涉及焦点切换之外,它立即切换(gnome切换器有时也会滞后)。
如何设置 xkbmap 选项,以便在重新启动后保留设置并且不会被 Gnome 重置?
我试过的:
首先,只需执行 setxkbmap:
setxkbmap -layout "us,ru"
setxkbmap -option "grp:caps_toggle,grp_led:scroll,compose:ralt"
但它仅适用于:
-
对于当前会话
-
直到 Gnome 覆盖它(例如触摸 gconf 的
org.gnome.desktop.input-sources
中的某些内容会触发重置)。
其次,在 Xorg 配置中添加 xkb 选项:
另一种选择是将以下内容添加到 xorg 配置:
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "us,ru"
Option "XkbModel" "pc105"
Option "XkbVariant" "pc105"
Option "XkbOptions" "grp:rctrl_toggle,grp_led:scroll"
EndSection
Xorg 理解在启动期间:
[ 33.791] (**) Option "xkb_rules" "evdev"
[ 33.791] (**) Option "xkb_model" "pc105"
[ 33.791] (**) Option "xkb_layout" "us,ru"
[ 33.791] (**) Option "xkb_variant" "pc105"
[ 33.791] (**) Option "xkb_options" "grp:rctrl_toggle,grp_led:scroll"
但是切换配置稍后仍会重置,可能是由 gnome 造成的。
三、gconf
我在 org.gnome.desktop.input-sources
中设置了 xkb-options
和 sources
,但 Gnome 仍然将 xkb 设置为单一英文布局:
$ setxkbmap -print -verbose 10
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules: evdev
model: pc105
layout: us
options: grp_led:scroll
Trying to build keymap using the following components:
keycodes: evdev+aliases(qwerty)
types: complete
compat: complete+ledscroll(group_lock)
symbols: pc+us+inet(evdev)
geometry: pc(pc105)
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete+ledscroll(group_lock)" };
xkb_symbols { include "pc+us+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
四、gconf中的另一个选项
设置 org.gnome.settings-daemon.peripherals.keyboard
对我也不起作用。没有什么变化。
更新 1: There is discussion 建议删除 /usr/lib/gnome-settings-daemon-3.0/libkeyboard.so
。至少这修复了 xkbmap 的一些重置(即在锁定屏幕之后)。
1 我使用的是 14.04,但是失去焦点的问题仍然没有解决。 ( Unconfirmed report in upstream Gnome )
最佳思路
为了防止 gnome 在 X 中重置键盘设置,我使用以下命令:
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
这对我有用。
次佳思路
我和你一样一直对此发疯,但使用的是 Ubuntu 14.04 (LTS)、Xubuntu、xfce 4.12 和 xkbd(来自 xfce goodies)。 Ctrl+Space 更改键盘布局有效,但 Alt+Shift 无效(modifier-only 键)。
终于设法使事情奏效-
1. Run ibus-setup (Keyboard Input Methods application).
2. Goto Advanced tab.
3. Check 'Use system keyboard layout'.
4. Click 'Close'
5. Run xfce4-keyboard-settings (Keyboard application).
6. Goto Layout tab.
7. Uncheck 'Use system defaults'
8. Select 'Keyboard model' (typically 'Generic 105-key (Intl) PC' will do)
9. Set 'Change layout option' to your required switching keys combination (typically Alt+Shift will do).
10. Add languages to 'Keyboard layout'.
11. Click 'Close'.
12. Restart the computer
你完成了!使用 Alt+Shift 更改键盘布局。