启动 LXC 容器时主机系统键盘布局发生变化

lor*_*age 5 linux keyboard-layout lxc

我使用 lxc 在 archlinux 主机上成功创建了一个 archlinux 容器。但是,每当我通过以下方式启动容器时

    lxc-start -n GUESTNAME
Run Code Online (Sandbox Code Playgroud)

键盘布局更改为主机和容器中的默认 us-layout。但我希望它是 de-latin1。令人惊讶的是,尽管事实上在

    /etc/vconsole.conf
Run Code Online (Sandbox Code Playgroud)

在主机和容器中我已经设置了选项

    KEYMAP=de-latin1
Run Code Online (Sandbox Code Playgroud)

这个问题的原因似乎是负责设置 vconsole 选项的 systemd 服务没有在容器内运行:

            systemctl status systemd-vconsole-setup
     ? systemd-vconsole-setup.service - Setup Virtual Console
       Loaded: loaded (/usr/lib/systemd/system/systemd-vconsole-setup.service; static)
       Active: inactive (dead)
               start condition failed at Mon 2014-06-02 20:53:10 UTC; 27s ago
               ConditionPathExists=/dev/tty0 was not met
         Docs: man:systemd-vconsole-setup.service(8)
               man:vconsole.conf(5)
Run Code Online (Sandbox Code Playgroud)

不知何故,它指出

    /dev/tty0 was not met
Run Code Online (Sandbox Code Playgroud)

但我不确定它想告诉我什么。archlinux linux 容器页面(https://wiki.archlinux.org/index.php/Linux_Containers#Terminal_settings)对我没有帮助。有人可以解释错误以及如何解决吗?


更新:

(1) 当我直接从控制台启动容器时,键盘布局不会改变(例如,通过启动 tmuxtmux new -s stoic然后运行sudo lxc-start -n stoic,然后通过 与 tmux 会话分离CTRL-a-d),即在登录之前X

这指向了另一种可能的解释:当我登录X键盘布局时,我的设置.xinitrc内容如下:

    setxkbmap -model pc105 -layout de -variant ,qwertz -option lv3:caps_switch
    if [ -s ~/.Xmodmap ]; then
        xmodmap ~/.Xmodmap
    fi
    [[ -f ~/.Xresources ]] && xrdb -merge ~/.Xresources
Run Code Online (Sandbox Code Playgroud)

如果我然后通过运行一个容器sudo lxc-start -n stoic内,X它也将启动控制台,而不是X(这是我建立我的所有系统的方式)。因此,我猜它会重置键盘布局。但是,如果容器至少尊重上述/etc/vconsole.conf.

(2) 我使用特权容器。

(3) 这是我当前的config文件:

    lxc.utsname=stoic
    lxc.autodev=1
    lxc.tty=1
    lxc.pts=1024
    lxc.mount=/var/lib/lxc/stoic/fstab
    lxc.cap.drop=sys_module mac_admin mac_override sys_time
    lxc.kmsg=0
    lxc.stopsignal=SIGRTMIN+4
    #networking
    lxc.network.type=veth
    lxc.network.link=br0
    lxc.network.flags=up
    lxc.network.name=eth0 
    lxc.network.mtu=1500
    #cgroups
    lxc.cgroup.devices.deny = a
    lxc.cgroup.devices.allow = c *:* m
    lxc.cgroup.devices.allow = b *:* m
    lxc.cgroup.devices.allow = c 1:3 rwm
    lxc.cgroup.devices.allow = c 1:5 rwm
    lxc.cgroup.devices.allow = c 1:7 rwm
    lxc.cgroup.devices.allow = c 1:8 rwm
    lxc.cgroup.devices.allow = c 1:9 rwm
    lxc.cgroup.devices.allow = c 4:1 rwm
    lxc.cgroup.devices.allow = c 5:0 rwm
    lxc.cgroup.devices.allow = c 5:1 rwm
    lxc.cgroup.devices.allow = c 5:2 rwm
    lxc.cgroup.devices.allow = c 136:* rwm
    lxc.rootfs = /var/lib/lxc/stoic/rootfs
    lxc.pts = 1024
Run Code Online (Sandbox Code Playgroud)

lor*_*age 0

lxc >= 1.1随着fuse-filesystem的引入,这个问题已在 版本中得到修复lxcfslxc只需安装并设置即可lxcfs