因此,几周前,我让自定义的 XKB 键盘布局可以在 Ubuntu 上使用。我按照这里的说明操作:https: //who-t.blogspot.com/2020/09/user-specific-xkb-configuration-putting.html并下载了它链接到的脚本,这里:https ://gitlab.freedesktop.org/whot/xkblayout运行脚本后(我忘记了我使用的选项的细节以及自动生成的选项有多少,但我稍后会向您展示结果)并编辑生成的~/.config/xkb/symbols/us
文件(可能还有生成的~/.config/xkb/rules/evdev.xml
文件,我不记得我是否必须手动编辑它,或者这是否都是脚本做的),突然我的自定义键盘布局“英语 - Interna-Tina-l(AltGr 死键)”出现在“设置”应用中(选择新键盘布局时,使用“设置”->“键盘”->“输入源”部分->“添加输入源”按钮;我的新布局列在选择“英语(美国)”时显示的变体中)。我选择了布局,它突然就起作用了,我就可以愉快地用自定义键打字了。(我还在键盘设置中将“备用字符键”选项设置为“左超级键”。我认为这比在布局中硬设置更有意义。)
然后,两天前,我的系统崩溃了。我不知道为什么,也不认为这与此有关(我只能说,我试图在 Emacs 中复制和粘贴某些内容,期望它能正常运作,但我的整个计算机却死机了,而且由于它似乎有点热,我想我唯一的选择是 Alt+PrtSc+REISUO 并关闭它,让它冷却一段时间),但关键是我不得不关闭并稍后重新启动。然后,令我惊恐的是,登录 Ubuntu 后,我发现我的自定义键盘布局不再起作用!突然它使用了“英语(国际,带有 AltGr 死键)”布局,我的布局继承自该布局(但进行了重大更改,足以让尝试在此布局或任何其他非我自己的布局上打字令人抓狂)。
不过,最令人困惑的是,如果我进入键盘设置,它仍然显示我正在使用自定义布局!我尝试明确添加“英语(国际,带有 AltGr 死键)”布局作为第二个输入源,这样我就可以在两种布局之间切换(使用 Super+Space),并希望刷新我的系统对我使用哪种布局打字的认识。但是,如果我切换到该布局然后返回到我自己的布局,我仍然像在使用其他布局一样打字!
可能还相关的是,如果我尝试使用setxkbmap -query
来查看我当前正在使用的键盘映射setxkbmap
,它会这样说,即使我肯定根据键盘设置和任务栏指示器使用我的自定义布局:
rules: evdev
model: pc105
layout: us
variant: altgr-intl
(正如您可能已经猜到的那样,“altgr-intl”指的是“英语(国际,带有 AltGr 死键)”布局。)
(可能还相关的是,键盘设置中的“备用字符键”选项仍然设置为“左超级键”,但左超级键实际上不再充当“备用字符键”;相反,右 Alt(AltGr)可以起到这个作用,这是“英语(国际,带有 AltGr 死键)”/“altgr-intl”布局的默认设置。)
另外,如果我尝试使用setxkbmap -variant tina
,我认为这是我应该直接setxkbmap
选择自定义变体的方式,它只会说Error loading new keyboard description
然后退出。哼。
无论如何,在这里我将向您展示我的自定义布局文件,以便您可以自行判断它们是否存在问题,但请记住,在我重新启动计算机之前,这一切都运行正常。我真的不知道出了什么问题。
(请记住,中间注释掉的行是我的键盘布局中曾经有的部分,但无论原因如何,现在不再有它们了;我只是为了完整性才将它们包括在内,因为虽然我无法想象为什么注释掉的行会导致任何问题,但我不知道实际上是什么导致了问题。)
~/.config/xkb/symbols/us
:
// $XKeyboardConfig$
partial alphanumeric_keys modifier_keys
xkb_symbols "tina" {
name[Group1]= "English - Interna-Tina-l (AltGr dead keys)";
include "us(altgr-intl)"
// include "level3(ralt_alt)"
// include "level3(win_switch)"
// key <CAPS> {
// type[Group1]="ONE_LEVEL",
// symbols[Group1] = [ ISO_Level5_Shift ]
// };
// modifier_map Mod3 { ISO_Level5_Shift };
// key.type[Group1]="EIGHT_LEVEL"
key <TLDE> { [ grave, asciitilde, dead_abovedot, dead_tilde ] };
key <CAPS> { [ parenleft, ISO_Next_Group, Greek_lambda, Greek_phi ] };
key <BKSL> { [ parenright, bar, backslash, brokenbar ] };
key <TAB> { [ Tab, ISO_Left_Tab, XF86BackForward, notsign ] };
key <AE01> { [ 1, exclam, onesuperior, U203C ] };
key <AE04> { [ 4, dollar, cent, sterling ] };
key <AE05> { [ 5, percent, EuroSign, yen ] };
key <AE06> { [ 6, asciicircum, onequarter,dead_circumflex ] };
key <AE07> { [ 7, ampersand, onehalf, dead_horn ] };
key <AE08> { [ 8, asterisk, threequarters, dead_ogonek ] };
key <AE09> { [ 9, parenleft, bracketleft, braceleft ] };
key <AE10> { [ 0, parenright, bracketright, braceright ] };
key <AE11> { [ minus, underscore, emdash, endash ] };
key <AB03> { [ c, C, ccedilla, Ccedilla ] };
key <AB04> { [ v, V, copyright, registered ] };
key <AC04> { [ f, F, U017f, U2122 ] };
key <AC10> { [ leftsinglequotemark, leftdoublequotemark, dead_grave, degree ] };
key <AC11> { [rightsinglequotemark, rightdoublequotemark, dead_acute, dead_diaeresis ] };
key <AB08> { [ comma, less, dead_ogonek, dead_caron ] };
key <AB09> { [ period, greater, ellipsis, dead_abovedot ] };
key <AD11> { [ semicolon, colon, enfilledcircbullet, guillemotright ] };
key <AD12> { [ apostrophe, quotedbl, enopencircbullet, guillemotleft ] };
key <I151> { [ Menu ] };
};
~/.config/rules/evdev
:
// generated by xkblayout templates
// Note: no rules file entries are required for for a custom layout
// Include the system 'evdev' file
! include %S/evdev
~/.config/rules/evdev.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xkbConfigRegistry SYSTEM "xkb.dtd">
<!-- generated by xkblayout -->
<xkbConfigRegistry version="1.1">
<layoutList>
<layout>
<configItem>
<name>us</name>
<!-- Keyboard indicator for English layouts -->
<shortDescription>en</shortDescription>
<description>English (US)</description>
<countryList>
<iso3166Id>US</iso3166Id>
</countryList>
<languageList>
<iso639Id>eng</iso639Id>
</languageList>
</configItem>
<variantList>
<variant>
<configItem>
<name>tina</name>
<shortDescription>tina</shortDescription>
<description>English - Interna-Tina-l (AltGr dead keys)</description>
</configItem>
</variant>
</variantList>
</layout>
</layoutList>
</xkbConfigRegistry>
此外,xkblayout 脚本生成了一些空目录:~/.config/xkb/compat
、~/.config/xkb/keycodes/
和~/.config/xkb/types
。
我在 Thinkpad P53 工作站上使用 Ubuntu 24.04。我认为不是任何软件包升级导致了这种情况的发生;事实上,软件更新程序和 Synaptic 软件包管理器(在选择“重新加载”和“标记所有升级”后)几周内都没有显示任何可升级的软件包,这对我来说似乎很奇怪,但这是另一个话题了。(也许 24.04 已经变得足够稳定,不需要不断更新?)