窗口管理器启动时,xorg.conf键盘布局丢失

我正在使用xdm作为显示管理器运行Ubuntu 15.04,并在xorg.conf中定义了自定义多显示器和键盘设置。

xdm正确选取键盘配置,将布局设置为“gb”,并更换大写和ctrl键。

但是,当我启动Window Maker或任何其他显示管理器时,我发现我的键盘布局还原为US。 ctrl / caps键保持交换状态。

的xorg.conf:

Section "Monitor" Identifier "DP1" EndSection Section "Monitor" Identifier "HDMI2" Option "LeftOf" "DP1" Option "Rotate" "left" EndSection Section "Device" Identifier "intel" Driver "intel" # Option "TearFree" "true" Option "Monitor-DP1" "DP1" Option "Monitor-HDMI2" "HDMI2" EndSection Section "InputClass" Identifier "caps as ctrl sun gb keyboard" Driver "evdev" MatchIsKeyboard "yes" Option "XkbLayout" "gb" Option "XkbModel" "sun_type7_usb" Option "XkbRules" "xorg" Option "XkbOptions" "ctrl:swapcaps" EndSection 

从您的评论到其他答案,我可以看到您可能没有运行设置守护程序。 大多数桌面环境(如Gnome,KDE等)都会运行一项服务,以便为您跟踪每个小设置! 但WindowManagers(如WindowMaker,i3,awesome等)通常没有这个function。

如果从~/.xsession或其他自制脚本启动WindowManager,则应为该特定会话设置键盘设置。 在启动WindowManager的行之前 ,可以使用Xsession脚本中的setxkbmap设置键盘布局。

 setxkbmap -model sun_type7_usb -layout gb -option ctrl:swapcaps 

作为奖励信息,您可以从这些命令中获取所有可用的模型,布局等:

 localectl list-x11-keymap-models localectl list-x11-keymap-layouts localectl list-x11-keymap-variants [layout] localectl list-x11-keymap-options 

这些信息主要在ArchWiki上找到,其中有一些关于键盘的更多信息,尽管它可能与Ubuntu略有不同。

  1. 尝试编辑/etc/default/keyboard

     XKBMODEL="sun_type7_usb" XKBLAYOUT="gb" XKBOPTIONS="ctrl:swapcaps" 
  2. 要申请,重启或运行:

     sudo udevadm trigger --subsystem-match=input --action=change 

参考: man keyboard

  • Unity有自己的设置守护进程,负责布局设置,重置任何以前的Xorg设置。

    1. 检查当前设置:

       gsettings get org.gnome.desktop.input-sources xkb-options 
    2. 然后添加ctrl:swapcaps其设置回来。

       gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:swapcaps']" 
    3. 将布局设置为gb

       gsettings set org.gnome.desktop.input-sources sources [('xkb', 'gb')] 
  • 如果它不起作用,请禁用设置守护程序的键盘插件

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

    参考: 使用gnome / unity中的setxkbmap永久设置键盘布局选项

顺便说一下,如果需要,可以使用GUI工具代替命令行,查找dconf-editor

你试试这个:

  gsettings set org.gnome.setting-daemon.keyboard.layout KEY=active VALUE=true 

它可能会以这种方式工作。