将键盘布局设置为 de,变体为 us

将键盘布局设置为 de,变体为 us

我想将键盘布局设置为“de”变体“us”。在我的 ubuntu 15.10 上,使用 unity 命令可以很好地完成此操作setxkbmap de us

问题是,每次启动/从睡眠状态唤醒后,我都必须运行此命令。如何配置我的系统以永久使用上述布局?我知道我可以使用某种形式的自动启动(unity 或 .xinitrc),但这在挂起后不起作用。我还阅读了有关在 org.gnome.desktop.input-sources 中设置布局的信息这里,但是使用字符串“de+us”不会产生预期的结果。

有任何想法吗?

答案1

请注意访问此页面的其他搜索者:这显然是de-usUnity 环境中布局所特有的,因为由于某种原因,它缺少特定配置文件中的条目。


Ubuntu 中键盘数据的存储方式

在 Ubuntu 中,有一个名为 的文件夹/usr/share/X11/xkb/symbols,其中包含几个子文件夹以及一些文本文件,每个文件代表不同的布局。这些布局中的大多数(如果不是全部)都有许多变体。我们感兴趣的是键盘us的变体de,因此我们打开文件de并向下滚动到以下条目(对我来说它位于第 686 行,但我不在 15.10 上)。

partial alphanumeric_keys
xkb_symbols "us" {
    include "us"

    name[Group1]="German (US keyboard with German letters)";

    key <AC01> { [           a,          A, adiaeresis, Adiaeresis ] };
    key <AC02> { [           s,          S,     ssharp,     ssharp ] };
    key <AC10> { [   semicolon,      colon, odiaeresis, Odiaeresis ] };
    key <AC11> { [  apostrophe,   quotedbl, adiaeresis, Adiaeresis ] };
    key <AD03> { [           e,          E,   EuroSign,   EuroSign ] };
    key <AD07> { [           u,          U, udiaeresis, Udiaeresis ] };
    key <AD09> { [           o,          O, odiaeresis, Odiaeresis ] };
    key <AD11> { [ bracketleft,  braceleft, udiaeresis, Udiaeresis ] };
    key <AE03> { [           3, numbersign,    section,    section ] };
    key <AE11> { [       minus, underscore,     ssharp,   question ] };

    include "level3(ralt_switch)"
};

这将键盘定义为与标准 QWERTY 键盘相同us,但进行了以下更改:

  • 主行上的 1 (A)、2 (S)、10 (;) 和 11 (') 键
  • 顶行的 3 (E)、7 (U)、9 (O) 和 11 ([) 键
  • 数字行上的 3 (3) 和 11 (-) 键
  • 用于访问特殊字符的 ALT 键

我们检查了它的格式是否正确,没有缺少任何括号或任何东西,结果确实如此。这就是为什么setxkbmap de us成功了,即使只是暂时的。我们稍后会从这个条目中复制描述。

Ubuntu 如何访问这些数据

Ubuntu 有一个注册表设置,用于保存用户想要的键盘名称。但是,我们必须修复另一个配置文件中的条目,Ubuntu 才会接受我们首选的键盘。需要修改的文件是/usr/share/X11/xkb/rules/evdev.xml

该文件有三个主要部分:

  • 已知键盘型号的列表(描述按钮的物理排列)
  • 已知键盘布局列表(描述字符到按键的逻辑分配)
  • 选项列表(描述布局可能的修改)

我们需要以 root 身份打开它,以便稍后保存。由于我们想使用布局us的变体de,因此文件的相关部分将是第二部分 - 具体来说,我们修改德语布局(在我的副本中,这从第 3176 行开始)。

<layout>
  <configItem>
    <name>de</name>

    <shortDescription>de</shortDescription>
    <description>German</description>
    <languageList>
      <iso639Id>ger</iso639Id>
    </languageList>
  </configItem>
  <variantList>
    <variant>
      <configItem>
        <name>us</name>
        <description>German (US keyboard with German letters)</description>
      </configItem>
    </variant>

注意本节的结构。每个布局都包含一个配置和多个变体。我variant在标签 opening 后立即添加了一个新条目(最后六行),variantList其内容与我在上面的键盘数据文件中找到的内容相匹配。

保存后,更改注册表设置以选择我们新添加的条目:

gsettings set org.gnome.desktop.input-sources sources [('xkb', 'de+us')]

我发现需要注销并重新登录才能使此更改生效,但此后,布局如人们希望的那样工作,包括在挂起/恢复循环中存活下来。

答案2

添加新脚本/etc/pm/sleep.d,并命名20_my-layout

case "${1}" in
    resume|thaw)
        DISPLAY=:0.0 ; export DISPLAY
        setxkbmap de us
;;
esac

来源: 如何在从暂停状态恢复后执行命令?

答案3

TL:DR 添加命令

setxkbmap de us

在文件~/.gnomerc和中~/.zshrc

在我实施Aoeuid提供的详细解决方案在此期间,我偶然发现'de(us)'文件中已经存在的 -Section/usr/share/X11/xkb/symbols/de包含与 Aoeuid 解决方案中列出的几乎相同的配置。

本节也是解决方案的一部分,描述如下https://unix.stackexchange.com/a/589273

关于我的环境

Debian 11.2.0 (Bullseye), 64-bit
GNOME Version 3.38.5
Windowing System X11

相关内容