如何使用systemd-nspawn容器设置嵌套的Wayland桌面环境,如VirtualBox

时间:2017-04-07 20:21:27

标签: containers virtualization wayland systemd-nspawn

这是Q& A根据stackoverflow规则/鼓励分享关于标题的黑客

https://stackoverflow.blog/2011/07/01/its-ok-to-ask-and-answer-your-own-questions/

https://stackoverflow.com/help/self-answer

我可以回答我自己的问题吗?

  

是的! Stack Exchange一直明确鼓励用户回答他们自己的问题。如果你有一个问题,你已经知道答案,并且你想公开记录这些知识,以便其他人(包括你自己)可以在以后找到它,那么在Stack Exchange网站上提出并回答你自己的问题是完全可以的。

原始回购是

https://github.com/kenokabe/wayland-desktop-container

1 个答案:

答案 0 :(得分:3)

如何使用systemd-nspawn容器设置嵌套的Wayland桌面环境,如VirtualBox

本教程将指导您在计算机上使用linux Wayland容器设置systemd-nspawn桌面环境。这与VMware Workstation或VirtualBox类似,但Linux仅具有最小的开销性能。

快速查看最终结果

特点和好处

✓硬件抽象的硬件独立容器OS,systemd-nspawn容器技术的极其高效,最小的性能开销方法
✓100%可移植的系统启用Linux主机,轻松备份和恢复
✓直接渲染工作,如3D桌面效果
✓视频和声音作品
✓网络开箱即用 ✓不太可能搞乱hostOS和主机操作系统和硬件的不频繁重启操作,而是享受即时虚拟启动,关机和重启容器OS。

如何

的摘要
  1. 启动kwin_wayland窗口,
    它嵌套在您当前的桌面环境中。

  2. 使用systemd-nspawn

  3. 启动容器操作系统
  4. 从containerOS控制台:
    (a)向目标kwin_wayland窗口启动XFCELXQt等桌面环境。
    (b)只需准备好您最喜爱的启动器应用程序,例如synapsexfce4-panel,即可进行最小化设置。

  5. 浏览

    具有最少应用程序的HostOS

    hostOS可以是任何带有systemd的linuxOS,桌面环境可以是Wayland或者传统的X11。

    Alghough,Wayland hostOS显然更可取,情况仍然不成熟。截至2017年3月,只有Fedora 25体育基于Wayland的GNOME会话作为基于X11的默认会议,但其他发行版却没有。最新版本的KDE-Plasma在X11 / Xorg中稳定,但与Wayland不稳定。

    可能,如果你在主机环境中使用GNOME,请选择Wayland,但如果使用Plasma或其他DE,请保守使用X11 / Xorg以保证稳定性。

    此方法适用于这两种情况,个人而言,我使用Arch LinuxKDE-Plasma(X11/Xorg)

    安装systemd-nspawnkwin_wayland

    像Arch这样的一些发行版已经有systemd-nspawn,但其他像Ubuntu这样的发行版却没有。{/ p> systemd-nspawn

    Binary package “systemd-container” in ubuntu xenial

    KWin中,韦兰

    Binary package “kwin-wayland” in ubuntu xenial

    Arch可能在kwin_wayland包中有xorg-server-xwayland

    启动kwin_wayland窗口

    KWin被称为功能最齐全,最稳定的窗口管理器之一。 这是由wayland管理的直接呈现启用KWin窗口空间,并嵌套在您当前的桌面环境中。

      

    Starting a nested KWin @KWin / Wayland - KDE社区维基
      从5.3开始,可以在X11或Wayland下启动嵌套的KWin实例:

    export $(dbus-launch); \
    kwin_wayland --xwayland &;
    

    for fish shell

    export (dbus-launch);
    

    启动您的containerOS

    sudo systemd-nspawn \
    -bD /YOUR_MACHINE_ROOT_DIRECTORY \
    --volatile=no \
    --bind-ro=/home/YOUR_USERNAME/.Xauthority \
    --bind=/run/user/1000 \
    --bind=/tmp/.X11-unix \
    --bind=/dev/shm \
    --bind=/dev/dri \
    --bind=/run/dbus/system_bus_socket \
    --bind=/YOUR_DATA_DIRECTORY
    

    将hostOS的/YOUR_DATA_DIRECTORY绑定到containerOS,以便您可以在两者之间共享数据目录,同时,您的containerOS可以保持尽可能小和干净,并且便于移植和备份/恢复

    登录containerOS控制台。

    通常,您从最小/服务器操作系统映像构建容器发行版操作系统。

    请记住,您不需要安装X11 / Xorg显示服务器,也不需要安装containerOS 的路径,因为kwin_wayland窗口起作用。

    启动DesktopEnvironment(XFCE)到目标kwin_wayland窗口。

    请记住,KWin已经在运行,它是一个功能齐全且功能强大的WindowManager。您可以通过快捷键使用KWin启动和切换任务,或者为synapsexfce4-panel准备您最喜爱的启动器应用程序,以进行最小化设置。

    但是,如果我们需要更加用户友好的桌面环境,只需安装并启动可与XFCE一起运行的LXQtKWin

    从containerOS控制台:

    export XAUTHORITY=/home/YOUR_USERNAME/.Xauthority; \
    export XDG_RUNTIME_DIR=/run/user/1000; \
    export CLUTTER_BACKEND=x11; \
    export QT_X11_NO_MITSHM=1; \
    xfce4-session --display :1;
    

    最大化并删除kwin_wayland窗口的框架作为默认值

    可能你想要删除containerOS的框架,这是关于Plasma(HostOS的DE)的方法。

    最终结果

    确认XFCE环境识别出在XWAYLAND显示屏上运行。

    XWayland实现了一个兼容层,可以在Wayland上无缝运行旧版X11应用程序。

    到目前为止,更像是异常,如果您使用某个标志安装GUI libraries of wayland,您可以看到GUI应用程序本地运行在Wayland上。

    左边是kate窗口,带有Xorg / X11兼容模式 右边是具有Wayland原生模式的窗口。

    正如您所看到的,本机Wayland应用程序不反映当前窗口主题,XFCE面板不显示应用程序任务,只要您使用PC的普通应用程序,就无法区分性能。< / p>

    因此,可能没有太多理由去追求Wayland原生模式应用。 但3D游戏的情况可能会有所不同,而在Raspberry Pi这样的小型设备上则会有很大不同。

    (可选)旧版X11 / Xorg

    Althogh本教程侧重于wayland嵌套窗口,Xephyr(作为X应用程序运行的嵌套X服务器)已经存在了很长时间。

    kwin_wayland不同,Xepher未针对直接呈现进行优化且KWin窗口管理器未捆绑,因此如果您在Xepher之上运行KWin或其他直接渲染作曲家,那么事情就是因此,建议不要慢,效率低,但这里的方法如下:

    Xephyr -ac -screen 1200x700 -resizeable -reset :1 &;
    

    HostOS和ContainerOS交互

    您不能在HostOS和ContainerOS之间复制和粘贴 您可以考虑使用GoogleKeep在HostOS和ContainerOS之间共享内容,当然,您通过systemd-nspawn bind分享共享目录。

    可移植性

    你可以&#34;备份/恢复&#34;或&#34;复制&#34;或&#34;移动&#34; continerOS到任何地方,无论

    • 内核更新
    • 硬件驱动程序
    • 磁盘分区(/etc/fstab等)
    • GRUB / UEFI配置

    或任何其他典型的集成故障!

    请注意主机内核版本。

    备份

    您的机器目录./machines
    您的机器备份目录./machines-bak
    您的计算机图像目录arch1

    cd ~/machines/
    sudo tar -cpf ~/machines-bak/arch1.tar arch1 --totals
    

    恢复

    cd ~/machines/
    sudo tar -xpf ~/machines-bak/arch1.tar --totals
    

    备份工具

    上面的tar命令可能不是最智能的方法,但是,它是一种经过验证的强大方法,无需任何额外的工具安装。通常,简单是最好的。

    但是,您可以选择各种备份工具以提高效率。

    Synchronization and backup programs @ArchWIKI

    Git base bup看起来不错。

    您可以考虑从容器OS中删除

    任何与硬件有关的因素,例如:

    • 使用各种驱动程序的Linux内核
    • /etc/fstab
    • NetworkManager.service systemd

    麻省理工学院许可证