5

这是基于 stackoverflow 规则/鼓励分享我对标题的 hack 的问答

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

4

1 回答 1

11

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

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

快速查看最终结果

特点和好处

✓ 通过 systemd-nspawn 容器技术以极其高效、最低性能开销的硬件抽象方式实现硬件独立 containerOS
✓ 在启用 systemd 的 linux 主机之间 100% 可移植,易于备份和恢复
✓ 直接渲染作品,如 3D 桌面效果
✓ 视频和声音作品
✓ 网络开箱即用
✓ 不太可能弄乱主机操作系统和主机操作系统和硬件的不频繁重启操作,相反,享受容器操作系统的即时虚拟启动、断电和重启。

如何总结

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

  2. 启动你的容器操作系统systemd-nspawn

  3. 从 containerOS 控制台:
    (a) 将XFCELXQt等桌面环境启动到目标kwin_wayland窗口。
    (b) 只需准备您最喜欢的启动器应用程序,例如synapsexfce4-panel即可进行最少的设置。

走过

具有最少应用程序的 HostOS

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

尽管如此,Wayland hostOS 显然更可取,但情况尚不成熟。截至 2017 年 3 月,只有 Fedora 25 支持基于 Wayland 的 GNOME 会话,而不是基于 X11 的 GNOME 会话,但其他发行版没有。最新版本的 KDE-Plasma 在 X11/Xorg 上稳定,但在 Wayland 上不稳定。

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

这种方法在这两种情况下都非常有效,就我个人而言,我使用带有KDE-Plasma(X11/Xorg) 的Arch Linux

安装systemd-nspawnkwin_wayland

一些发行版如 Arch 已经有systemd-nspawn,但其他如 Ubuntu 没有。

systemd-nspawn

ubuntu xenial 中的二进制包“systemd-container”

昆威兰

ubuntu xenial 中的二进制包“kwin-wayland”

Arch 可能已经打包好kwin_wayland了。xorg-server-xwayland

启动 kwin_wayland 窗口

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

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

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

fish外壳_

export (dbus-launch);

启动你的容器操作系统

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 的 wayland,因为kwin_waylandwindow 扮演了角色。

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

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

但是,如果我们需要更多用户友好的桌面环境,只需安装并启动XFCE或者LXQt可以与KWin.

从 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 应用程序。

到目前为止,更像是例外,如果你安装了 wayland 的 GUI 库,带有一定的标志,你可以看到 GUI 应用程序在 Wayland 上原生运行。

左边是kateXorg/X11 兼容模式的窗口。
右边是带有 Wayland 原生模式的窗口。

可以看到原生的Wayland应用没有反映当前的窗口主题,XFCE面板也没有显示应用任务,只要你使用PC的普通应用,你是看不出性能差异的。

因此,可能没有太多理由追求 Wayland 原生模式应用程序。但对于 3D 游戏,情况可能会有所不同,在 Raspberry Pi 等小型设备上情况会大不相同。

(可选)旧版 X11/Xorg

虽然本教程主要关注 Wayland 嵌套窗口,但Xephyr(作为 X 应用程序运行的嵌套 X 服务器)已经存在很长时间了。

与 不同kwin_waylandXepher没有针对直接渲染进行优化,并且没有捆绑 KWin 窗口管理器,因此如果您在 之上运行 KWin 或其他直接渲染作曲家Xepher,事情会变得缓慢且效率低下,因此不推荐,但方法如下:

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

HostOS 和 ContainerOS 交互

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

可移植性

您可以“备份/恢复”或“复制”或“移动” 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命令可能不是最聪明的方法,但是,它是一种经过验证的强大方法,无需任何额外的工具安装。通常,简单是最好的。

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

同步和备份程序@ArchWIKI

Git base bup看起来不错而且很新。

您可能会考虑从容器操作系统中删除的内容

任何硬件相关因素,例如:

  • 具有各种驱动程序的 linux 内核
  • /etc/fstab
  • NetworkManager.servicesystemd

麻省理工学院许可证

于 2017-04-07T20:21:26.623 回答