在 gnome/unity 中使用 setxkbmap 永久设置键盘布局选项

kol*_*len 32 gnome keyboard-layout unity 13.10 14.04

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"
Run Code Online (Sandbox Code Playgroud)

但它仅适用于:

  1. 对于当前会话
  2. 直到 Gnome 将其覆盖(例如,触摸 gconforg.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
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

但是切换配置稍后仍会重置,可能是 gnome。

三、gconf

在此处输入图片说明

xkb-optionssources在集org.gnome.desktop.input-sources,但侏儒仍设置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)" };
};
Run Code Online (Sandbox Code Playgroud)

四、gconf中的另一个选项

在此处输入图片说明

设置org.gnome.settings-daemon.peripherals.keyboard也不适用于我。没有什么改变。

更新 1有讨论建议删除/usr/lib/gnome-settings-daemon-3.0/libkeyboard.so. 至少这修复了 xkbmap 的一些重置(即锁定屏幕后)。

1我使用 14.04,但仍然没有解决失去焦点的问题。(上游 Gnome 中未经证实的报告

小智 21

为了防止 gnome 在 X 中重置键盘设置,我使用以下命令:

gsettings set org.gnome.settings-daemon.plugins.keyboard active false
Run Code Online (Sandbox Code Playgroud)

这对我有用。

  • 我在 Ubuntu 14.04 上试过这个,但它什么也没做。你有什么解释:这应该如何工作? (4认同)
  • 在 14.04 为我工作 (2认同)
  • 在尝试了其他一切之后,在 16.04 中为我工作。 (2认同)

Oro*_*ort 6

我和你一样对此很着迷,但使用 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
Run Code Online (Sandbox Code Playgroud)

你完成了!使用 Alt+Shift 更改键盘布局。


小智 2

我刚刚读了这篇关于屏幕锁定的文章,可能与之相关。根据该文章,屏幕锁定的预期结果是阻止输入设备和操纵区域设置。看来你有几个选择:

  1. 停止锁定屏幕,这可能还包括具有类似功能的问候语屏幕
  2. 使用不同的电源管理工具
  3. 停止使用 ibus 进行即时切换(也许是 FCITX?)
  4. 按照此处所述为屏幕解锁事件创建挂钩。

关于此事件和相关事件有一个有趣的讨论,可以在 ubuntu-dev 邮件列表中找到:https ://lists.ubuntu.com/archives/ubuntu-devel/2013-November/037768.html


小智 -1

首先,只需执行 setxkbmap:

setxkbmap -布局“us,ru” setxkbmap -选项“grp:caps_toggle,grp_led:滚动,compose:ralt”

但它仅有效:

For current session
Until Gnome will overwrite it (for example touching something in gconf's org.gnome.desktop.input-sources triggers reset).
Run Code Online (Sandbox Code Playgroud)

至于 Gnome“重置”它,我不知道。我确实知道如何才能在每次重新启动时保持不变,因为我必须对我的罗技鼠标执行完全相同的操作。它有多个按钮,我想以某种方式重新映射,并且我必须在重新启动时进行设置。

所以你要做的就是创建一个文本文件。然后在该文本文件中输入:

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

并在其正下方输入您的命令。例如我的鼠标如下所示:

#!/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
Run Code Online (Sandbox Code Playgroud)

接下来,您可以将其保存为您想要的任何名称,并将其移动到某个位置,例如您的主目录。它必须“永远”留在那里。

然后只需打开您的启动应用程序并将文件添加到您的启动中,然后您不必担心它仅在会话中持续。重新启动计算机就可以了,因为您的设置将通过刚刚添加的文件恢复。