欢迎访问我的博客,你的支持,是我最大的动力!

ubuntu 16.04 部署vnc允许多用户同时连接

Linux 小马奔腾 1442℃ 评论
目录:
[显示]

最近工作中需要为一台 ubuntu 16.04 服务器部署vnc环境,允许多个用户使用vnc远程登录办公,这里简要记录下部署过程
这里使用的是阿里云ECS服务器

安装图形界面

默认的ubuntu 16.04是命令行界面的,并没有安装图形界面,所以,先安装图形界面

查看ubuntu版本
cat /etc/issue
# Ubuntu 16.04.6 LTS \n \l

# 更新软件库
apt-get update
#升级软件
apt-get upgrade
# 安装ubuntu桌面系统
apt-get install ubuntu-desktop
reboot

默认,安装完桌面系统后,用阿里云控制台的web的远程连接进入后,只能用guest帐号登录,且不需要输入密码
此时,需要修改 /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf

# 文件 /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
# 修改前
[Seat:*]
user-session=ubuntu# 修改后
[Seat:*]
user-session=ubuntu
greeter-show-manual-login=true
allow-guest=false# 去除登录后的警告 修改/root/.profile
将最后一行 mesg n || true  改为 tty -s && mesg n || true
# 然后重启生效
支持unity图形界面的x11vnc 不支持多用户同时登录

由于ubuntu 16.04默认的桌面系统是采用unity的,其他vnc软件往往不支持
x11vnc依赖很小,支持unity桌面环境
缺点:x11vnc只支持单用户操作,不允许多用户同时使用,这还是因为x11vnc不会为远程控制的服务器创建额外的虚拟VNC桌面服务

# Step 1 - Install X11VNC  
sudo apt-get install x11vnc -y
# Step 2 - Specify Password to be used for VNC Connection
# 这一步会要求输入vnc的密码
sudo x11vnc -storepasswd /etc/x11vnc.pass
# Step 3 - Create the Service Unit File
cat > /lib/systemd/system/x11vnc.service << EOF
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared
[Install]
WantedBy=multi-user.target
EOF
# Step 4 -Configure the Service 
sudo systemctl enable x11vnc.service
sudo systemctl daemon-reload
sleep 10
# Step 5 - Restart System 
sudo shutdown -r now
tightvncserver / vnc4server 支持多用户同时登录

这两个软件区别不大,这使用的是tightvncserver
因为这两款软件对unity支持不好,所以可以使用xfce4或者gnome,当然,也可以同时安装这两个桌面

# 查看支持的vnc服务
apt-cache search vncserver# 安装gnome
apt-get install ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal
## 注意,这会安装完整的桌面环境,包括office和web浏览器等,下面是简化安装
apt-get install --no-install-recommends ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal# 安装xface4
apt-get install xfce4 xfce4-goodies# 安装vnc服务
apt-get install tightvncserver
## apt-get install vnc4server

vnc服务的管理
使用SSH转发 ssh -L 5901:127.0.0.1:5901 user@hostname     在本地执行,通过ssh转发到本地127.0.0.1:5901端口
启动 vncserver :1
关闭 vncserver -kill :1

多用户的部署
vnc默认端口是 5900+标识,如 vncserver :1 对应的端口就是 5900+1=5901,以此类推,当然,默认的5900是可以修改的,这里不做修改
使用 vncviewer 时,连接方式可以写为 x.x.x.x:5901  也可以写为 x.x.x.x:1
每个用户的vnc配置文件,位于 $HOME/.vnc/xstartup
需要为每个用户创建vnc登录密码和配置 $HOME/.vnc/xstartup

#1、启动用户 username 的vnc服务
su - username
vncserver :2
## 此时会要求输入vnc密码,需要记录这里输入的密码,这将是后面使用vncviewer登录时使用的密码
## 启动成功后,会自动生成 $HOME/.vnc/xstartup 文件,但这个默认生成的文件通常不能使用,因为unity的原因,需要修改
vncserver -kill:2
#2、编辑 $HOME/.vnc/xstartup 文件
su - username
vi $HOME/.vnc/xstartup
内容可参考下面两个配置

上面两个配置分别对应开启 xfce4桌面和gnome桌面

设置开机启动
rc.local方式 [有bug]

在 /etc/rc.loacl 中添加如下行

nohup runuser -l root       -c "/usr/bin/vncserver :1" &
nohup runuser -l usernae -c "/usr/bin/vncserver :2 -geometry 1024x600" &
exit 0

注册为服务:

systemctl daemon-reload
systemctl enable rc-local
systemctl start rc-local

这种方式的问题
vnc登录后,不能打开 shell 会报错:org.gnome.Terminal[3577]: Non UTF-8 locale (ANSI_X3.4-1968) is not supported!
应当是 runuser 命令的问题,暂时没有找到解决的方法

supervisor方式 [完美]

启动脚本

配置

这种方式没有 runuser 的问题
同时,可以单独重启某个用户的vnc服务
注意:从start.sh脚本中,可以看到,程序是卡在tail命令上的,那么,如果要关闭某个用户的vnc服务,显然,使用supervisorctl stop vnc2这种是不能实现的,需要使用命令来关闭
runuser -l username -c "/usr/bin/vncserver -kill :2"

补充:
CentOS7安装xrdp实现远程桌面连接(未验证)

yum grouplist
# Centos7提供了"Cinnamon Desktop","MATE Desktop","GNOME Desktop","KDE Plasma Workspaces","LXQt Desktop","Xfce"
# 安装Xfce桌面
yum -y install epel-release && yum groupinstall Xfce
# 安装Xrdp
yum -y install xrdp
systemctl start xrdp && systemctl enable xrdp
# 创建~/.Xclients,设置默认启动xfce4桌面
echo "xfce4-session" > ~/.Xclients
chmod +x .Xclients
# 在客户端远程连接

参考资料:
1、ubuntu16.4版本搭建VNC远程桌面多用户互不干扰
2、ubuntu16.04下安装vnc
3、ubuntu16.04 vnc server最简安装方式
4、Install VNC on Ubuntu 16.04

转载请注明:轻风博客 » ubuntu 16.04 部署vnc允许多用户同时连接

喜欢 (0)or分享 (0)