Ubuntu 13.10 1(可能还有上游的 gnome)引入非常烦人的错误:按下键盘布局切换快捷键会使焦点移至某个系统窗口,然后返回到按下快捷键的窗口。某些应用程序有一些与焦点变化相关的操作,例如 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
触发器重置中的某些内容)。
其次,将 xkb 选项添加到 Xorg 配置中:
另一个选择是将以下内容添加到 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
我已经xkb-options
在sources
中设置了org.gnome.desktop.input-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:有讨论建议删除/usr/lib/gnome-settings-daemon-3.0/libkeyboard.so
。至少这可以修复 xkbmap 的一些重置问题(即锁屏后)。
1我使用14.04,但失去焦点的问题仍然没有解决。(Gnome 上游中未经证实的报告)
答案1
为了防止 gnome 重置 X 中的键盘设置,我使用以下命令:
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
这对我有用。
答案2
我和你一样,一直为此而烦恼,但我使用的是 Ubuntu 14.04 (LTS)、Xubuntu、xfce 4.12 和 xkbd(来自 xfce goodies)。Ctrl+Space 可以更改键盘布局,但 Alt+Shift 不行(仅修饰键)。
终于让事情顺利进行——
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 更改键盘布局。
答案3
我刚刚读本文关于屏幕锁定,这可能与此有关。根据文章,屏幕锁定的预期后果是阻止输入设备和操纵区域设置。似乎您有几种选择:
- 停止锁定屏幕,这可能也包括具有类似功能的问候屏幕
- 使用不同的电源管理工具
- 停止使用 ibus 进行 im 切换(也许是 FCITX?)
- 按照描述为屏幕解锁事件创建钩子这里。
在 ubuntu-dev 邮件列表中可以找到有关此事件及其相关事件的有趣讨论:https://lists.ubuntu.com/archives/ubuntu-devel/2013-November/037768.html
答案4
首先,只需执行 setxkbmap:
setxkbmap -layout "us,ru" setxkbmap -option "grp:caps_toggle,grp_led:scroll,compose:ralt"
但它只起作用:
For current session Until Gnome will overwrite it (for example touching something in gconf's org.gnome.desktop.input-sources triggers reset).
至于 Gnome 的“重置”,我不知道。不过我知道如何让每次重启都保持原样,因为我必须对我的 Logitech 鼠标做同样的事情。它有多个按钮,我想以某种方式重新映射,我必须在重启时设置它。
因此,您要做的就是创建一个文本文件。然后在该文本文件中输入:
#!/bin/bash
然后在下方输入你的命令。例如我的鼠标如下所示:
#!/bin/bash
xinput set-button-map "Logitech USB-PS/2 Optical Mouse" 1 2 3 4 5 8 9 6 7 10 11 12 13 14 15 16
接下来您可以将其保存为您想要的任何名称并将其移动到某个地方,例如您的主目录。它必须“永远”留在那里。
然后只需打开您的启动应用程序并将文件添加到您的启动中,然后您不必担心它只持续会话。重新启动计算机就可以了,因为您的设置将通过您刚刚添加的文件返回。