我想将键盘布局设置为“de”变体“us”。在我的 ubuntu 15.10 上,使用 unity 命令可以很好地完成此操作setxkbmap de us
。
问题是,每次启动/从睡眠状态唤醒后,我都必须运行此命令。如何配置我的系统以永久使用上述布局?我知道我可以使用某种形式的自动启动(unity 或 .xinitrc),但这在挂起后不起作用。我还阅读了有关在 org.gnome.desktop.input-sources 中设置布局的信息这里,但是使用字符串“de+us”不会产生预期的结果。
有任何想法吗?
答案1
请注意访问此页面的其他搜索者:这显然是de-us
Unity 环境中布局所特有的,因为由于某种原因,它缺少特定配置文件中的条目。
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