为键盘配置设置 debconf 选择失败......布局最终为阿富汗语

Pet*_*ter 6 keyboard-layout ubuntu-12.04 debconf

我有一台我网络安装的机器,设置了德语键盘,但它忽略了我的设置,并且安装了美式键盘。我确定我设置了它,因为如果我不设置它,它会以交互方式询问,但我想要无人值守安装。

这是 Ubuntu 12.04.3

所以现在之后,我想编写一个修复程序以使其成为德语键盘。

因此,首先我在一台机器上以交互方式设置设置,然后读取设置以查看它们的值,然后在另一台机器上,我设置选项:

debconf-set-selections <<< "keyboard-configuration keyboard-configuration/altgr select The default for the keyboard layout"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/compose select No compose key"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/ctrl_alt_bksp boolean false"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/layoutcode string de"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/layout select German"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/modelcode string pc105"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/model select Generic 105-key (Intl) PC"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/optionscode string "
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/store_defaults_in_debconf_db boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/switch select No temporary switch"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/toggle select No toggling"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/unsupported_config_layout boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/unsupported_config_options boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/unsupported_layout boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/unsupported_options boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/variantcode string "
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/variant select German"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/xkb-keymap select "
Run Code Online (Sandbox Code Playgroud)

然后我显示选择:

debconf-show keyboard-configuration
Run Code Online (Sandbox Code Playgroud)

这是输出:

* keyboard-configuration/modelcode: pc105
* keyboard-configuration/unsupported_config_options: true
* keyboard-configuration/unsupported_config_layout: true
* keyboard-configuration/toggle: No toggling
* keyboard-configuration/compose: No compose key
* keyboard-configuration/layout: German
* keyboard-configuration/xkb-keymap:
* keyboard-configuration/variant: German
  debian-installer/console-setup-udeb/title:
* keyboard-configuration/switch: No temporary switch
* keyboard-configuration/unsupported_options: true
  console-setup/detect:
  console-setup/detected:
* keyboard-configuration/altgr: The default for the keyboard layout
* keyboard-configuration/ctrl_alt_bksp: false
* keyboard-configuration/unsupported_layout: true
* keyboard-configuration/variantcode:
* keyboard-configuration/model: Generic 105-key (Intl) PC
* console-setup/ask_detect: false
* keyboard-configuration/layoutcode: de
  keyboard-configuration/other:
* keyboard-configuration/store_defaults_in_debconf_db: true
* keyboard-configuration/optionscode:
Run Code Online (Sandbox Code Playgroud)

然后重新配置包以使系统实际使用设置,我运行:

DEBIAN_FRONTEND=noninteractive dpkg-reconfigure keyboard-configuration
Run Code Online (Sandbox Code Playgroud)

这是输出:

update-initramfs: deferring update (trigger activated)
Run Code Online (Sandbox Code Playgroud)

然后为了检查发生了什么,我再次检查了设置:

debconf-show keyboard-configuration
Run Code Online (Sandbox Code Playgroud)

这是输出:

* keyboard-configuration/modelcode: a4techKB21
  keyboard-configuration/unsupported_config_options: true
  keyboard-configuration/unsupported_config_layout: true
* keyboard-configuration/toggle: Caps Lock
* keyboard-configuration/compose: No compose key
* keyboard-configuration/layout: Afghani
* keyboard-configuration/xkb-keymap: af
* keyboard-configuration/variant: Afghani
  debian-installer/console-setup-udeb/title:
* keyboard-configuration/switch: No temporary switch
  keyboard-configuration/unsupported_options: true
  console-setup/detect:
  console-setup/detected:
* keyboard-configuration/altgr: The default for the keyboard layout
* keyboard-configuration/ctrl_alt_bksp: false
  keyboard-configuration/unsupported_layout: true
* keyboard-configuration/variantcode: ,
* keyboard-configuration/model: A4Tech KB-21
* console-setup/ask_detect: false
* keyboard-configuration/layoutcode: us,af
  keyboard-configuration/other:
* keyboard-configuration/store_defaults_in_debconf_db: true
* keyboard-configuration/optionscode: grp:caps_toggle,grp_led:scroll
Run Code Online (Sandbox Code Playgroud)

为什么哦为什么它把它变成了阿富汗语布局(在每个问题的字母列表中首先选择)?为什么它不能只使用我的设置,或者至少忽略它们,而不是使用虚假值设置它们!

过去,我使用了更像这样的东西,但使用了其他东西(如 postfix 等):

apt-get install --reinstall keyboard-configuration
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,使用键盘配置,它的作用与

DEBIAN_FRONTEND=noninteractive dpkg-reconfigure.
Run Code Online (Sandbox Code Playgroud)

我还将交互式设置的机器与重新配置之前用上面脚本编写的机器进行了比较,整个机器的 debconf 是相同的,除了“grub-pc grub-pc/install_devices ...”有一个 id,显然不是相关的。如果我在交互式安装的机器上运行脚本方法,它不会重置为阿富汗尼语,因此尽管 debconf 相同,但系统的行为却有所不同。

这个问题有方法解决吗?

我已经看到:

“dpkg-reconfigure keyboard-configuration”实际上是做什么的? http://ubuntuforums.org/showthread.php?t=1793250 自动化 dpkg-reconfigure tzdata

Bad*_*ers 5

最后这是解决方案,它很简单,但我花了两天时间才找到它:(

\n

解决方案一:

\n
    \n
  • 这将用于在您keyboard-configuration第一次安装时配置键盘,或者当您已经安装键盘并且想要再次重新配置它时。
  • \n
  • 这也可以在里面工作chroot:)
  • \n
  • 你不需要使用debconf-set-selections再使用了。
  • \n
\n
DEBIAN_FRONTEND=noninteractive apt-get install -y console-setup keyboard-configuration\n    \n# this is the trick, you have to change the default keyboard config before \n# running dpkg-reconfigure or you will always end with what it is configured\n#  in /etc/default/keyboard, so for a french keyboard for example:\necho \'\nXKBMODEL="pc105"\nXKBLAYOUT="fr"\nXKBVARIANT=""\nXKBOPTIONS=""\n    \nBACKSPACE="guess"\n\' > /etc/default/keyboard\n    \ndpkg-reconfigure --frontend noninteractive keyboard-configuration\n
Run Code Online (Sandbox Code Playgroud)\n

就这样。请注意,在 chroot 中不会设置键盘,但会在下次重新启动时进行配置。

\n

我用debian 10、debian testing(11)、debian SID、ubuntu 16.04、ubuntu 18.04、ubuntu 20.04测试了上述方法,全部安装了debootstrap。

\n

您可以通过以下方式查看支持的选项列表(XKBLAYOUTXKBVARIANT...):

\n
less /usr/share/X11/xkb/rules/xorg.lst\n
Run Code Online (Sandbox Code Playgroud)\n

dpkg-reconfigure如果 /etc/default/keyboard 中存在任何错误,将使用其默认us键盘,因此请确保仅输入受支持的选项(例如,ubuntu 16没有布局azerty的变体fr,因此如果您输入 azerty,则将dpkg-reconfigure恢复为默认值)我们的键盘!)

\n

提示:如果您尝试连接 vnc(例如 qemu vnc),那么您绝对需要使用 Tigervnc 客户端才能使键盘按需要工作,所有其他 vnc 客户端都会损坏。如何使用 VNC 客户端将键盘布局设置为 KVM (libvirt)

\n

解决方案2:

\n

使用 systemd 的操作系统的另一个简单解决方案是:

\n
localectl set-keymap fr \nlocalectl set-x11-keymap fr\n
Run Code Online (Sandbox Code Playgroud)\n

注意:这不能在 chroot 内部使用,因为它需要活动\xc2\xa0dbus\xc2\xa0连接。

\n

解决方案3:

\n

使用安装程序

\n
# let\'s create  multiple keyboard config\necho \'\nXKBMODEL="pc105"\nXKBLAYOUT="us"\nXKBVARIANT=""\nXKBOPTIONS=""\n\nBACKSPACE="guess"\n\' > /etc/default/keyboard.ENbadr\n\necho \'\nXKBMODEL="pc105"\nXKBLAYOUT="fr"\nXKBVARIANT="azerty"\nXKBOPTIONS=""\n\nBACKSPACE="guess"\n\' > /etc/default/keyboard.FRbadr\n\n#activate the lang you want with\nsetupcon FRbadr\n\n
Run Code Online (Sandbox Code Playgroud)\n

但这在 chroot 中不起作用。

\n