经过多次尝试和错误,我终于能够在 Ubuntu 14.04 下的 Fedora LXC 容器中运行 Spice。但是,Ubuntu 14.04 容器却不能做到这一点。问题似乎出在 Ubuntu 的部分 systemd 实现上,而 Fedora 的完整实现(即使有 LXC 限制)在这种情况下似乎没有问题。
我的测试用例依赖于 Spice vdagent git 源。一旦 spice-vdagent 连接到 spice-vdagentd,vdagentd 就会尝试通过 libsystemd-login0 调用获取 vdagent PID 的会话信息sd_pid_get_session
。此调用返回“没有这样的文件或目录”,导致 Spice 表单无法正常工作。在深入研究 libsystemd-login0 的源代码后,似乎此调用依赖于 systemd cgroup。
不幸的是,由于文件在容器中运行时明确不挂载 cgroup,因此该 cgroup 不存在于容器中/etc/init/systemd-logind.conf
。删除 LXC 检查并重新启动 LXC 容器后,我剩下一个挂载在 /sys/fs/cgroup/systemd 中的 cgroup。一切似乎都很好,直到检查 /sys/fs/cgroup/systemd/cgroup.procs —— 它是空的,下面的所有其他 cgroup.procs 文件也是如此。LXC 检查上方的 systemd-logind.conf 中的注释指出“在 LXC 中挂载 cgroup 不起作用,在那里它使用 cgmanager”,但这并没有让我深入了解它是如何应该该怎么办,或者如何解决这个问题。
我真的不确定这是否是 LXC 特有的问题(也许是 LXC 阻止了它正常工作?)或者它是否是 systemd-logind 问题。我应该澄清的是,目前,我已将我的 Ubuntu 14.40 LXC 容器分配给“不受限制”的配置文件,以确保它不是某种奇怪的权限问题。
有谁知道如何才能使 LXC 容器内的 systemd cgroup 正常工作,以便我可以愉快地使用 Spice?
编辑:检查我的主机系统后,那里的 systemd cgroup 似乎运行良好,嗯......
尽管缺少 systemd-cgls,我仍然可以提供一些类似的信息:
这是 /sys/fs/cgroup/systemd 目录的树:
ubuntu@ubuntu2:/sys/fs/cgroup/systemd$ tree
.
├── cgroup.clone_children
├── cgroup.event_control
├── cgroup.procs
├── cgroup.sane_behavior
├── lxc
│ ├── cgroup.clone_children
│ ├── cgroup.event_control
│ ├── cgroup.procs
│ ├── notify_on_release
│ ├── tasks
│ └── ubuntu2
│ ├── cgroup.clone_children
│ ├── cgroup.event_control
│ ├── cgroup.procs
│ ├── notify_on_release
│ ├── tasks
│ └── user
│ ├── 1000.user
│ │ ├── c1.session
│ │ │ ├── cgroup.clone_children
│ │ │ ├── cgroup.event_control
│ │ │ ├── cgroup.procs
│ │ │ ├── notify_on_release
│ │ │ └── tasks
│ │ ├── cgroup.clone_children
│ │ ├── cgroup.event_control
│ │ ├── cgroup.procs
│ │ ├── notify_on_release
│ │ └── tasks
│ ├── cgroup.clone_children
│ ├── cgroup.event_control
│ ├── cgroup.procs
│ ├── notify_on_release
│ └── tasks
├── notify_on_release
├── release_agent
├── tasks
└── user
├── 1000.user
│ ├── c2.session
│ │ ├── cgroup.clone_children
│ │ ├── cgroup.event_control
│ │ ├── cgroup.procs
│ │ ├── notify_on_release
│ │ └── tasks
│ ├── cgroup.clone_children
│ ├── cgroup.event_control
│ ├── cgroup.procs
│ ├── notify_on_release
│ └── tasks
├── cgroup.clone_children
├── cgroup.event_control
├── cgroup.procs
├── notify_on_release
└── tasks
每个 cgroup 的 PID 映射如下:
./lxc/ubuntu2/user/1000.user/c1.session/cgroup.procs:
860 /bin/login -- 2596 grep --color=auto 860 /bin/login -- 2596 grep --color=auto 860
1281 -bash 2605 grep --color=auto 1281 -bash 2605 grep --color=auto 1281
2614 grep --color=auto 2593 grep --color=auto 2593
./lxc/ubuntu2/user/1000.user/cgroup.procs:
./lxc/ubuntu2/user/cgroup.procs:
./lxc/ubuntu2/cgroup.procs:
1 /sbin/init 194 upstart-udev-bridge --daemon 431 avahi-daemon: running [ubuntu2.local] 487 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 513 upstart-file-bridge --daemon 767 /usr/lib/policykit-1/polkitd --no-debug 811 /usr/sbin/spice-vdagentd -f -s /tmp/xspice-virtio -u /tmp/xspice-uinput -d 862 /sbin/getty -8 38400 tty1 871 /usr/lib/accountsservice/accounts-daemon 903 lightdm --session-child 16 20 915 /bin/sh /usr/lib/lightdm/lightdm-greeter-session /usr/sbin/unity-greeter 921 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 941 /usr/lib/gvfs/gvfsd 958 lightdm --session-child 12 20 961 init --user --startup-event indicator-services-start 971 /usr/lib/x86_64-linux-gnu/indicator-datetime/indicator-datetime-service 1042 /usr/bin/pulseaudio --start --log-target=syslog 1045 /usr/lib/rtkit/rtkit-daemon 1065 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2 1069 /usr/lib/x86_64-linux-gnu/notify-osd 1222 /usr/lib/colord/colord 1281 -bash 2626 grep --color=auto 1 /sbin/init 194 upstart-udev-bridge --daemon 431 avahi-daemon: running [ubuntu2.local] 487 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 513 upstart-file-bridge --daemon 767 /usr/lib/policykit-1/polkitd --no-debug 811 /usr/sbin/spice-vdagentd -f -s /tmp/xspice-virtio -u /tmp/xspice-uinput -d 862 /sbin/getty -8 38400 tty1 871 /usr/lib/accountsservice/accounts-daemon 903 lightdm --session-child 16 20 915 /bin/sh /usr/lib/lightdm/lightdm-greeter-session /usr/sbin/unity-greeter 921 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 941 /usr/lib/gvfs/gvfsd 958 lightdm --session-child 12 20 961 init --user --startup-event indicator-services-start 971 /usr/lib/x86_64-linux-gnu/indicator-datetime/indicator-datetime-service 1042 /usr/bin/pulseaudio --start --log-target=syslog 1045 /usr/lib/rtkit/rtkit-daemon 1065 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2 1069 /usr/lib/x86_64-linux-gnu/notify-osd 1222 /usr/lib/colord/colord 1281 -bash 2626 grep --color=auto 1
194 upstart-udev-bridge --daemon 2635 grep --color=auto 194 upstart-udev-bridge --daemon 2635 grep --color=auto 194
202 dbus-daemon --system --fork 2644 grep --color=auto 202 dbus-daemon --system --fork 2644 grep --color=auto 202
252 /lib/systemd/systemd-udevd --daemon 2653 grep --color=auto 252 /lib/systemd/systemd-udevd --daemon 2653 grep --color=auto 252
320 /lib/systemd/systemd-logind 2662 grep --color=auto 320 /lib/systemd/systemd-logind 2662 grep --color=auto 320
402 /usr/sbin/cupsd -f 2671 grep --color=auto 402 /usr/sbin/cupsd -f 2671 grep --color=auto 402
420 rsyslogd 2680 grep --color=auto 420 rsyslogd 2680 grep --color=auto 420
431 avahi-daemon: running [ubuntu2.local] 2689 grep --color=auto 431 avahi-daemon: running [ubuntu2.local] 2689 grep --color=auto 431
440 avahi-daemon: chroot helper 2698 grep --color=auto 440 avahi-daemon: chroot helper 2698 grep --color=auto 440
459 /usr/lib/cups/notifier/dbus dbus:// 2707 grep --color=auto 459 /usr/lib/cups/notifier/dbus dbus:// 2707 grep --color=auto 459
460 /usr/lib/cups/notifier/dbus dbus:// 2716 grep --color=auto 460 /usr/lib/cups/notifier/dbus dbus:// 2716 grep --color=auto 460
487 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 2725 grep --color=auto 487 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 2725 grep --color=auto 487
505 upstart-socket-bridge --daemon 2734 grep --color=auto 505 upstart-socket-bridge --daemon 2734 grep --color=auto 505
513 upstart-file-bridge --daemon 2743 grep --color=auto 513 upstart-file-bridge --daemon 2743 grep --color=auto 513
643 /usr/sbin/ModemManager 2752 grep --color=auto 643 /usr/sbin/ModemManager 2752 grep --color=auto 643
690 NetworkManager NetworkManager
692 /sbin/getty -8 38400 tty4 2770 grep --color=auto 692 /sbin/getty -8 38400 tty4 2770 grep --color=auto 692
702 /sbin/getty -8 38400 tty2 2779 grep --color=auto 702 /sbin/getty -8 38400 tty2 2779 grep --color=auto 702
703 /sbin/getty -8 38400 tty3 /sbin/getty -8 38400 tty3
739 /usr/sbin/sshd -D 2797 grep --color=auto 739 /usr/sbin/sshd -D 2797 grep --color=auto 739
754 acpid -c /etc/acpi/events -s /var/run/acpid.socket 2806 grep --color=auto 754 acpid -c /etc/acpi/events -s /var/run/acpid.socket 2806 grep --color=auto 754
755 cron 2815 grep --color=auto 755 cron 2815 grep --color=auto 755
756 whoopsie 2824 grep --color=auto 756 whoopsie 2824 grep --color=auto 756
757 atd 2833 grep --color=auto 757 atd 2833 grep --color=auto 757
767 /usr/lib/policykit-1/polkitd --no-debug /usr/lib/policykit-1/polkitd --no-debug
772 /usr/sbin/kerneloops 2851 grep --color=auto 772 /usr/sbin/kerneloops 2851 grep --color=auto 772
811 /usr/sbin/spice-vdagentd -f -s /tmp/xspice-virtio -u /tmp/xspice-uinput -d 2860 grep --color=auto 811 /usr/sbin/spice-vdagentd -f -s /tmp/xspice-virtio -u /tmp/xspice-uinput -d 2860 grep --color=auto 811
847 lightdm 2869 grep --color=auto 847 lightdm 2869 grep --color=auto 847
862 /sbin/getty -8 38400 tty1 2878 grep --color=auto 862 /sbin/getty -8 38400 tty1 2878 grep --color=auto 862
868 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch 2887 grep --color=auto 868 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch 2887 grep --color=auto 868
871 /usr/lib/accountsservice/accounts-daemon 2896 grep --color=auto 871 /usr/lib/accountsservice/accounts-daemon 2896 grep --color=auto 871
897 /usr/sbin/cups-browsed 2905 grep --color=auto 897 /usr/sbin/cups-browsed 2905 grep --color=auto 897
903 lightdm --session-child 16 20 2914 grep --color=auto 903 lightdm --session-child 16 20 2914 grep --color=auto 903
915 /bin/sh /usr/lib/lightdm/lightdm-greeter-session /usr/sbin/unity-greeter 2923 grep --color=auto 915 /bin/sh /usr/lib/lightdm/lightdm-greeter-session /usr/sbin/unity-greeter 2923 grep --color=auto 915
921 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 2932 grep --color=auto 921 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 2932 grep --color=auto 921
922 /usr/sbin/unity-greeter 2941 grep --color=auto 922 /usr/sbin/unity-greeter 2941 grep --color=auto 922
924 /usr/lib/at-spi2-core/at-spi-bus-launcher --launch-immediately 2950 grep --color=auto 924 /usr/lib/at-spi2-core/at-spi-bus-launcher --launch-immediately 2950 grep --color=auto 924
930 /bin/dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3 2959 grep --color=auto 930 /bin/dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3 2959 grep --color=auto 930
936 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session 2968 grep --color=auto 936 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session 2968 grep --color=auto 936
941 /usr/lib/gvfs/gvfsd 2977 grep --color=auto 941 /usr/lib/gvfs/gvfsd 2977 grep --color=auto 941
949 /usr/lib/dconf/dconf-service 2986 grep --color=auto 949 /usr/lib/dconf/dconf-service 2986 grep --color=auto 949
958 lightdm --session-child 12 20 2995 grep --color=auto 958 lightdm --session-child 12 20 2995 grep --color=auto 958
961 init --user --startup-event indicator-services-start 3004 grep --color=auto 961 init --user --startup-event indicator-services-start 3004 grep --color=auto 961
963 nm-applet 3013 grep --color=auto 963 nm-applet 3013 grep --color=auto 963
966 /usr/lib/x86_64-linux-gnu/indicator-messages/indicator-messages-service 3022 grep --color=auto 966 /usr/lib/x86_64-linux-gnu/indicator-messages/indicator-messages-service 3022 grep --color=auto 966
967 /usr/lib/x86_64-linux-gnu/indicator-bluetooth/indicator-bluetooth-service 3031 grep --color=auto 967 /usr/lib/x86_64-linux-gnu/indicator-bluetooth/indicator-bluetooth-service 3031 grep --color=auto 967
968 /usr/lib/x86_64-linux-gnu/indicator-power/indicator-power-service /usr/lib/x86_64-linux-gnu/indicator-power/indicator-power-service
971 /usr/lib/x86_64-linux-gnu/indicator-datetime/indicator-datetime-service 3049 grep --color=auto 971 /usr/lib/x86_64-linux-gnu/indicator-datetime/indicator-datetime-service 3049 grep --color=auto 971
978 /usr/lib/x86_64-linux-gnu/indicator-keyboard-service --use-gtk 3058 grep --color=auto 978 /usr/lib/x86_64-linux-gnu/indicator-keyboard-service --use-gtk 3058 grep --color=auto 978
979 /usr/lib/unity-settings-daemon/unity-settings-daemon 3067 grep --color=auto 979 /usr/lib/unity-settings-daemon/unity-settings-daemon 3067 grep --color=auto 979
985 /usr/lib/upower/upowerd 3076 grep --color=auto 985 /usr/lib/upower/upowerd 3076 grep --color=auto 985
986 /usr/lib/x86_64-linux-gnu/indicator-sound/indicator-sound-service 3085 grep --color=auto 986 /usr/lib/x86_64-linux-gnu/indicator-sound/indicator-sound-service 3085 grep --color=auto 986
987 /usr/lib/x86_64-linux-gnu/indicator-session/indicator-session-service 3094 grep --color=auto 987 /usr/lib/x86_64-linux-gnu/indicator-session/indicator-session-service 3094 grep --color=auto 987
993 /usr/lib/x86_64-linux-gnu/indicator-application/indicator-application-service 3103 grep --color=auto 993 /usr/lib/x86_64-linux-gnu/indicator-application/indicator-application-service 3103 grep --color=auto 993
1042 /usr/bin/pulseaudio --start --log-target=syslog 3112 grep --color=auto 1042 /usr/bin/pulseaudio --start --log-target=syslog 3112 grep --color=auto 1042
1045 /usr/lib/rtkit/rtkit-daemon 3121 grep --color=auto 1045 /usr/lib/rtkit/rtkit-daemon 3121 grep --color=auto 1045
1065 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2 3130 grep --color=auto 1065 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2 3130 grep --color=auto 1065
1069 /usr/lib/x86_64-linux-gnu/notify-osd 3139 grep --color=auto 1069 /usr/lib/x86_64-linux-gnu/notify-osd 3139 grep --color=auto 1069
1222 /usr/lib/colord/colord 3148 grep --color=auto 1222 /usr/lib/colord/colord 3148 grep --color=auto 1222
./lxc/cgroup.procs:
./user/1000.user/c2.session/cgroup.procs:
./user/1000.user/cgroup.procs:
./user/cgroup.procs:
./cgroup.procs:
答案1
我spice-vdagentd
通过使用“-X”选项运行它来禁用systemd-login
集成,从而使其正常工作。
https://bugs.launchpad.net/ubuntu/+source/spice-vdagent/+bug/1633609?comments=all
答案2
请看这里:
https://s3hh.wordpress.com/2014/04/18/xspice-in-containers/
这是其中一位 LXC 开发人员的博客网站。
他可能也对您的方法/进展感兴趣。