Centos7安裝VNCserver,並設置為開機自啟動服務的方法


1.概念

VNC是一個遠程連接工具
VNC is used to display an X windows session running on another computer. Unlike a remote X connection, the xserver is running on the remote computer, not on your local workstation. Your workstation ( Linux or Windows ) is only displaying a copy of the display ( real or virtual ) that is running on the remote machine.

There are several ways to configure the vnc server. This HOWTO shows you how to configure VNC using the 'vncserver' service as supplied by CentOS.

2.安裝

2.1客戶端:

yum install vnc 

2.2 服務端:

1) 保證已安裝windows桌面:yum groupinstall "GNOME Desktop Environment"
或者最小化安裝:yum install xterm 2) 安裝vnc-server: yum install vnc-server 

3.設置並運行

3.1 創建一個用於vnc連接的用戶user01,並切換到user01登陸,當然,你也可以直接用root用戶或其他已存在的普通用戶:

[clouder@ana53 soft]$ su root
密碼:
[root@ana53 soft]# useradd user01 [root@ana53 soft]# passwd user01 更改用戶 user01 的密碼 。 新的 密碼: 無效的密碼: 密碼少於 8 個字符 重新輸入新的 密碼: passwd:所有的身份驗證令牌已經成功更新。 [root@ana53 soft]# su - user01 [user01@ana53 ~]$ cd ~ [user01@ana53 ~]$ ll .vnc ls: cannot access .vnc: No such file or directory 

3.2 執行vncserver ,第一次執行會要求設置用於客戶端通過vnc連接該用戶的密碼,以后想更改可以通過vncpasswd更改該連接密碼。

注意最后問是否設置一個只讀密碼要選否,否則客戶端登陸只會看到一個黑屏:

[user01@ana53 ~]$ vncserver 
You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n xauth: file /home/user01/.Xauthority does not exist New 'ana53:3 (user01)' desktop is ana53:3 Creating default startup script /home/user01/.vnc/xstartup Creating default config /home/user01/.vnc/config Starting applications specified in /home/user01/.vnc/xstartup Log file is /home/user01/.vnc/ana53:3.log 

默認是從1開始,但我當前已經有2個vncserver運行,所以現在是3了,第一次執行vncserver后,會在該用戶的家目錄下創建一個.vnc目錄

[user01@ana53 ~]$ ll .vnc/ total 40 -rw-rw-r-- 1 user01 user01 23646 Aug 14 09:56 ana53:3.log -rw-rw-r-- 1 user01 user01 5 Aug 14 09:55 ana53:3.pid -rw-r--r-- 1 user01 user01 332 Aug 14 09:55 config -rw------- 1 user01 user01 8 Aug 14 09:55 passwd -rwxr-xr-x 1 user01 user01 92 Aug 14 09:55 xstartup 

3.3 vncserver -list 查看當前用戶開了多少個vncserver,ps -ef |grep vnc看到我有其他2個用戶也起了vncserver,這個可以忽略哈:

[user01@ana53 ~]$ vncserver -list TigerVNC server sessions: X DISPLAY # PROCESS ID :3 2338 [user01@ana53 ~]$ ps -ef|grep vnc user1 1750 1 0 09:54 pts/4 00:00:00 /usr/bin/Xvnc :2 -auth /home/user1/.Xauthority -desktop ana53:2 (user1) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/user1/.vnc/passwd -rfbport 5902 -rfbwait 30000 user01 2338 1 1 09:55 pts/2 00:00:00 /bin/Xvnc :3 -auth /home/user01/.Xauthority -desktop ana53:3 (user01) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/user01/.vnc/passwd -rfbport 5903 -rfbwait 30000 user01 3215 2268 0 09:56 pts/2 00:00:00 grep --color=auto vnc root 31155 1 0 09:34 ? 00:00:01 /usr/bin/Xvnc :1 -auth /root/.Xauthority -desktop ana53:1 (root) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /root/.vnc/passwd -rfbport 5901 -rfbwait 30000 

3.4 客戶端連接服務端:

本機也可以作為客戶端vnc連接到自己,有條件的再找一個機器作為客戶端連接比較符合實際應用場景,我使用本機作為客戶端通過vnc連接自己,
我通過這個網址下載vncviewer 客戶端工具:
https://www.techspot.com/downloads/downloadnow/5760/?evp=bec5c83724706eae8692a26f014582ed&file=4
輸入127.0.0.1:5903 ,輸入我設置的vnc密碼,連接成功。但出現花屏,原因是分辨率設得太低,於是vnc連接成功后:
鼠標放到頂部,點擊"Properties"圖標--Options--General--Picture quality:設置為Medium,High,或Automatic,點擊右下方ok確認

4.其他問題

4.1 第一次執行vncserver,里面好像有句錯誤提示bad display name in ……,原因是解析不了這個hostname,通過在/etc/hosts添加ip 和hostname映射解決:

[root@ana53 .vnc]# vncserver xauth: (stdin):1: bad display name "ana53:2" in "add" command New 'ana53:2 (clouder)' desktop is ana53:2 Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/ana53:2. 解決方法:vi /etc/hosts: 192.168.1.253 ana53 

4.2 vncviewer連接,始終黑屏:

  1. 可能你在第一次給用戶設置vnc密碼時,最后Would you like to enter a view-only password (y/n)? 回答了y,所以,你應該登陸ssh那個用戶,運行vncpasswd,重新設置密碼,不要再回y,要回復n;
  2. 可能是~/.vnc/xstartup 配置文件問題,貼出我2個用戶的配置,root用戶的是我修改的,user01是默認的,但是2個都能正常運行。
[root@ana53 .vnc]# cat xstartup #!/bin/sh #unset SESSION_MANAGER #unset DBUS_SESSION_BUS_ADDRESS #exec /etc/X11/xinit/xinitrc # 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 & xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & gnome-session & 
[user01@ana53 .vnc]$ cat xstartup 
#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec /etc/X11/xinit/xinitrc 

4.3把vncserver做成系統服務,這樣比較方便,固定端口號n,而且可以設置開機自啟,要有sudo權限才能關閉。

注意,復制vncserver@.service的時候,必須改為vncserver@:n.service,n表示第幾個vncserver,默認從1開始,記得必須要冒號,否則會服務是起不來的:

1) 復制系統服務,並重命名

如此案例中我的user01用戶開的vncserver 的display窗口是第3號,所以我要把這個vncserver做成系統服務,就復制一個vncserver@:3.service到/etc/systemd/system 目錄下,這個根據每個人的具體情況而定,當然,可以運行vncserver :n 來指定要起第幾號窗口:

[root@ana53 .vnc]# cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:3.service 

2)修改復制后的系統服務里面的<USER>為你想要通過vnc登陸的用戶,注意要把尖括號去掉了

注意PIDFile=/home/<USER> 這里,如果是root用戶,應該把/home去掉,因為root用戶的home目錄不是在/home下,而是在/根目錄下。

[root@ana53 .vnc]# vim /etc/systemd/system/vncserver@:4.service   [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 

修改后:

[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 user01 -c "/usr/bin/vncserver %i" PIDFile=/home/user01/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target 

3) 重載系統服務,修改了服務文件,必須重載才能生效:

[root@ana53 .vnc]# systemctl daemon-reload 

4) 啟動該vncserver,並設為開機自啟:

[root@ana53 .vnc]# systemctl status vncserver@:4.service ● vncserver@:4.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:4.service; disabled; vendor preset: disabled) Active: active (running) since 二 2018-08-14 10:27:21 CST; 9min ago Main PID: 9930 (Xvnc) CGroup: /system.slice/system-vncserver.slice/vncserver@:4.service ‣ 9930 /usr/bin/Xvnc :4 -auth /home/user01/.Xauthority -desktop ana53:4 (user01) -fp catalogue:/etc/X11/fontpath.d -geometry 102... 8月 14 10:27:17 ana53 systemd[1]: Starting Remote desktop service (VNC)... 8月 14 10:27:21 ana53 systemd[1]: Started Remote desktop service (VNC). [root@ana53 .vnc]# systemctl enable vncserver@:4.service Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:4.service to /etc/systemd/system/vncserver@:4.service. 

5) 關閉vncserver

方法一:使用vncserver -kill :n 命令,注意,kill后面有一個空格。這個命令只能kill 掉自己的vncserver,因為他是去/home/$user/.vnc/去找pid的:
[user01@ana53 .vnc]$ ps -ef|grep vnc user1 1750 1 0 09:54 pts/4 00:00:00 /usr/bin/Xvnc :2 -auth /home/user1/.Xauthority -desktop ana53:2 (user1) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/user1/.vnc/passwd -rfbport 5902 -rfbwait 30000 root 3623 1 0 10:00 ? 00:00:00 /usr/bin/Xvnc :1 -auth /root/.Xauthority -desktop ana53:1 (root) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /root/.vnc/passwd -rfbport 5901 -rfbwait 30000 user01 18521 1 1 11:02 ? 00:00:00 /usr/bin/Xvnc :4 -auth /home/user01/.Xauthority -desktop ana53:4 (user01) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/user01/.vnc/passwd -rfbport 5904 -rfbwait 30000 user01 19146 2268 0 11:03 pts/2 00:00:00 grep --color=auto vnc [user01@ana53 .vnc]$ vncserver -kill :2 Can't find file /home/user01/.vnc/ana53:2.pid You'll have to kill the Xvnc process manually [user01@ana53 .vnc]$ vncserver -kill :4 Killing Xvnc process ID 18521 [user01@ana53 .vnc]$ ps -ef|grep vnc user1 1750 1 0 09:54 pts/4 00:00:00 /usr/bin/Xvnc :2 -auth /home/user1/.Xauthority -desktop ana53:2 (user1) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/user1/.vnc/passwd -rfbport 5902 -rfbwait 30000 root 3623 1 0 10:00 ? 00:00:00 /usr/bin/Xvnc :1 -auth /root/.Xauthority -desktop ana53:1 (root) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /root/.vnc/passwd -rfbport 5901 -rfbwait 30000 user01 19302 2268 0 11:03 pts/2 00:00:00 grep --color=auto vnc 
方法二:使用systemctl 命令,前提user01有sudo 權限:
[user01@ana53 .vnc]$ sudo systemctl stop vncserver@:2.service [sudo] password for user01: [user01@ana53 .vnc]$ sudo systemctl stop vncserver@:4.service [user01@ana53 .vnc]$ ps -ef|grep vnc root 3623 1 0 10:00 ? 00:00:00 /usr/bin/Xvnc :1 -auth /root/.Xauthority -desktop ana53:1 (root) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /root/.vnc/passwd -rfbport 5901 -rfbwait 30000 user01 20152 2268 0 11:06 pts/2 00:00:00 grep --color=auto vnc 
之前一直起不來服務,原來寫錯了,少了個冒號:
[root@ana53 system]# systemctl status vncserver@:1.service vncserver@:1.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled; vendor preset: disabled) Active: active (running) since 2018-08-14 09:26:00 CST; 2s ago Process: 28940 ExecStart=/usr/sbin/runuser -l root -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS) Process: 28938 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 28972 (Xvnc) CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service 28972 /usr/bin/Xvnc :1 -auth /root/.Xauthority -desktop ana53:1 (root) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -p... 814 09:25:57 ana53 systemd[1]: Starting Remote desktop service (VNC)... 814 09:26:00 ana53 systemd[1]: Started Remote desktop service (VNC). [root@ana53 system]# systemctl status vncserver@1.service vncserver@1.service - Remote desktop service (VNC) Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since 2018-08-14 09:24:20 CST; 2min 1s ago Process: 28767 ExecStart=/usr/sbin/runuser -l <USER> -c /usr/bin/vncserver %i (code=exited, status=1/FAILURE) Process: 28763 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) 814 09:24:20 ana53 systemd[1]: Starting Remote desktop service (VNC)... 814 09:24:20 ana53 runuser[28767]: runuser: user <USER> does not exist 814 09:24:20 ana53 systemd[1]: vncserver@1.service: control process exited, code=exited status=1 814 09:24:20 ana53 systemd[1]: Failed to start Remote desktop service (VNC). 814 09:24:20 ana53 systemd[1]: Unit vncserver@1.service entered failed state. 814 09:24:20 ana53 systemd[1]: vncserver@1.service failed.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM