我有一台我使用德语键盘设置的机器,但是它忽略了我的设置,并且使用美式键盘安装。 我确定我设置了它,因为如果我没有设置它,它交互式地询问,但我想要一个无人值守的安装。
这是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 "
然后我显示select:
debconf-show keyboard-configuration
这里是输出:
* 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:
然后重新configuration包使系统实际使用设置,我运行:
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure keyboard-configuration
这里是输出:
update-initramfs: deferring update (trigger activated)
然后检查发生了什么,我再次检查设置:
debconf-show keyboard-configuration
这里是输出:
* 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
为什么哦为什么它把它变成一个阿富汗人的布局(每个问题在字母表中首先select)? 为什么不能使用我的设置,或者至less忽略它们,而不是将它们设置为假的值!
而在过去,我已经使用了更多这样的东西,而是与其他东西(如后缀等):
apt-get install --reinstall keyboard-configuration
但在这种情况下使用键盘configuration,它和
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure.
在重新configuration之前,我还将交互式设置的机器与上面的脚本相比较,整个机器的debconf除了具有一个id的“grub-pc grub-pc / install_devices …”之外是相同的,显然不是相关。 如果我在交互式安装的机器上运行脚本化的方法,它不会重置为阿富汗人,所以尽pipe有相同的debconf,系统也会有所不同。
有针对这个的解决方法吗?
我已经看到:
“dpkg-reconfigure keyboard-configuration”实际上做了什么? http://ubuntuforums.org/showthread.php?t=1793250 automate dpkg-reconfigure tzdata
我明白你对这件事的失望。 下面是我在类似的背景下(stream浪汉的规定)如何处理这个问题,所以希望这一天能够到来。
关键是使用debconf-utils来描述configuration。 第一:
sudo apt-get install debconf-utils
你可以看到当前的configuration:
debconf-get-selections | grep keyboard-configuration
处理所有这些configuration选项可能有点乏味,所以您可能想要在一台机器上执行交互式dpkg-reconfigure keyboard-configuration ,就像在build议的解决scheme中那样。 然后,使用上面的命令将新设置导出到一个新文件,比如file.conf 。
将文件传输到需要configuration的机器,并:
debconf-set-selections < file.conf dpkg-reconfigure keyboard-configuration -f noninteractive
就是这样。
奖金: Ansible任务
如果你使用Ansible,这里是我的这个剧本的一部分:
- name: Configuring keyboard [creating file] template: src=templates/deb-keyboard.conf.j2 dest=/home/vagrant/.deb-keybard.conf register: debconf_template - name: Configuring keyboard [setting selections] shell: debconf-set-selections < /home/vagrant/.deb-keybard.conf become: true when: debconf_template.changed # or use handlers - name: Configuring keyboard [reconfiguring dpkg] command: dpkg-reconfigure keyboard-configuration -f noninteractive become: true when: debconf_template.changed
所以…希望有一天别人能有一个正确的答案,但这是我最终做的,这是我多年前没有预先做的同样的事情:
一个节点上的交互式键盘设置:
dpkg-reconfigure keyboard-configuration
然后,当完成,复制控制台安装的东西
cd tar czf console-setup.tgz /etc/console-setup
然后将该文件发送到所有节点,或放在http的某个地方。
然后使用脚本将其安装在每个节点上,而不是一次一个交互式地安装它:
cd wget http://somewebserver/console-setup.gz -O ~/console-setup.tgz cd / mv /etc/console-setup /etc/console-setup.bak tar xzf ~/console-setup.tgz gunzip -c /etc/console-setup/cached.kmap.gz | loadkeys
只要你不用其他方式重新configuration键盘,它可能会保持这种状态(就像以前的安装一样)。 但也许有些东西会再次混乱,比如:
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure keyboard-configuration