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


28

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"

但这仅适用于:

  1. 对于当前会话
  2. 直到Gnome覆盖它为止(例如,org.gnome.desktop.input-sources重置gconf的触发器中的某些内容)。

其次,向Xorg配置添加xkb选项:

另一种选择是在xorg config中添加以下内容:

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-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)" };
};

第四,gconf中的另一个选项

在此处输入图片说明

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

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

1我使用14.04,但是仍然无法解决失去焦点的问题。(上游Gnome中未经确认的报告


您是否尝试过在gnome中正确设置布局,然后将这两个setxkbmap命令添加到您的~/.profile?这样,它们将在您每次登录时运行,并且由于Gnome中存在相同的设置,因此如果重置,它不应更改任何内容。
terdon 2014年

1
@terdon即使在屏幕锁定后也会重置。并且它将重置为“仅使用,不切换”状态,而不重置为中定义的设置org.gnome.desktop.input-sources
kolen 2014年

奇怪。您确定使用的是Gnome,而不是Unity?您是否尝试通过普通GUI而不是通过更改设置dconf-editor
terdon

@terdon是的,它是统一的,但是它会丢失gnome的东西,例如gnome-settings-daemon,它可能会重置键盘映射。
kolen 2014年

因此,您是否尝试过通过Unity GUI设置正确的设置?
terdon

Answers:


19

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

gsettings set org.gnome.settings-daemon.plugins.keyboard active false

这对我有用。


4
我在Ubuntu 14.04上尝试了此操作,但没有执行任何操作。您是否有任何解释:应该如何运作?
Nickolai Leschov

2
在14
04年

2
在尝试了所有其他方法之后,在16.04中为我工作。
莱昂纳多·卡斯特罗

1
我发现在17.04中工作的唯一方法。
Cnly

1
请记住,Ubuntu实际上也已经创建了一个unity-settings-daemon,但是现在他们又回到了Gnome,这可能会继续起作用。
dragon788

6

我和您一样一直在为此烦恼,但是使用Ubuntu 14.04(LTS),Xubuntu,xfce 4.12和xkbd(来自xfce好东西)。Ctrl +空格键可以更改键盘布局,但是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更改键盘布局。


1
您为什么特别建议xfce4-keyboard-settings在问题中使用gnome / unity寻求帮助?
Nickolai Leschov

2

我刚刚阅读了有关锁屏的文章,这可能是相关的。根据这篇文章,锁屏具有阻止输入设备和操作语言环境的预期结果。似乎您有几种选择:

  1. 停止锁定屏幕,可能包括问候屏,它也具有类似的功能
  2. 使用不同的电源管理工具
  3. 停止使用ibus进行即时切换(也许是FCITX?)
  4. A如对屏幕解锁事件创建一个钩这里

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


1

用户wof在Ubuntu错误跟踪器中的变通办法,对于使用gxkb的 Ubuntu 14.10 :

https://bugs.launchpad.net/gnome-settings-daemon/+bug/1244090/comments/39

此变通办法适用于Ubuntu 14.10:

  • 在设置->文本输入中删除所有输入源,仅保留英文
  • 安装gxkb(布局切换器):sudo apt-get安装gxkb
  • 通过gnome-tweak-tool将gxkb添加到启动应用程序
  • 在〜/ .config / gxkb中设置gxkb热键(默认值为alt_shift,但在14.10中不起作用。ctrl_shift正常)

ps gxkb的新版本具有适用于ubuntu的指示符。可以通过ppa:zen-root / gxkb-stable安装


(尚未尝试)
kolen 2015年

E:无法找到软件包gxkb
e18r 2015年

0

首先,只需执行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

接下来,您可以将其保存为所需的名称,然后将其移动到主目录等位置。它必须“永远”呆在那里。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.