docker运行debian桌面 包含i3 xrdp(带声音) x11 vnc novnc

debian12 i3 xrdp novnc X11Forwarding include pulseaudio-xrdp

没多余的软件,内存占用200M左右,甚至浏览器都没有。 后文有详细的使用方法和 安装其他的软件的方法。

# 本文说明

joyanhui/debian-i3-xrdp-novnc 使用docker 和 lxc/lxd ,本文可能会滞后最新,更多问题问题请查看docker和lxd的使用手册。
如果您没有使用过i3 openbox lxc等软件,务必仔细阅读本文,至少会让你熟悉了解相关操作。

# 特性

轻量 干净 基于i3 和 openbox 可以用xrdp novnc(webvnc) vnc x11 等方式运行。
是一个完整的操作系统,systemd可正常使用,甚至可以再次安装docker
vnc和novnc使用简洁的原生openbox xrdp使用依赖快捷键但是更高效的i3
采用docker 运行lxd的方法 alpine3.18.2 => lxd
集成软件:

  • debian 12 bookworm
  • i3 openbox polybar rofi alacritty dunst zsh firefox-esr thunar gvfs gvfs-backends gvfs-fuse sshfs
  • tigervnc
  • novnc websockify
  • ttf-wqy-zhenhei fonts-jetbrains-mono fonts-noto-color-emoji 微软雅黑
  • 服务管理支持:systemd supervisor

更新记录和计划
公开的搭建过程
如果你使用的旧版请查看旧版说明

# 安装

1
2
3
docker run -itd --restart=always   --name dt --hostname dt --privileged=true \
   -p 3389:3389 -p  222:22 -p 2222:2222 -p 8080:8080  -p 5900-5905:5900-5905     -v /mnt:/mnt \
   joyanhui/debian-i3-xrdp-novnc  sh /boot.sh

3389是xrdp端口 2222 是ssh x11端口 8080 是novnc 端口 5900-5905 是vnc端口默认用户是5900 ,222 是alpine容器的ssh端口

20230707 之前版本是纯docker实现,不包含浏览器和文件管理器,之后的版本是lxd lxc实现 并带firefox-esr 和thunar 网络挂载 并支持 systemd。

# 默认账号 以及相关用户名和密码

总共有三个密码:

# debian的系统用户

用户名:yanhui 密码:1 (只有一个数字1)
这个用户名密码,同时对应debian的 ssh xrdp 的默认账号 对应默认端口:2222 和 3389 debian默认的root 没设置密码,禁止ssh登陆

1
2
3
# 修改密码
docker exec -it dt  lxc exec dt /bin/bash
passwd yanhui

# debian的vnc的密码

vnc 密码:111111(六个数字1)
此密码用于vnc 和novnc登陆 默认用户yanhui的桌面

1
2
3
4
# 修改密码
docker exec -it dt  lxc exec dt /bin/bash
su yanhui
vncpasswd

# alpine的root账户

用户名 root 密码:1(只有一个数字1)
此密码同时左右 alpine的ssh登陆密码,对应默认端口:222

1
2
3
# 修改密码
docker exec -it dt /bin/sh
passwd

部署完毕后,务必第一时间修改密码!

# 为什么选择debian 而不是arch nixos

因为比Ubuntu干净,debian一直被诟病的包少的问题,debian12 增加了11089个包,总数量已经到了64419,部分官方仓库没有的软件,软件开发者自己一般提供源或者deb。
放弃archlinux改debian 是因为有部分商业软件只有deb rpm包aur里面没有,自己解包太麻烦。
arch和nixos一些其他缺点这里不多说。
其实最主要的是 不折腾 稳如老狗,以及 个人喜好 以及和服务器端的环境一致性

# 为什么用docker 套lxd

不直接用lxd 是因为部分环境不支持,另外docker的分层commit 更方便。 更可以推送到自己的私有regditer
不直接用docker 是因为 docker 限制太多,不算是太完整的系统,lxc lxd 是一个完整的系统。
所以20230707版本以后 改为 docker运行alpine 然后在alpine内用lxd运行 debian12
alpine是一个只有3m大小的linux系统,在用lxd嵌套后,比旧方案多占用30-60M内存,80M硬盘,但是带来的是一个完整的linux体验,并且性能吊打虚拟机模式!

# 为什么选择i3 和openbox 怎么换其他桌面

因为轻量,以及个人习惯,你可以自由换成其他任意桌面系统。 因为i3的高效来自快捷键,但是在浏览器中会有大量快捷键冲突。所以新版本在novnc中使用了同样轻量的openbox。
而在xrdp中,因为全屏模式 和部分支持rdp的客户端软件 均可做到键盘映射,所以xrdp使用了i3桌面

# 更换为其他桌面的方法

例如,要换成 xfce4首先安装sudo apt install xfce4 ,然后修改 ~/.vnc/xstartup 可以更换vnc和novnc的桌面。
修改用户目录下的 ~/.xsession 文件可以替换xrdp的桌面。然后卸载掉i3或者openbox即可:sudo apt purge i3 or sudo apt purge openbox

# novnc vnc为什么是黑屏

就是黑屏的,因为为了节省资源用的没有任何扩展的openbox。 也没有壁纸,右键 有惊喜!

# 怎么启动shell 和常见快捷键

基本是i3 的默认快捷键
点屏幕顶部的 Apps> 系统 >终端 (部分菜单无用,是因为没对应软件,你可以看一下polybar的配置文件 )
如果是rdp远程桌面下,按下键盘 : win+回车
启动管理器(开始菜单) :win d
程序切换 alt+tab 修改窗口大小:按住win 再按住 鼠标右键 来回拖动
修改窗口位置:按住win 再按住 鼠标左键 来回拖动
关闭软件:win shift q
注销:win shift e
更多使用方法 自己看一下i3 使用说明

# 如何从宿主机器直接进去debian shell

两步

1
2
3
4
5
6
# 进入docker alpine
docker exec -it dt  /bin/sh
# 进入lxc
lxc exec dt /bin/bash
# 或者直接 
docker exec -it dt  lxc exec dt /bin/bash

第一个dt 是docker的容器名称,第二个 是lxc 的容器名称
你也可以在登陆 vnc/xrdp后直接运行

# 怎么装中文输入法

1
sudo apt install fcitx5 fcitx5-chinese-addons

openbox 需要右键手动加载,其他现代的桌面系统,包括i3。安装完成后,注销重新登录一次桌面,会自动加载,拼音输入法可导入搜狗细胞词库,具体自己研究。
默认中英文切换快捷键是 ctrl+空格 ,如果你在非全屏的xrdp 或novnc /vnc 下切换,注意和本地的输入法快捷键冲突问题。

# 怎么新建用户怎么删除默认用户

# 新建用户

1
2
sudo adduser YouName 
sudo usermod -aG sudo YouName

# 新用户vnc密码

ssh 或者 xrdp 登陆新用户后,运行 vncpasswd

# 更新 vnc服务

修改里面的用户名

1
2
nano /etc/systemd/system/vncserver@0.service
nano /etc/supervisor/conf.d/novnc.conf 

# 删除默认用户

1
2
sudo deluser yanhui
rm -rf /home/yanhui # 在确认用不到以后 再删除 为了不污染全局,桌面相关的配置文件都在这个目录里面

# 怎么修改密码

# 用户密码

命令:passwd

# vnc密码

命令:vncpasswd .vnc/passwd ,需要重启vnc服务,查看 systemctrl restart vncserver@0

# x11转发模式如何使用输入法

修改一下fcitx5的中英文切换快捷键,和你当前电脑的不能一样。然后先执行 fcitx5& 再执行对应的软件。

# x11 转发模式部分软件很卡

没得办法,可以适当优化一下自己网上搜吧。另外 火狐在x11转发模式下默认配置要比chrome系更卡。

# novnc默认地址

http://你的ip:8080/ 其中端口docker内部默认使用8080,外部端口是你自己映射的。

# novnc如何走https

建议用Nginx 统一反代一下,或带supervisor启动的时候带证书。

# vnc连不上

此问题只在 20230707之前版本存在

1
rm  /tmp/.X0-lock

把上面这行代码添加到 /autoStart.sh 第二行,然后重启整个容器

# 天气预报出错以及如何修改天气预报城市

~/.config/polybar/weather-plugin.py 这个文件 天气预报接口 用的openweathermap,内置的我自己的接口,用的人多了会受限制无法使用。
你自己去注册一个账号,然后创建一个key。查询一下你所需要城市的id,然后修改里面的网址部分的 id(城市) appid(你自己的)
https://api.openweathermap.org/data/2.5/weather?id=1793724&appid=440b47a5ffbc5421e4a9befcbc4d635b&units=Metric&lang=zh_cn
你如果不想用,直接在 polybar的配置文件里面删掉即可。

# 如何调音量

在i3配置文件里面修改
调整音量 快捷键:win ctrl ↑ 和 win ctrl ↓,(左右是静音)也可以鼠标移动到 polybar 音量图标位置滚轮调整。
进阶用法,自己配置i3和polybar

# vnc 和xrdp 桌面不同步

是的,这是两个虚拟显示,所以不同步。如果要显示同样的内容,可以在xrdp登陆的时候 选择登陆到vnc 而不是org 。

# noVNC 网页访问按键失灵乱跳

1、关闭宿主的中文输入法,使用宿主机系统自带的英文输入法
2、更换浏览器,目前发现chrome edge之类的 在noVNC下兼容性不如新版火狐 火狐 96以后版本测试运行良好,safari 和 ios下的浏览器均不兼容的哈。

# xrdp 登陆后桌面灰色无显示

长期无操作后,锁屏了而已。依次盲输入密码然后按下回车 验证成功后 即可登入桌面。
如果你不需要锁屏功能,可以删掉 sudo apt purge i3lock

# 没声音或者 顶部音量不显示

# vnc 和x11 没声音

vnc和x11 就是没声音的话,如果确实要,请用pulseaudio转发 或者换xrdp

# xrdp的polybar 偶尔不显示音量

这个是polybar 在 debian12下 和 pulseaudio-module-xrdp 之间的bug,已经提交过issue,等更新吧。
临时解决方法,在桌面登陆一会后 重启pulseaudio和polybar

1
2
killall pulseaudio && pulseaudio &
sh .config/polybar/polybar_run.sh

20230707 以后的版本,可以在polybar顶部菜单用依次点击: APPS > polybar > 重启声音 APPS > polybar > 重载polybar

# 如何修改分辨率

# vnc novnc

1
/etc/systemd/system/vncserver@0.service   # geometry 后面的参数是vnc的分辨率

# xrdp

xrdp的分辨率 由你的客户端 发起的时候配置

# openbox的壁纸点好多次才换一张

壁纸是随机更换的默认就带了两张,所以会有50%概率不更换。

# 安装常用软件

点屏幕左上角 APPS > 系统 > 终端 输入 sudo apt install <包名>命令;启动软件 APPS > 系统 > rofi-run 选择软件或者输入软件名称
或者xrdp全屏模式下 novnc 左侧快捷键也可: win+回车 win+d

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
sudo apt install firefox-esr # 火狐 20230707以后版本自带
sudo apt install chromium #chrome 开源版,闭源版本 去google下载deb 或者添加源
sudo apt install  nemo  nautilus # 文件管理器  任选一个  20230707以后版本自带 thunar
# todesk  中文不显示 需要另外处理,这里不多说
wget https://newdl.todesk.com/linux/todesk-v4.3.1.0-amd64.deb
sudo apt-get install ./todesk-v4.3.1.0-amd64.deb #sudo apt purge todesk 
# 远程其他电脑
sudo apt install freerdp2-x11 #xfreerdp
sudo apt install remmina  # 可选包 remmina-plugin-x2go
# neofetch 命令行装b工具
sudo apt install neofetch
# flameshot 截图工具
sudo apt install flameshot 
# linuxqq
wget https://dldir1.qq.com/qqfile/qq/QQNT/ad5b5393/linuxqq_3.1.2-13107_amd64.deb
sudo apt-get install ./linuxqq_3.1.2-13107_amd64.deb

# 如何访问文件

# thunar 方式

20230707以后版本集成了thunar 和smb sshfs webdav访问组件。 打开 thunar ,地址栏输入:smb://10.1.1.100 或者dav://10.1.1.100 即可

# 文件挂载

参考后文 目录映射 方法

# 不喜欢默认用户的shell

默认用户 yanhui的 shell是 zsh 并用oh-my-zsh定制了一下,不喜欢 可以 直接输入exit 退出到bash。
然后自己删掉 .bashrc 的最后一行 zsh 三个字母。最后卸载掉 zsh ,并删除 .oh-my-zsh 目录即可

# pve lxc ct 或者docker宿主机 目录映射 端口 和显卡等

# pve 硬盘到lxc

请看:https://dev.leiyanhui.com/pve/lxc-mount-dir/

# docker宿主机 目录映射

默认 映射 /mnt/sda1 到最终的debian12
如果要映射其他目录,先映射到docker内,确保早docker内可以访问的情况下在docker内如下命令映射到 lxc

1
lxc config device add dt sda1 disk source=/mnt/sda1 path=/mnt/sda1  

更多使用方法,以及权限问题,请参考lxd手册

# 端口

先映射端口到docker,而后在docker内 用如下命令映射到lxc

1
lxc config device add dt demoName proxy listen=tcp:0.0.0.0:8888 connect=tcp:127.0.0.1:8888

更多使用方法,请参考lxd手册

# 如何使用显卡加速

以nvidia为例在创建docker的时候 把显卡挂进去即可

1
2
3
4
5
docker run ....
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidiactl:/dev/nvidiactl \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
 ....

# pve 群晖 unraid esxi 下的安装方式

pve下,你可以用lxc/vm 运行docker的方式运行,也可以,从本镜像内提取lxc模板直接导入到 CT容器。 其他系统 建议直接docker运行

# 目录和文件说明

/boot.sh 在docker内 其他文件在 debian内

# 启动文件

# boot.sh

/boot.sh 在docker内 用于启动alpine的 ssh 和 lxd/lxc 的debian

# systemd 和 supervisord

systemd 和 supervisord 在 lxc的debian内
novnc使用supervisord启动:/etc/supervisor/conf.d/,vnc和其他服务使用systemd启动:/etc/systemd/system/

# i3 配置文件

/home/yanhui/.config/i3/config

# openbox配置文件

/home/yanhui/.config/openbox/menu.xml #右键菜单
feh.sh rofi.sh #右键菜单对应 壁纸和rofi的的执行脚本

# 壁纸目录

i3配置文件调用feh随机选 /home/yanhui/.config/i3/bg/

# polybar

  • /home/yanhui/.config/polybar/config.ini # polybar的全部配置文件 包括左上角菜单
  • /home/yanhui/.config/polybar/polybar_run.sh # 启动和重启polybar的脚本
  • /home/yanhui/.config/polybar/weather-plugin.py # polybar 天气预报插件 用的 openweathermap.org的接口 内置key用的人多有可能失效,自己去注册一个换掉。

# rofi

/home/yanhui/.config/rofi/config.rasi

# dunst

/home/yanhui/.config/dunst/dunstrc

# alacritty

/home/yanhui/.config/alacritty/alacritty.yml

# zsh

/home/yanhui/.zshrc /home/yanhui/.oh-my-zsh

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计