转载请注明出处,本文仅用于学习交流,不对之处,恳请指正 ,部分图片摘取网络,如有侵权请联系
使用LXC安装KDE桌面,并使用RDP远程桌面进行登录。同时直通KVM到LXC,在LXC中安装Android Studio以及安卓模拟器进行Android应用程序的开发。理论上云服务器也支持KDE+RDP的远程桌面方式,但大部分不支持KVM(Android模拟器)。
前言
既然是All in one,那么我的需求是将我的一些开发工作也都放在这台主机上面进行的,我通过独立显卡直通的方式来使我的VM正常使用显示器,以作为游戏娱乐,办公开发等。但我依然有远程开发的需求,比如使用平板、旧的笔记本电脑进行便捷的代码修改,耗时的编译工作等等。
我的All in one做了大量的优化以及备份工作,使之具有更好的可靠性。如果仅仅只是为了家庭网络,不建议与我的方案相同。
需求
-
既然LXC与Proxmox VE Host共用内核以获得最大性能,那么我们能不能在LXC上安装桌面环境来进行远程开发?
很显然这是显而易见且简单有效的方式。
-
因为大部分时候我构建的是Android应用,那么便有另一个需求,我们能不能在Proxmox VE的LXC里面直接使用kvm来运行Android模拟器?
很显然这是显而易见且简单可行的方式。
-
理论上云服务器也是可以安装KDE跟XRDP进行远程桌面的,但是一般不会支持虚拟化技术
很显然这是显而易见且简单可靠的方式。
测试环境
-
Host: Proxmox VE(PVE) 7.x
-
LXC Container: Debian 11
-
Windows远程桌面工具
实施方案
LXC安装时的注意事项
-
取消非特权容器
-
我使用的是Debian11,你可以自由选择ubuntu, CentOS之类的
-
选择特权容器的功能,我是一次性全部打勾了
准备工作
启动并进入容器
-
把全部软件更新为最新版本
apt-get update && apt-get dist-upgrade -y
-
解决乱码问题
dpkg-reconfigure locales
选择en_US.UTF-8
-
修改时区
修改为香港时区
timedatectl set-timezone Asia/Hong_Kong
开启NTP时钟同步
timedatectl set-ntp true
查看是否正确
timedatectl
-
关机 如果你需要"直通网卡",在桥接网卡的条件下,启动一次容器将减少很多麻烦的配置,所以我会在新建完LXC之后,先启动容器进行升级的操作,再进行配置文件的修改
poweroff
修改LXC配置文件
PVE主机中修改
-
查看对应的驱动id
# 显卡 ls -l /dev/dri/ # 一般核显为 # crw-rw---- 1 root video 226, 0 Oct 16 19:51 card0 # crw-rw---- 1 root render 226, 128 Oct 16 19:51 renderD128 # 我们使用的是 226, 0 以及 226, 128 # # kvm ls -l /dev/kvm # crw-rw---- 1 root kvm 10, 232 Nov 1 06:18 /dev/kvm # 我们使用的是 10, 232
-
编辑配置文件
nano /etc/pve/lxc/108.conf
写入以下代码
# 将显卡"直通"给LXC,但是不能进行屏幕输出 lxc.cgroup2.devices.allow: c 226:0 rwm lxc.cgroup2.devices.allow: c 226:128 rwm # 将/dev/kvm"直通"给LXC lxc.cgroup2.devices.allow: c 10:232 rwm lxc.autodev: 1 lxc.hook.autodev: /var/lib/lxc/108/mount_hook.sh # 如果你"直通"网卡的需求,取消以下注释并进行适当修改 # lxc.net.0.type: phys # lxc.net.0.link: enp7s0f1 # lxc.net.0.ipv4.address: 192.168.1.108/24 # lxc.net.0.ipv4.gateway: 192.168.1.100 # lxc.net.0.flags: up
-
编写驱动挂载脚本
nano /var/lib/lxc/108/mount_hook.sh
写入以下代码
mkdir -p ${LXC_ROOTFS_MOUNT}/dev/dri mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/card0 c 226 0 mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/renderD128 c 226 128 mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/kvm c 10 232
加入运行权限
chmod +x /var/lib/lxc/108/mount_hook.sh
-
如果你像我一样直通了网卡的话,请在PVE的管理页面中将桥接网卡删除
LXC 安装核显驱动
我的核显为P630,以下安装方式未必适用于你,但一般适用于intel的核显
-
安装 gpg-agent
apt-get install -y gpg-agent
-
获取密钥
wget -qO - https://repositories.intel.com/graphics/intel-graphics.key | apt-key add -
-
新增安装源
echo "deb [trusted=yes arch=amd64] https://repositories.intel.com/graphics/ubuntu focal main" > /etc/apt/sources.list.d/intel-graphics.list
-
安装驱动
apt-get update && apt-get install -y intel-media-va-driver-non-free intel-gpu-tools vainfo
-
测试驱动是否正常
vainfo
类似以下截图
LXC安装KDE桌面以及RDP远程桌面协议
-
intel核显驱动源跟KDE冲突,所以我们需要先移除掉该源
mv /etc/apt/sources.list.d/intel-graphics.list /etc/apt/sources.list.d/intel-graphics.list.bak
-
安装
apt-get update && apt-get install task-kde-desktop xrdp -y
-
把xrdp加到ssl-cert组
usermod -a -G ssl-cert xrdp
LXC RDP优化
请根据实际情况调整
-
回到PVE Host修改内核参数
Host主机中,修改内核参数
nano /etc/sysctl.conf
追加以下内容
# 8MB net.core.rmem_max=8388608 # 8MB net.core.wmem_max=8388608
使之生效
sysctl -p
-
LXC容器内修改XRDP配置文件
nano /etc/xrdp/xrdp.ini
找到tcp_send_buffer_bytes以及tcp_recv_buffer_bytes,默认情况下应该是被注释的,所以我们直接在其下方追加即可。
# 4MB tcp_send_buffer_bytes=4194304 # 4MB tcp_recv_buffer_bytes=4194304
重启RDP
systemctl restart xrdp
[可选]Debian11安装并配置OpenJDK 11环境
因为Android使用的是JAVA来开发,所以我也先安装一下OpenJDK
-
安装OpenJDK
apt-get install openjdk-11-jdk -y
-
配置JAVA_HOME环境
编辑profile文件
nano /etc/profile
写入以下代码
# JAVA_HOME export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" export PATH=$JAVA_HOME/bin:$PATH
使之生效
source /etc/profile
检查
echo $PATH
测试
java -version
[可选]将目标用户添加到kvm组
因为Android模拟器是使用KVM来运行的,而我远程登录一般不会使用Root账号,所以我将我的子账号添加到对应的用户组,以便我能够正常使用相应的功能
usermod -a -G kvm alain
完成部署
我们先关闭容器进行一次快照操作之后,准备进行最后的测试
poweroff
测试远程桌面
测试工具
Windows自带的远程桌面
测试结果
-
弹出安全提示,直接连接即可,后续可以对SSL进行升级以解决此问题
-
正常登录远程主机
我这是放久了,进入了登录界面,可能与你的不太一样
测试Android Studio以及Android模拟器
测试工具
Android Studio 2021.3.1 Patch 1
测试结果
安装Android Studio之后,正常启动Android模拟器
挂载网络磁盘以及备份
-
可以参考我的另外两篇文章里面关于网络磁盘挂载的方式
-
既然使用了All in one,或许你也会想要有相应的NAS备份方案,在使用远程备份的同时,我还有本地的另一个USB硬盘作为备份使用
文章评论
您好,请教一下您的图形环境支持硬件加速吗?为什么我安装了以后 GPU 加速好像不能正常工作,看视频会比较卡顿。
@lz00qs 我这里输入intel_gpu_top可以看到GPU的使用情况,是有在运行的,看视频卡顿要考虑远程桌面的影响
@Alain 我看了一下,网页播放视频的时候,intel_gpu_top 的 video 没有变化,请问您的也是这样吗?
@lz00qs 我用的自带的firefox,video是有动的,您参考下这个https://zhuanlan.zhihu.com/p/268401890看看是否有效