lxc折腾之路 篇四:成也萧何,败也萧何

2024-04-01 22:33:12 0点赞 0收藏 0评论

终于到安装GUI的环节了,大家兴不兴奋。

就算你们兴奋,我还是要水。你们知道吗,我找到的第一个关于containerlized gui的方案不是lxc而是 nspawn。我还真的试过了,但是因为没incus方便就放弃了。要是你们感兴趣的话,我也是可以写的。

https://stackoverflow.com/questions/43286518/how-to-set-up-nested-wayland-desktop-environment-with-systemd-nspawn-container

然后我又找到了很多有趣的网站,你们应该先看看。

https://discuss.linuxcontainers.org/t/overview-gui-inside-containers/8767

https://discuss.linuxcontainers.org/t/howto-use-the-hosts-wayland-and-xwayland-servers-inside-containers/8765

https://unix.stackexchange.com/questions/330366/how-can-i-run-a-graphical-application-in-a-container-under-wayland

https://discuss.linuxcontainers.org/t/incus-lxd-profile-for-gui-apps-wayland-x11-and-pulseaudio/18295/9

https://blog.raymond.burkholder.net/index.php?/archives/1065-GUI-From-an-LXC-Container-on-the-Host.html

https://blog.simos.info/running-x11-software-in-lxd-containers/

https://discourse.ubuntu.com/t/lxd-incus-profile-for-gui-apps-wayland-x11-and-pulseaudio/40255

现在和大家分享下,我嵌套gui的过程。

我在debian MATEincus容器里装了xfcethunar,然后哇啦,thunar就出现在了MATE上。这说明容器里的X11应用可以通过unix socket出现在X11上。而且说明宿主机和容器储存是分离的。

incus容器和lxc容器没什么区别,不要太在意这些细节。

成也萧何,败也萧何

然后我想lxqt也能不能这样干。但是,尼玛,它们混在一起了。可能得底层是Window manager,然后上面是desktop environment,才能正常显示。

成也萧何,败也萧何

然后我就尝试了waylandweston可以直接套娃,好玩。

成也萧何,败也萧何

现在,我要塞大量知识进你们脑子里了,麻烦快读下这3个网站。

https://en.wikibooks.org/wiki/Guide_to_X11/Introduction

https://www.baeldung.com/linux/x11

https://wayland.freedesktop.org/architecture.html

各位用过linuxdesktop environment吗,知道xfcelxqtmategnomekdedeepin吗。听过就好,这些全都和X11有关系。我猜公务员用的linux系统也是用X11X11是个旧协议了,所以传播非常广泛,特别根深蒂固。很多人用就是好啊,有用户就有开发者,所以linuxdesktop environment可以即装即用,图片浏览,影音播放,文字编辑,文件浏览,桌面背景,控制中心,等等一堆常见的功能开盖即食。同时,又因为desktop environment的即装即用,导致我不清楚发生了什么,安装了什么,启动了什么,所以我转投基础到基本什么都没有的wayland。在设计时,X11network-transparent的,可以让局域网内的其它电脑也使用这电脑的X11,所以算的上是个特性也是个安全风险。

wayland是个新协议,比X11更快更安全。现在支持wayland比较好的desktop environment就只有gnomekdeenlightenment。用wayland的人肯定没X11的人多,但是也不少。开发者喜欢新的事物,甚至有些程序是专门用wayland的。还有因为wayland的特性,导致它比X11效率更高。毕竟程序在X11刷新,就要通过X servercompositor交流。而在wayland则是直接和 compositor交流,少了层中介,效率肯定会高,GPUCPURAM的利用率就更高。但是就是程序支持率不高,所以他们搞了xwayland来兼容X11的程序,但是还是有程序连xwayland都不支持。而且wayland不支持以root身份打开任何应用。wayland开发者甚至连vncrdp这些远程访问手段都懒得理。我可以非常明确的告诉你们,wayland现在只是可以用而已,还没有到准备好的地步。一堆桌面环境的东西得自己找,自己配置,wayland上没有的还得用回X11的。

使用X11控制图像的东西叫Window manager,想要知道有哪些就点这链接。

https://wiki.archlinux.org/title/Window_manager

使用wayland控制图像的东西叫wayland compositor ,想要知道有哪些就点这链接。

https://wiki.archlinux.org/title/Wayland

相信我,用惯windows的话,用Stacking的。我试用了Tiling的,只有一个感受,这太硬核了。Stacking就是可以自由的使用鼠标操作,Tiling就是基本在用键盘

又到了选择题时间。wayland指的是纯wayland compositorwayland compositor安装xwayland就是xwayland了,因为wlroots支持选择backend。下图的X11指代Window managerdesktop environment。还有别想了,X11是不会嵌套wayland中的。兼容性最好的是方案2X11底层,容器装wayland compositorxwayland。安全性最好的是方案8wayland compositor底层,容器装wayland compositor。我选的是方案4

成也萧何,败也萧何

别废话了,赶紧进入正题。到底要用哪个当GUI?

你喜欢用哪个就用哪个。我是在宿主机用sway,在lxc容器用labwc。

哈,不是说Tiling的太硬核了,干嘛选sway?

因为在Stacking里开Stacking的,那子Stacking会有边框,不会全屏。

不是有cage的kiosk mode吗?

我也想,不过会出现先有鸡还是先有蛋的哲学问题。而且cage不支持nest。

根本就不明白在说什么。那为什么不选X11?

因为wayland compositor 没绑定其它GUI应用,可以从头开始自己定制。

小孩子吗。算了算了,赶紧开始吧。

啊,对了,如果你们gpu是英伟达的请一定要看wayland compositor那链接,因为我用的wlroots(sway,labwc)不支持英伟达,因为英伟达的驱动是闭源的。还有labwc不支持触屏,但是对htpc没有影响。

所有你们选择好了吗。现在就给你们对应的profile。

  • incus profile copy default wayland

  • incus profile edit wayland

config: {}

description: Let containers use host display

devices:

waylandSocket:

type: proxy

bind: container

connect: unix:/run/user/1100/wayland-1

listen: unix:/mnt/wayland-1

mode: '0770'

security.gid: '1100'

security.uid: '1100'

gid: '1000'

uid: '1000'

name: wayland

  • incus profile copy default x11

  • incus profile edit x11

config:

environment.DISPLAY: :0

description: x11

devices:

x11:

bind: container

connect: unix:@/tmp/.X11-unix/X0

listen: unix:@/tmp/.X11-unix/X0

security.gid: '1100'

security.uid: '1100'

type: proxy

name: x11

因为宿主机的GUI只是用来承载lxc容器GUI用的,所以能多简单就多简单。所以只需要wayland compositor就够了。但是如果底层的wayland compositor是Stacking的话,除了koisk mode外,所有的子wayland compositor的上面都会显示titlebar,不知道titlebar是什么的请上滑查看weston的图片,那个有显示wayland-0的框就是了。

所以在宿主机用sway,改改设置就行了。我相信好学的你们一定会去搜索关于sway的设置的。

https://wiki.debian.org/sway

  • sudo apt install sway -y

我相信你们新建了个没有sudo权限用户,现在是切换用户的时候了。

  • mkdir -p ~/.config/sway

  • cp /etc/sway/config ~/.config/sway/

  • nano ~/.config/sway/config

让边框消失,把bar也干掉,这样开起的应用就会占满屏幕。

#hide border

default_border none

default_floating_border none

font pango:monospace 0

titlebar_padding 1

titlebar_border_thickness 0

#bar {

# position top

# When the status_command prints a new line to stdout, swaybar updates.

# The default just shows the current date and time.

# status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done

# colors {

# statusline #ffffff

# background #323232

# inactive_workspace #32323200 #32323200 #5c5c5c

# }

#}

然后在宿主机上,不是ssh,输入sway,再按回车,铛铛,gui就出现了。啥,没出现,我懂你们不会这么轻易相信我,肯定是在虚拟机上搞。sway(wlroots)需要硬件加速才给你开。现在试下这个:

  • WLR_NO_HARDWARE_CURSORS=1 sway

成也萧何,败也萧何

啥,分辨率不对,看我刚才给的链接,要不然等另一个长篇。至于下一个长篇什么时候出,我也不懂,fine-tune要花好久时间,在满意前是不会写的。

好了,宿主机的gui设置好了。现在搞incus容器。

  • incus launch tuna:alpine/3.19 htpc -p default -p ovs -p wayland -p hwac -p mount -p autostart

怎么换成了alpine?

用什么linux distribution都行,顺手就好。我用alpine是为了labwc,在debian 12上没有。

这里出现了个问题,如果你们是ssh进宿主机的就按下面的做。但是如果直接在宿主机的foot操作的话在命令前面加TERM=xterm-256color ,这样所有的文字编辑器才能正常使用。

  • incus exec htpc ash

现在进行正常的更新。

  • echo -e "https://mirrors.ustc.edu.cn/alpine/v3.19/mainnhttps://mirrors.ustc.edu.cn/alpine/v3.19/community" > /etc/apk/repositories

  • apk update

  • apk upgrade

想用中文输入法就得用edge的源。因为ibus不知原因不显示候选框,只能换fcitx5了。

  • echo -e "https://mirrors.ustc.edu.cn/alpine/edge/mainnhttps://mirrors.ustc.edu.cn/alpine/edge/communitynhttps://mirrors.ustc.edu.cn/alpine/edge/testing" >> /etc/apk/repositories

  • apk update

  • apk upgrade

改下时区。

  • setup-timezone -z Asia/Shanghai

相信我,bash对于后面的步骤至关必要。那nano呢,你们喜欢用vi就不用装。

  • apk add nano bash bash-doc bash-completion

  • sed -i 's/ash/bash/g' /etc/passwd

然后就是显示中文必需的东西了。

  • sed -i 's/#unicode="YES"/unicode="YES"/g' /etc/rc.conf

  • apk add musl-locales font-noto-cjk

装gpu驱动。

  • apk add mesa-dri-gallium

解码驱动。8代以下不含8代加装intel-media-driver,8代及以上加装libva-intel-driver。

  • apk add mesa-va-gallium linux-firmware-i915

装labwc。

  • apk add labwc labwc-doc font-dejavu foot dbus dbus-x11

这是wayland里唯一的像样的支持gui的程序启动器。

  • apk add nwg-launchers

在wayland里没有独立的文件管理器,所以得用X11的。因为我搞不懂gvfs,所以就不装了,反正就是没回收站用而已。

https://wiki.archlinux.org/title/Thunar

  • apk add thunar tumbler ffmpegthumbnailer

然后是中文输入法。

  • apk add fcitx5 fcitx5-gtk3 fcitx5-configtool fcitx5-chinese-addons

要用fcitx5就必需要dbus,需要激活才能用。

  • rc-update add dbus

剩下的就是网页浏览器,视频播放器,文字编辑器,图片浏览器。

  • apk add firefox mpv gedit ristretto openssh-server

这些东西都不会自动安装中文环境,所以得手动装。

  • LANG=zh_CN.UTF-8 apk add lang

前面说了wayland不支持root用户,所以要新建个正常的,但是还是建个可以提权到root的比较方便。

https://wiki.alpinelinux.org/wiki/Post_installation

  • apk add doas

  • echo "permit persist :wheel" >> /etc/doas.d/doas.conf

假设新用户叫lxc。

  • adduser -s /bin/bash -g "lxc" lxc

  • adduser lxc wheel

  • adduser lxc video

  • adduser lxc input

  • adduser lxc audio

然后切换到lxc。

  • su -l lxc

顺便挂载下那个在docker那篇提到的那个/mnt的目录。

  • ln -s /mnt/shareddisk/ /home/lxc/shareddisk/

因为wayland compositor运行前必需有XDG_RUTIME_DIR,然后没有装seat manager就不会自动出现这文件夹,所以手动建一个。

https://wiki.alpinelinux.org/wiki/LabWC

  • mkdir -pm 0700 ~/.run/

  • export XDG_RUNTIME_DIR=/home/lxc/.run/

然后又因为没有seat manager,所以启动不了wayland compositor。但是没关系,我们用宿主机的seat,而且一定得用宿主机的wayland socket才会显示在宿主机上。

  • ln -s /mnt/wayland-1 /home/lxc/.run/wayland-1

  • export WAYLAND_DISPLAY=wayland-1

然后准备labwc的配置。

  • mkdir -p ~/.config

  • cp -r /usr/share/doc/labwc/ ~/.config/

首先得处理environment 才行,仔细阅读,注意得把前面的#去掉这环境才能有效果。再加上这些。

  • nano ~/.config/labwc/environment

export GTK_IM_MODULE=fcitx

export XMODIFIERS=@im=fcitx

export QT_IM_MODULE=fcitx

export QT_QPA_PLATFORM=wayland-egl

export QT_WAYLAND_FORCE_DPI=physical

export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"

export ELM_DISPLAY=wl

export SDL_VIDEODRIVER=wayland

export SAL_USE_VCLPLUGIN=gtk3

export GTK_USE_PORTAL=0

export MOZ_ENABLE_WAYLAND=1

export MOZ_DBUS_REMOTE=1

export XDG_SESSION_TYPE=wayland

export intel_iommu=igfx_off

export LIBVA_DRIVER_NAME=i965

然后处理menu.xml。相信我,这渣渣和x11的桌面习惯不一样,为了让你们用上基本的功能,跟着我做就是了,只需要编辑root-menu。从这里开始,希望zdm的网页不要自动编辑下面代码的格式。要是出错了,请在评论区留言。

nano ~/.config/labwc/menu.xml

至于autostart,清空吧。

现在准备中文字体,这样你输中文时就不会出现日文了。

  • nano ~/.fonts.conf

<?xml version="1.0"?>

sans-serif

Noto Sans CJK SC

Noto Sans CJK TC

Noto Sans CJK JP

monospace

Noto Sans Mono CJK SC

Noto Sans Mono CJK TC

Noto Sans Mono CJK JP

然后就要开labwc了。

  • export LANG=zh_CN.UTF-8

  • labwc

然后你们就能在宿主机上看到一片黑色,只有一个鼠标飘在上面。单击下鼠标就跳出菜单。恭喜你们成功嵌套了gui。和我之前说的一样,wayland compositor相当barebone。

如果在宿主机的foot上操作,你会发现一边是foot,一边是labwc。把鼠标移到labwc那框,然后按win(在windows的键盘是windows的图标,在imac的键盘可能是个苹果的图标)+f,就能全屏了。

成也萧何,败也萧何

现在还不能输入中文,点击app luancher,再点击fcitx 5,然后就能按Ctrl+空格切换成中文输入法,输入中文了。如果奔溃了,那可能是在虚拟机安装所致,请执行下面的操作。

  • nano /usr/share/X11/xkb/compat/basic

// group 2 = Mod5;

// group 3 = Mod5;

// group 4 = Mod5;

每次重启都得手动开fcitx 5才能输中文,虽然fcitx 5支持wayland,但是依赖dbus,导致不能在autostart那启动。相信我,dbus-launch fcitx5 -d是没用的。

打开firefox,跟着引导做就会帮你们改成中文。

然后打开thunar,随便开个视频,就会发现没有声音,这很正常,我们并没有安装任何声音管理器。

把东西都关了,然后点击屏幕,在跳出的菜单那按exit,就退出labwc了。

然后在terminal继续退出,再登录,你们会发现打开不了labwc,这很正常,运行以下命令就行。因为没装seat manager,所以我们得手动设置 XDG_RUNTIME_DIR和 WAYLAND_DISPLAY。

export XDG_RUNTIME_DIR=/home/lxc/.run/

export WAYLAND_DISPLAY=wayland-1

如果还不行,就得看/home/lxc/.run/wayland-1存在不,没有的话就重新link一下就行了。

好了,相当基础的能用中文的嵌套gui就到这里了。最基础的nest gui其实只要2个wayland compositor,刷刷刷,几行代码就行了,根本就不用废这么多笔墨。完整客制化将在另一个长篇出现。下一篇,安装声音管理器。想播出声音,就不要用虚拟机,给我真的安装linux在物理机上。要是虚拟机可以直通声卡并播放声音的话,我相信你们是不会看这长篇的。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

1849元起

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

2485.01元起

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

1749元起

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

3499元起

QNAP 威联通 TS-464C2 四盘位 NAS网络存储(赛扬N5095、8GB)黑色

QNAP 威联通 TS-464C2 四盘位 NAS网络存储(赛扬N5095、8GB)黑色

2599元起

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

1979元起

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

2783.51元起

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

5899元起

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

2829元起

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

2499元起

QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)

QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)

3199元起

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

1321.01元起

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

4299元起

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

2179元起

ZSpace 极空间 私有云Z2Pro 四核2盘位NAS家庭个人云网络存储服务器手机平板扩容适用iPhone15 水

ZSpace 极空间 私有云Z2Pro 四核2盘位NAS家庭个人云网络存储服务器手机平板扩容适用iPhone15 水

1299元起

sgwbox 拾光坞 N3 星光版V1(瑞芯微RK3566,2G,支持docker)

sgwbox 拾光坞 N3 星光版V1(瑞芯微RK3566,2G,支持docker)

385.78元起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
相关好价
最新文章 热门文章
0
扫一下,分享更方便,购买更轻松