`

CentOS 7安装VNC Server

 
阅读更多

本文操作流程具体参考自https://docs.oracle.com/cd/E52668_01/E54669/html/ol7-vnc-config.html

 

系统版本

 

$ uname -a

Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64

内核

 

 

$ cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

当初安装时选择的是最小化的安装模式,所以如果你已经安装了图形化界面的系统可以跳过下面的X-Window安装,直接安装VNC Server

 

 

以下命令必须以 root 权限运行,要切换到 root,或者在想要执行操作的用户添加到sudo中,那每个命令前面都要加上sudo前缀表示当前用户临时拥有像root一样的执行权限

# visudo

找到“root ALL=(ALL) ALL”,在下面添加一行:XXX ALL=(ALL) ALL,XXX为用户名

好了,废话不多说,开始安装VNC Server

 

1 首先需要安装X-Window

 

# yum check-update

# yum groupinstall "X Window System"

# yum install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts

或者直接下面一条命令

# yum groupinstall -y "GNOME Desktop"

 

 

2 安装 VNC 服务器(需要有网,如果没网的话,自己设置yum源为CD安装盘)

 

# yun list|grep vnc     #查看yum下相关的vnc包信息

# rpm -qa|grep vnc     #查看vnc是否安装

# yum install tigervnc-server -y     #CentOS/RHEL 6开始版本的安装

如果是CentOS/RHEL 5,则执行下面命令

# yum install vnc-server -y

 

 

3 设置vncpasswd密码

# vncpasswd

....输入该用户的登录密码,如果执行该命令没反应的话,建议最好重装vncserver

如果设置普通用户的登录密码,请先切换到普通用户下,再执行vncpasswd进行设置

 

在这里要科普下vnc的相关知识点

# systemctl status vncserver@:.service

● vncserver@:.service - Remote desktop service (VNC)

   Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; disabled; vendor preset: disabled)

   Active: inactive (dead)

# systemctl is-enabled vncserver@.service

disabled

为什么会是不可使用呢?这是因为每个用户在VNC守护服务线程下,都是一个独立的实例;另一方面,VNC不能只运行一个单线程来处理每一个用户请求。

每一个用户连接到VNC时,VNC都会启动一个新的守护实例。CentOS 7使用systemd守护线程来初始化其他服务。每一个通过yum安装的服务都是运行在systemd下,并且各自的服务单元模块文件都存放于/lib/systemd/system目录下。

在/etc/systemd/system/目录下存放着一个跟相关服务的链接,在boot启动时,可以自动地根据链接来启动线程。

所以在这个案例中,你可以使用下面的命令看到该文件

# ls -l /lib/systemd/system/vnc*

-rw-r--r--. 1 root root 1738 Apr  1  2016 /lib/systemd/system/vncserver@.service

# ls -l /etc/systemd/system/*.wants/vnc*

ls: cannot access /etc/systemd/system/*.wants/vnc.*: No such file ore direcotry

所以可以直接复制vncserver@.service文件来作为各自实例的配置文件

参考自https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-remote-access-for-the-gnome-desktop-on-centos-7

 

4 创建VNC配置文件

正常安装好vncserver后,该文件/lib/systemd/system/vncserver@.service是有内容的,如果该文件的内容为空,建议重装vncserver,减少不必要的麻烦

这里的vncserver@:1.service为root用户的登录配置文件,vncserver@:2.service为普通用户的配置文件

 

# cp /lib/systemd/system/vncserver@.service \

/etc/systemd/system/vncserver@:1.service

# cp /lib/systemd/system/vncserver@.service \

/etc/systemd/system/vncserver@:2.service

 

# vi /etc/systemd/vncserver@:1.service

# The vncserver service unit file

#

# Quick HowTo:

# 1. Copy this file to /etc/systemd/system/vncserver@.service

# 2. Edit <USER> and vncserver parameters appropriately

#   ("runuser -l <USER> -c /usr/bin/vncserver %i -arg1 -arg2")

# 3. Run `systemctl daemon-reload`

# 4. Run `systemctl enable vncserver@:<display>.service`

#

# DO NOT RUN THIS SERVICE if your local area network is

# untrusted!  For a secure way of using VNC, you should

# limit connections to the local host and then tunnel from

# the machine you want to view VNC on (host A) to the machine

# whose VNC output you want to view (host B)

#

# [user@hostA ~]$ ssh -v -C -L 590N:localhost:590M hostB

#

# this will open a connection on port 590N of your hostA to hostB's port 590M

# (in fact, it ssh-connects to hostB and then connects to localhost (on hostB).

# See the ssh man page for details on port forwarding)

#

# You can then point a VNC client on hostA at vncdisplay N of localhost and with

# the help of ssh, you end up seeing what hostB makes available on port 590M

#

# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.

#

# Use "-localhost" to prevent remote VNC clients connecting except when

# doing so through a secure tunnel.  See the "-via" option in the

# `man vncviewer' manual page.

 

 

[Unit]

Description=Remote desktop service (VNC)

After=syslog.target network.target

 

[Service]

Type=forking

# Clean any existing files in /tmp/.X11-unix environment

ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

ExecStart=/usr/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"

PIDFile=/home/<USER>/.vnc/%H%i.pid

ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

 

[Install]

WantedBy=multi-user.target

修改上面红色字体为用户名和所在的家目录即可,然后保存,执行下面命令使其生效

# systemctl daemon-reload

 

5 启动VNCServer服务

# systemctl start vncserver@\:1.service

Job for vncserver@:1.service failed because the control process exited with error code. See "systemctl status vncserver@:1.service" and "journalctl -xe" for details.

出现错误,按照错误提示,执行下面命令

# systemctl status vncserver@\:1.service

● vncserver@:1.service - Remote desktop service (VNC)

   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; disabled; vendor preset: disabled)

   Active: failed (Result: exit-code) since Mon 2016-11-21 20:34:40 CST; 1min 32s ago

  Process: 11295 ExecStart=/usr/sbin/runuser -l root -c /usr/bin/vncserver %i (code=exited, status=1/FAILURE)

  Process: 11292 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)

 

Nov 21 20:34:39 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)...

Nov 21 20:34:40 localhost.localdomain runuser[11295]: Password:

Nov 21 20:34:40 localhost.localdomain systemd[1]: vncserver@:1.service: control process exited, code=exited status=1

Nov 21 20:34:40 localhost.localdomain systemd[1]: Failed to start Remote desktop service (VNC).

Nov 21 20:34:40 localhost.localdomain systemd[1]: Unit vncserver@:1.service entered failed state.

Nov 21 20:34:40 localhost.localdomain systemd[1]: vncserver@:1.service failed.

看到上面的错误提示,注意到好像还没设置root用户的vncpasswd密码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

# vncspasswd    #设置root的vncpasswd密码

# su XXX

$ vncpasswd    #设置XXX的vncpasswd密码

# systemctl start vncserver@\:1.service    #启动vnc服务

# systemctl stop vncserver@\:1.service    #关闭vnc服务

# systemctl status vncserver@\:1.service

● vncserver@:1.service - Remote desktop service (VNC)

   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; disabled; vendor preset: disabled)

   Active: active (running) since Mon 2016-11-21 20:38:42 CST; 1min 55s ago

  Process: 11346 ExecStart=/usr/sbin/runuser -l root -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS)

  Process: 11343 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)

 Main PID: 11367 (Xvnc)

   CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service

           ‣ 11367 /usr/bin/Xvnc :1 -desktop localhost.localdomain:1 (root) -auth /root/.Xauthority -geometry 1024x7...

 

Nov 21 20:38:39 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)...

Nov 21 20:38:42 localhost.localdomain systemd[1]: Started Remote desktop service (VNC).

看到这种提示并显示active(running)说明vncserver启动成功了

# systemctl enable vncserver@:1.service    #设置开机自启动

Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:1.service to /etc/systemd/system/vncserver@:1.service.

# systemctl disable vncserver@:1.service    #取消开机自启动

Removed symlink /etc/systemd/system/multi-user.target.wants/vncserver@:1.service.

注:如果有修改配置文件,都必须重新加载配置和重启服务

# systemctl daemon-reload

# systemctl restart vncserver@:1.service

 

6 配置防火墙

centos从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的

# firewall-cmd --state    #查看防火墙的启动状态

running

# systemctl start firewalld    #如果没启动防火墙的话则启动,为了网络安全

# firewall-cmd --zone=public --add-service=vnc-server --permanent    #永久的把vnc-server服务加进防火墙

# firewall-cmd --zone=public --list-services

# firewall-cmd --zone=public --add-port=5901-5902/tcp --permanent    #永久的把该端口添加进防火墙

success

# firewall-cmd --zone=public --list-ports    #查看开放的端口有哪些

# firewall-cmd --reload    #重启防火墙,让刚才的设置生效

7 配置VNC桌面(根据自己的偏好设置启动什么GUI)[可选]

# vi ~/.vnc/xstartup

在末尾添加

startkde &

设置成链接时启动kde

# systemctl restart vncserver@\:1.service

 

8 在Windows下,安装VNC Viewer,输入正确IP地址、窗口号和密码,即可远程

或者使用SSH通道的客户端程序,如:PuTTY

参考自https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-remote-access-for-the-gnome-desktop-on-centos-7

 

在使用的过程中,VNC界面有时会没有反应,这时应该如何操作呢

通过SSH登录系统,然后通过命令重启自己的VNC Server

$ ls ~/.vnc/ #查看自己的端口号是多少

$ vncserver -kill :2 #结束VNC服务及远程桌面

$ vncserver :2 -geometry 1280x760

此时通过VNC Viewer登录试试,应该可以了

注意:vncserver只能由启动它的用户来关闭,即时是root也不能关闭其它用户开启的vncserver,除非用kill命令杀死进程

 

在安装的过程中,一开始用yum安装时显示complete,但在进行配置时发现配置文件是空,按照网上说的各种教程来设置时,也都出现各种其他问题,这时就要考虑是否卸载掉然后重新装过了,在该过程中遇到的错误有:

# /bin/systemctl start vncserver.service#启动vncserver服务 

出现:

Failed to start vncserver.service: Unit vncserver.service failed to load: No such file or directory.

# systemctl enable vncserver.service

出现:

Failed to execute operation: Access denied

# service vncserver status

Redirecting to /bin/systemctl status  vncserver.service

● vncserver.service

   Loaded: not-found (Reason: No such file or directory)

   Active: inactive (dead)

# systemctl status vncserver@:.service

● vncserver@:.service

   Loaded: masked (/usr/lib/systemd/system/vncserver@.service; masked; vendor preset: disabled)

   Active: inactive (dead)

# systemctl is-enabled vncserver@.service

masked

# systemctl enable vncserver@:1.service

The unit files have no [Install] section. They are not meant to be enabled

using systemctl.

Possible reasons for having this kind of units are:

1) A unit may be statically enabled by being symlinked from another unit's

   .wants/ or .requires/ directory.

2) A unit's purpose may be to act as a helper for some other unit which has

   a requirement dependency on it.

3) A unit may be started when needed via activation (socket, path, timer,

   D-Bus, udev, scripted systemctl call, ...).

http://lists.opensuse.org/opensuse-bugs/2013-11/msg04269.html

Mailinglist Archive: opensuse-bugs (5295 mails)

# systemctl start vncserver@:1.service

Job for vncserver@:1.service failed because a configured resource limit was exceeded. 

See "systemctl status vncserver@:1.service" and "journalctl -xe" for details.

# systemctl -l status vncserver@:1.service

● vncserver@:1.service - Remote desktop service (VNC)

   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; static; vendor preset: disabled)

   Active: failed (Result: resources) since Mon 2016-11-21 18:49:42 CST; 12min ago

  Process: 9809 ExecStart=/sbin/runuser -l root -c /usr/bin/vncserver %i -geometry 1280x760 (code=exited, status=0/SUCCESS)

  Process: 9804 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)

 

Nov 21 18:49:42 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)...

Nov 21 18:49:42 localhost.localdomain systemd[1]: PID file /root/.vnc/localhost.localdomain:1,pid not readable (yet?) after start.

Nov 21 18:49:42 localhost.localdomain systemd[1]: Failed to start Remote desktop service (VNC).

Nov 21 18:49:42 localhost.localdomain systemd[1]: Unit vncserver@:1.service entered failed state.

Nov 21 18:49:42 localhost.localdomain systemd[1]: vncserver@:1.service failed.

# systemctl -l status vncserver@:1.service

● vncserver@:1.service - Remote desktop service (VNC)

   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; disabled; vendor preset: disabled)

   Active: failed (Result: resources) since Mon 2016-11-21 18:49:42 CST; 40min ago

 

Nov 21 18:49:42 localhost.localdomain systemd[1]: vncserver@:1.service failed.

Nov 21 19:15:55 localhost.localdomain systemd[1]: [/etc/systemd/system/vncserver@:1.service:11] Unknown lvalue 'ExectStop' in section 'Service'

Nov 21 19:15:55 localhost.localdomain systemd[1]: [/etc/systemd/system/vncserver@:1.service:13] Unknown section 'install'. Ignoring.

Nov 21 19:20:35 localhost.localdomain systemd[1]: [/etc/systemd/system/vncserver@:1.service:11] Unknown lvalue 'ExectStop' in section 'Service'

Nov 21 19:20:35 localhost.localdomain systemd[1]: [/etc/systemd/system/vncserver@:1.service:13] Unknown section 'install'. Ignoring.

Nov 21 19:20:45 localhost.localdomain systemd[1]: [/etc/systemd/system/vncserver@:1.service:11] Unknown lvalue 'ExectStop' in section 'Service'

Nov 21 19:20:45 localhost.localdomain systemd[1]: [/etc/systemd/system/vncserver@:1.service:13] Unknown section 'install'. Ignoring.

Nov 21 19:21:10 localhost.localdomain systemd[1]: Stopped Remote desktop service (VNC).

Nov 21 19:21:22 localhost.localdomain systemd[1]: [/etc/systemd/system/vncserver@:1.service:11] Unknown lvalue 'ExectStop' in section 'Service'

Nov 21 19:21:22 localhost.localdomain systemd[1]: [/etc/systemd/system/vncserver@:1.service:13] Unknown section 'install'. Ignoring.

Warning: vncserver@:1.service changed on disk. Run 'systemctl daemon-reload' to reload units.

# journalctl -xe|grep vncserver

...

-- Subject: Unit vncserver@:1.service has begun start-up

-- Unit vncserver@:1.service has begun starting up.

-- Subject: Unit vncserver@:1.service has failed

-- Unit vncserver@:1.service has failed.

Nov 21 19:32:48 localhost.localdomain systemd[1]: Unit vncserver@:1.service entered failed state.

Nov 21 19:32:48 localhost.localdomain systemd[1]: vncserver@:1.service failed.

# systemctl -l status vncserver@:1.service

● vncserver@:1.service - Remote desktop service (VNC)

   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; disabled; vendor preset: disabled)

   Active: failed (Result: resources) since Mon 2016-11-21 19:32:48 CST; 10min ago

 

Nov 21 19:32:47 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)...

Nov 21 19:32:48 localhost.localdomain systemd[1]: PID file /root/.vnc/localhost.localdomain:1,pid not readable (yet?) after start.

Nov 21 19:32:48 localhost.localdomain systemd[1]: Failed to start Remote desktop service (VNC).

Nov 21 19:32:48 localhost.localdomain systemd[1]: Unit vncserver@:1.service entered failed state.

Nov 21 19:32:48 localhost.localdomain systemd[1]: vncserver@:1.service failed.

# systemctl -l status vncserver@:1.service

● vncserver@:1.service - Remote desktop service (VNC)

   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled; vendor preset: disabled)

   Active: failed (Result: resources) since Mon 2016-11-21 20:12:15 CST; 57s ago

  Process: 10931 ExecStart=/sbin/runuser -l root -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS)

  Process: 10926 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)

 

Nov 21 20:12:15 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)...

Nov 21 20:12:15 localhost.localdomain systemd[1]: PID file /root/.vnc/localhost.localdomain:1.pid not readable (yet?) after start.

Nov 21 20:12:15 localhost.localdomain systemd[1]: Failed to start Remote desktop service (VNC).

Nov 21 20:12:15 localhost.localdomain systemd[1]: Unit vncserver@:1.service entered failed state.

Nov 21 20:12:15 localhost.localdomain systemd[1]: vncserver@:1.service failed.

 

 

# journalctl -xn|grep vncserver    #这个可以查看具体是什么错误信息

# netstat -tulnp    #查看vncserver启动状况

 

在设置的过程中要多看看错误信息,这样才能更好的对症下药,更快的解决问题

 

载掉vncserver

# yum erase tigervnc*

# rpm -qa|grep vnc #检查是否卸载掉

 

以上就是小弟我在安装VNC Server碰到的各种错误,不过最终还是靠自己努力搞定了,真的发自内心的开心~~~~,上面的见解纯属个人所见,如有不足之处,望指正,谢谢 :-)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics