如何使用 systemd-nspawn 容器(如 VirtualBox)设置嵌套的 Wayland 桌面环境
本教程将引导您在计算机上使用 linux systemd-nspawn容器设置Wayland桌面环境。这类似于 VMware Workstation 或 VirtualBox,但只有 linux 具有最小的开销性能。
快速查看最终结果
特点和好处
✓ 通过 systemd-nspawn 容器技术以极其高效、最低性能开销的硬件抽象方式实现硬件独立 containerOS
✓ 在启用 systemd 的 linux 主机之间 100% 可移植,易于备份和恢复
✓ 直接渲染作品,如 3D 桌面效果
✓ 视频和声音作品
✓ 网络开箱即用
✓ 不太可能弄乱主机操作系统和主机操作系统和硬件的不频繁重启操作,相反,享受容器操作系统的即时虚拟启动、断电和重启。
如何总结
启动kwin_wayland
窗口,
嵌套在您当前的桌面环境中。
启动你的容器操作系统systemd-nspawn
从 containerOS 控制台:
(a) 将XFCE或LXQt等桌面环境启动到目标kwin_wayland
窗口。
(b) 只需准备您最喜欢的启动器应用程序,例如synapse或xfce4-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-nspawn
和kwin_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_wayland
window 扮演了角色。
向目标kwin_wayland
窗口启动 DesktopEnvironment (XFCE)。
请记住,KWin 已经在运行,它是一个功能完整且功能强大的 WindowManager。您可以通过快捷键使用 KWin 启动和切换任务,或者准备您最喜欢的启动器应用程序,例如synapse
或xfce4-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 上原生运行。
左边是kate
Xorg/X11 兼容模式的窗口。
右边是带有 Wayland 原生模式的窗口。
可以看到原生的Wayland应用没有反映当前的窗口主题,XFCE面板也没有显示应用任务,只要你使用PC的普通应用,你是看不出性能差异的。
因此,可能没有太多理由追求 Wayland 原生模式应用程序。但对于 3D 游戏,情况可能会有所不同,在 Raspberry Pi 等小型设备上情况会大不相同。
(可选)旧版 X11/Xorg
虽然本教程主要关注 Wayland 嵌套窗口,但Xephyr(作为 X 应用程序运行的嵌套 X 服务器)已经存在很长时间了。
与 不同kwin_wayland
,Xepher
没有针对直接渲染进行优化,并且没有捆绑 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.service
的systemd
麻省理工学院许可证