VNC需要系統安裝的有桌面,如果是生產環境服務器,安裝時使用的最小化安裝,那么進行下面操作安裝GNOME 桌面。
# 列出的組列表里有GNOME Desktop。
yum grouplist
#安裝 GNOME 桌面
yum groupinstall -y "GNOME Desktop"
# 安裝完成后,修改默認啟動方式為圖形化界面
systemctl set-default graphical.target //設置成圖形模式
# 如果要換回來
systemctl set-default multi-user.target //設置成命令模式
#然后重啟系統即可
#或者startx開啟圖形界面。第一次啟動可能時間會長一點,耐心等待即可。
第一步:安裝VNC服務軟件,使用root用戶執行以下命令(以下操作沒有特別說明均在root用戶):
yum -y install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts
yum -y install tigervnc-server -y
安裝后可以使用如下命令來驗證是否安裝成功:
rpm -qa|grep tigervnc-server
第二步:復制vnc的啟動操作腳本, vncserver@:1.service中的:1表示"桌面號",啟動的端口號就是5900+桌面號
,即是5901,如果再有一個就是2啦,端口號加1就是5902,以此類推:
如果開啟一個桌面,那就是vncserver@:1.service,使用的端口號是5900+1=5901,若是開啟第二個桌面,那就是vncserver@:2.service,使用的端口號是5900+1=5902
# 復制一個服務設置的模板
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
第三步:編輯 /etc/systemd/system/vncserver@:1.service
vim /etc/systemd/system/vncserver@:1.service
# 找到其中的<USER> ,修改成自己的用戶名,如果是root用戶登錄桌面就使用root用戶,如果使用普通用戶登錄桌面使用普通用戶 (這里的用戶是系統中事先存在的用戶)
# 修改此服務配置
# 以下為root用戶的配置,每一個用戶,都需要單獨設置一個監聽服務。且配置不同
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver_wrapper root %i
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
----------------------------------------------------------------------------------------------------------
# 對於普通用戶,加入用戶名為:amos
# 下面舉例進行設置: 首先一樣復制一個server配置。改名為vncserver@:2.service
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service
# 然后進行修改
vim /etc/systemd/system/vncserver@:2.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver_wrapper amos %i
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
修改完畢后保存退出vim。
第四步:設置vnc密碼,輸入兩次密碼,輸入完成后會提示是否設置view-only password(“View-only password”密碼,只允許查看,無控制權限。)這個可設可不設:
設置vnc密碼,vnc的密碼跟系統的用戶密碼不一樣,是使用vnc viewer登陸時需要使用的密碼。上述配置文件用的是哪個用戶就需要在哪個用戶下執行這個設置密碼的操作
若是配置設置的是root用戶,那就在root用戶下設置這個密碼,若是普通用戶amos,那就先切換到amos用戶下,然后再設置這個密碼
[root@localhost ~]# vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
# 這里不添加只讀賬號密碼
# 每個不用的系統用戶,設置密碼時,需要切換到該用戶下,執行此命令
# 如:su amos 切換到amos用戶再執行上vncpasswd設置密碼
第五步:啟動服務:
systemctl daemon-reload
systemctl start vncserver@:1.service
systemctl enable vncserver@:1.service
第六步:查看端口是否監聽:
netstat -lnpt|grep Xvnc
第七步:開放防火牆的5901端口:
# 根據監聽的端口,進行端口開放,每個用戶會對應一個端口,第一個用戶默認為5901端口。我這里是root用戶
firewall-cmd --zone=public --add-port=5901/tcp --permanent
firewall-cmd --reload
# 如果防火牆沒有啟動需要先啟動防火牆。
# 或者直接停止防火牆:systemctl stop firewalld.service && systemctl disable firewalld.service
第八步:關閉SELinux,編輯/etc/selinux/config
文件:
vim /etc/selinux/config
將selinux設置為disabled
到這里vnc服務已經安裝完畢,下面就可使用vnc客戶端來連接。
去vnc官網下載vnc viewer,用於連接vnc server ,本身是開源的,放心使用。
官方下載地址:https://www.realvnc.com/en/connect/download/viewer/
根據自己的電腦的操作系統選擇進行下載,我這里是windows,所以選擇windwos 64位版。下載后安裝使用。
第九步:在vnc客戶端(vnc viewer)輸入服務器IP:桌面號(如110.16.16.2:5901),輸入后回車:
第十步:輸入IP后會彈出確認,點擊contiue即可:
第十一步:輸入vnc密碼:
第十二步:登錄成功,輸入遠程機器密碼(登錄成功后需要輸入遠程機器的用戶的密碼,如果沒有密碼就可以直接進入系統):
第十三步:成功進入遠程桌面:
至此整個CentOS7.x 的VNC服務安裝完畢.
小貼士:vnc服務只能在局域網使用,如果在外網,則需要有公網IP地址,VNC不具備內網穿透功能。
啟動錯誤
[root@localhost ~]# 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: failed (Result: exit-code) since 四 2021-11-11 14:06:30 CST; 6s ago
Process: 3828 ExecStart=/usr/bin/vncserver_wrapper root %i (code=exited, status=2)
Process: 3822 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
Main PID: 3828 (code=exited, status=2)
11月 11 14:06:29 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)...
11月 11 14:06:29 localhost.localdomain systemd[1]: Started Remote desktop service (VNC).
11月 11 14:06:30 localhost.localdomain vncserver_wrapper[3828]: Warning: localhost.localdomain:1 is taken because of /tmp/....x/X1
11月 11 14:06:30 localhost.localdomain vncserver_wrapper[3828]: Remove this file if there is no X server localhost.localdomain:1
11月 11 14:06:30 localhost.localdomain vncserver_wrapper[3828]: A VNC server is already running as :1
11月 11 14:06:30 localhost.localdomain vncserver_wrapper[3828]: FATAL: 'runuser -l root' failed!
11月 11 14:06:30 localhost.localdomain systemd[1]: vncserver@:1.service: main process exited, code=exited, status=2/INVALI...UMENT
11月 11 14:06:30 localhost.localdomain systemd[1]: Unit vncserver@:1.service entered failed state.
11月 11 14:06:30 localhost.localdomain systemd[1]: vncserver@:1.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
解決辦法
# cd /tmp/.X11-unix/
刪除里面的文件
[root@localhost tmp]# cd .X11-unix
[root@localhost .X11-unix]# ll
總用量 0
srwxrwxrwx 1 root root 0 11月 11 13:44 X0
srwxrwxrwx 1 root root 0 11月 11 13:12 X1
[root@localhost .X11-unix]# rm -rf X0
[root@localhost .X11-unix]# rm -rf X1
[root@localhost .X11-unix]# systemctl start vncserver@:1.service
[root@localhost .X11-unix]# 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 四 2021-11-11 14:07:12 CST; 4s ago
Process: 3905 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
Main PID: 3911 (vncserver_wrapp)
CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
├─3911 /bin/sh /usr/bin/vncserver_wrapper root :1
└─4113 sleep 0.1
11月 11 14:07:12 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC)...
11月 11 14:07:12 localhost.localdomain systemd[1]: Started Remote desktop service (VNC).
11月 11 14:07:15 localhost.localdomain vncserver_wrapper[3911]: New 'localhost.localdomain:1 (root)' desktop is localhost.l...in:1
11月 11 14:07:15 localhost.localdomain vncserver_wrapper[3911]: Starting applications specified in /root/.vnc/xstartup
11月 11 14:07:15 localhost.localdomain vncserver_wrapper[3911]: Log file is /root/.vnc/localhost.localdomain:1.log
Hint: Some lines were ellipsized, use -l to show in full.