标签归档:vnc

Linux桌面与VNC服务安装记录

CentOS 7.x中安装VNC:VNC安装的是TigerVnc
安装GNOME Desktop

yum groupinstall "GNOME Desktop" "Graphical Administration Tools"

安装TigerVnc

yum install tigervnc-server

TigerVnc主要安装了两个软件包:

rpm -qa | grep vnc
tigervnc-server-minimal-1.8.0-1.el7.x86_64
tigervnc-server-1.8.0-1.el7.x86_64


rpm -ql tigervnc-server-minimal-1.8.0-1.el7.x86_64
/usr/bin/Xvnc
/usr/bin/vncconfig
/usr/bin/vncpasswd


rpm -ql tigervnc-server-1.8.0-1.el7.x86_64
/etc/sysconfig/vncservers #被/usr/lib/systemd/system/vncserver@.service替换
/usr/bin/vncserver
/usr/bin/x0vncserver
/usr/lib/systemd/system/vncserver@.service
/usr/lib/systemd/system/xvnc.socket
/usr/lib/systemd/system/xvnc@.service

Vncserver实际是Xvnc的包装。默认,VNC针对每个用户开一个桌面,每个桌面对应一个端口号,比如桌面号是:1,说明端口对应5901。

模板配置文件:

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
User=<USER>

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStart=/usr/bin/vncserver %i
PIDFile=/home/<USER>/.vnc/%H%i.pid
ExecStop=-/usr/bin/vncserver -kill %i

[Install]
WantedBy=multi-user.target

这个模板配置中已经说明应该如何操作,首先拷贝这个模板文件,把用真实的用户替代,%i就是桌面号(:1),以下是一个针对root用户的模板:

#######################################
# /usr/lib/systemd/system/vncserver@:1.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
User=root

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=-/usr/bin/vncserver -kill :1
ExecStart=/usr/bin/vncserver :1
PIDFile=/root/.vnc/%H:1.pid
ExecStop=-/usr/bin/vncserver -kill :1

[Install]
WantedBy=multi-user.target

注意这是针对root用户的,所以PIDFile文件位置是/root/.vnc,如果是普通用户应该是/home/xxx/.vnc。

以下一个自动脚本:

cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@\:1.service
sed -i 's/%i/:1/g' /lib/systemd/system/vncserver@\:1.service
sed -i 's/<USER>/root/g' /lib/systemd/system/vncserver@\:1.service
sed -i 's/home\/root/root/g' /lib/systemd/system/vncserver@\:1.service

设置密码(注意是在当前用户下),比如是root,就在root下运行vncpasswd,会把密码写入到当前用户的.vnc目录中。

自启动设置:

systemctl enable vncserver@:1.service
systemctl start vncserver@:1.service
systemctl status vncserver@:1.service
systemctl disable initial-setup-text.service

systemctl enable vncserver@:2.service
systemctl start vncserver@:2.service
systemctl status vncserver@:2.service
systemctl disable initial-setup-text.service

以上的脚本实际是/usr/bin/vncserver的包装器,后面的桌面号会锁定到用户,如果进程异常退出,在重启时VNC会自动分配另一个桌面号。锁定的逻辑实际是往tmp中添加一个文件,所以如果进程异常退出需要手动删除锁定文件。

另外,如果修改了/lib/systemd/system/vncserver@\:1.service文件,需要运行systemctl daemon-reload。

命令行用法:

/usr/bin/vncserver -h

usage: vncserver [:<number>] [-name <desktop-name>] [-depth <depth>]
                 [-geometry <width>x<height>]
                 [-pixelformat rgbNNN|bgrNNN]
                 [-fp <font-path>]
                 [-cc <visual>]
                 [-fg]
                 [-autokill]
                 [-noxstartup]
                 [-xstartup <file>]
                 <Xvnc-options>...

       vncserver -kill <X-display>

       vncserver -list

所以如果需要指定分辨率,可以添加-geometry 1440×900, 如果需要指定颜色深度(会影响网络传输流量),可以指定-depth 24

Root用户无法启动Chrome,修改/usr/bin/google-chrome:

if [[ -n "$CHROME_USER_DATA_DIR" ]]; then
  # Note: exec -a below is a bashism.
  exec -a "$0" "$HERE/chrome"  \
    --user-data-dir="$CHROME_USER_DATA_DIR" "$@"
else
  exec -a "$0" "$HERE/chrome"  "$@" --no-sandbox --user-data-dir
fi

Ubuntu中安装VNC(vnc4server):
更新系统:

apt-get update
apt-get upgrade

Gnome桌面环境安装:

apt-get install x-window-system-core
apt-get install gdm
apt-get install ubuntu-desktop
apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal

安装VNC

apt-get install vnc4server

dpkg -l | grep vnc
dpkg -L vnc4server
/usr/bin/x0vnc4server
/usr/bin/vnc4passwd
/usr/bin/Xvnc4
/usr/bin/vnc4config
/usr/bin/vnc4server

修改配置:

cp ~/.vnc/xstartup  ~/.vnc/xstartup.bak
vi ~/.vnc/xstartup

#!/bin/sh  
  
export XKL_XMODMAP_DISABLE=1  
unset SESSION_MANAGER  
unset DBUS_SESSION_BUS_ADDRESS  
  
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup  
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources  
xsetroot -solid grey  
vncconfig -iconic &  
 
gnome-panel &  
gnome-settings-daemon &  
metacity &  
nautilus &  
gnome-terminal &

启动服务,需要指定桌面号(需要切换到具体的用户):

vncserver -kill :1
vncserver :1

Ubuntu中的vnc4server实际没有提供自启动脚本,启动关闭都需要首先切换到具体用户,并且需要准确对应桌面号,为了开机启动,需要在rc.local中加入类似脚本:

su www -c '/usr/bin/vncserver -name xxx -geometry 1366x768 :10’

注:进程如果异常退出,对应的桌面号可能被锁定。