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

本文为旧版本文档,新版文档在 : https://dev.leiyanhui.com/docker/debian-desktop/

debian12 i3 xrdp novnc X11Forwarding include pulseaudio-xrdp

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

# 特性

轻量 干净 基于i3 和 openbox 可以用xrdp novnc(webvnc) vnc x11 等方式运行。
vnc和novnc使用简洁的原生openbox xrdp使用依赖快捷键但是更高效的i3 集成软件:

  • debian 12 bookworm
  • i3 openbox polybar rofi alacritty dunst zsh
  • supervisord 服务器管理 及python3
  • tigervnc
  • novnc websockify
  • ttf-wqy-zhenhei fonts-jetbrains-mono fonts-noto-color-emoji
    更新记录和计划

# 安装

1
2
3
4
5
6
docker run -itd --restart=always \
    --name debian-i3 --hostname debian-i3 \
    -p 3389:3389 -p 2222:22 \
    -p 8080:8080   -p 5900-5905:5900-5905  \
    -v /mnt:/disk \
   -e TZ=Asia/Shanghai joyanhui/debian-i3-xrdp-novnc  /autoStart.sh

3389是xrdp端口 2222 是ssh x11端口 8080 是novnc 端口 5900-5905 是vnc端口默认用户是5900

# 默认用户名和密码

xrdp x11 ssh 的默认用户名:yanhui 密码:1 (只有一个数字1) vnc 密码:111111(六个数字1)

# 为什么选择debian

因为比Ubuntu干净,debian一直被诟病的包少的问题,debian12 增加了11089个包,总数量已经到了64419,部分官方仓库没有的软件,软件开发者自己一般提供源或者deb。
放弃archlinux改debian 是因为有部分商业软件只有deb rpm包aur里面没有,自己解包太麻烦。 arch的 一些其他缺点这里不多说。
而且debian12 2年更新 5年安全,以后也可以平滑升级到更新版本。

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

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

# 更换为其他桌面的方法

例如,要换成 xfce4首先安装sudo apt install xfce4 ,然后修改 /autoStart.sh 可以更换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 使用说明

# 怎么装中文输入法

1
sudo apt install fcitx5 fcitx5-chinese-addons

安装完成后,注销重新登录一次桌面,会自动加载,然后在托盘位置配置添加输入法即可,拼音输入法可导入搜狗细胞词库,具体自己研究。

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

# 新建用户

1
2
sudo adduser YouName 
sudo usermod -aG sudo YouName
# 新用户vnc密码

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

# 更新 vnc服务

修改里面的用户名

1
nano /autoStart.sh

# 删除默认用户

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

# 怎么修改密码

# 用户密码

命令:passwd

# vnc密码

命令:vncpasswd .vnc/passwd ,需要重启vnc服务,命令查看 cat /autoStart.sh

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

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

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

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

# novnc默认地址

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

# novnc如何走https

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

# 20230704版本vnc连不上

1
rm  /tmp/.X0-lock

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

# 如何关掉vnc

1
2
3
4
5
sudo rm /etc/supervisor/conf.d/novnc.conf
sudo apt purge  tigervnc-standalone-server novnc python3-websockify
# 注释掉  /autoStart.sh 的启动命令
# su  -c "/usr/bin/vncserver -xstartup /usr/bin/i3 -geometry 1900x930 -localhost no :0 " yanhui
# sudo apt autoremove && sudo apt autoclean && sudo apt clean # 可选清理操作

然后卸载

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

~/.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下的浏览器均不兼容的哈。

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

# 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

# 如何修改分辨率

# vnc novnc

1
nano /autoStart.sh # geometry 后面的参数是vnc的分辨率

# xrdp

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

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

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

# 自己添加开机启动项

三个方法

  • 跟随 i3桌面启动的软件,可以添加到i3 配置文件中。例如截图软件,蓝牙托盘等等
  • 后台服务,可以添加到 /autoStart.sh
  • 需要守护的后台服务 添加到 supervisor中目录: /etc/supervisor/conf.d/

# 安装常用软件

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

1
2
3
sudo apt install firefox-esr # 火狐
sudo apt install chromium #chrome 开源版,闭源版本 去google下载deb 或者添加源
sudo apt install thunar nemo  nautilus #  任选一个  dolphin有依赖冲突哈 ,参考后面  libpulse-mainloop-glib0 错误的说明

# libpulse-mainloop-glib0 错误

libpulse-mainloop-glib0 : Depends: libpulse0 (= 16.1+dfsg1-2+b1) but 1:13.99.1-1ubuntu3.10 is to be installed 部分软件 例如 pavucontrol dolphin 需要新版 libpulse0,但是因为 考虑到pulseaudio-module-xrdp 稳定性,我用的旧版本。 你可以卸载掉,然后重新编译pulseaudio-module-xrdp。

# 不喜欢默认用户的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宿主机 目录映射

docker 创建命令 里面的 -v /mnt:/disk 就是把上层宿主的 /mnt 穿透到容器内部的/disk。 注意权限问题哈,可以用uid映射方法,权限要求不严格 也可以直接 chmod -R 777 /mnt解决

# 如何使用显卡加速

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

1
2
3
4
5
6
7
8
9
docker run -itd --restart=always \
    --name debian-i3 --hostname debian-i3 \
    -p 3389:3389 -p 2222:22 \
    -p 8080:8080   -p 5900-5905:5900-5905  \
    -v /mnt:/disk \
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidiactl:/dev/nvidiactl \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
  -e TZ=Asia/Shanghai joyanhui/debian-i3-xrdp-novnc  /autoStart.sh

# 目录和文件说明

# 启动文件

启动文件分两个

  • /autoStart.sh 启动vnc 并启动supervisord
  • /etc/supervisor/conf.d/ supervisord 服务目录

# 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 设计