题目:docker创建Ubuntu,Ubuntu创建桌面环境,本机使用VNC连接
为什么我想要用ubuntu的桌面环境?因为我有一些软件开发需要显示GUI,就这么简单。
参考:给docker中的ubuntu系统安装桌面程序:我们可以创建好容器。
打开powershell或者linux终端,输入以下命令创建容器
warning:千万不要用主机的10000端口,改为3316,掉坑了
docker run -tid -p 3316:22 -p 5900:5900 -p 5901:5901 --name displaytest_container --privileged=true ubuntu:20.04 /bin/bash
从docker for windows软件中,可看到容器正在运行
在终端输入以下命令,进入容器控制台
docker exec -it displaytest_container /bin/bash
安装配置ssh的必要工具
apt update
apt install vim
apt install openssh-client
apt install openssh-server
apt install net-tools
编辑sshd_config文件
vim /etc/ssh/sshd_config
添加PermitRootLogin yes
给root设置密码
passwd root
启动ssh
service ssh start
ps -e|grep ssh
设置容器启动就开启ssh
vim /root/.bashrc
# 在.bashrc末尾添加如下代码
service ssh start
用自己喜欢的ssh工具连接,这里我用electerm
在electerm终端输入以下命令,安装ubuntu桌面
apt-get update
apt install -y gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal ubuntu-desktop
添加vnc4server的安装源
vim /etc/apt/sources.list
添加
deb http://archive.ubuntu.com/ubuntu/ bionic universe
更新源
apt update
安装vncserver
apt install vnc4server
先启动以下vncserver生成一些文件
vncserver
初次启动需要设置密码
备份启动设置
cp ~/.vnc/xstartup ~/.vnc/xstartup.bak
编辑vnc启动设置
vim ~/.vnc/xstartup
替换为以下内容
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
x-window-manager &
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
重新启动vnc
vncserver -kill :1
vncserver -geometry 1920x1080 :1
如果是重新启动容器后再启动vnc
第一次需要进行以下设置
vim /root/.bashrc
# 在.bashrc末尾添加如下代码
rm -rf /tmp/.X1-lock
rm -rf /tmp/.X11-unix/X1
每次启动容器后,都需要执行以下命令来启动桌面(不可以用自动运行,否则终端无法运行)
vncserver -geometry 1920x1080 :1
下载vnc客户端并安装
连接,可见已经连上了
启动终端
安装python3-pip
apt install python3-pip
安装matplotlib
pip3 install matplotlib
启动python3,输入以下代码
import matplotlib.pyplot as plt
import numpy as np
mat = np.arange(0, 100).reshape(10, 10)
plt.matshow(mat)
plt.show()