在實(shí)際維護(hù)遠(yuǎn)程linux服務(wù)器主機(jī)時(shí),有時(shí)候純命令行模式可能無(wú)法滿足我們的需要,這時(shí)候需要使用遠(yuǎn)程主機(jī)的GUI模式,即能看到服務(wù)器的桌面,一般會(huì)使用兩種方式:Xmanager或者VNC。我一開始使用的是Xmanager,版本是Xmanager5 Enterprise,但是在連接服務(wù)器時(shí),可以連接上(已經(jīng)看到主機(jī)名),卻無(wú)法打開桌面,折騰了很久終于放棄,選擇了VNC,相比之下方便很多。下面就自己的實(shí)踐經(jīng)驗(yàn)小結(jié)下,需要的朋友可以看看。 說(shuō)明下我這里CentOS主機(jī)已經(jīng)安裝了Gohome桌面,沒(méi)有安裝的請(qǐng)安裝一個(gè)gui桌面。 一、Linux主機(jī)安裝VNC服務(wù) 1、安裝vnc-server VNC分為服務(wù)端和客戶端,linux服務(wù)器主機(jī)需要安裝vncserver,centos7下一般使用tigervnc。 root下執(zhí)行命令: #yum install -y tigervnc-server
安裝完畢后需要配置。 2、配置vnc-server
進(jìn)入目錄 #cd /lib/systemd/system #ls
我們會(huì)看到有個(gè)service叫做vncserver@.service,這就是我們需要的vnc服務(wù)。但是需要對(duì)它進(jìn)行配置才可以使用。假設(shè)我們當(dāng)前為root用戶配置遠(yuǎn)程桌面,配置流程如下: 首先,復(fù)制該service,命名為vncserver@:1.service, #cp vncserver@.service vncserver@:1.service
然后修改vncserver@:1.service #vi vncserver@:1.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=/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
這里需要且只需要做一種替換:將< User>替換為需要配置的用戶。注意因?yàn)閞oot的home目錄就是/root/,而不是/home/root/,所以替換后文本如下: [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=/sbin/runuser -l root -c “/usr/bin/vncserver %i ” PIDFile=/root/.vnc/%H%i.pid ExecStop=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’ [Install] WantedBy=multi-user.target
如果是非root用戶,例如用戶admin,PIDFile處應(yīng)該是: ExecStart=/sbin/runuser -l admin -c “/usr/bin/vncserver %i ” PIDFile=/home/admin/.vnc/%H%i.pid
最后Esc+:wq保存退出。 3、啟動(dòng)vnc-server
在剛才的配置文件中,有這樣一段說(shuō)明: # Quick HowTo: # 1. Copy this file to /etc/systemd/system/vncserver@:.service # 2. Edit and vncserver parameters appropriately # (“runuser -l -c /usr/bin/vncserver %i -arg1 -arg2”) # 3. Run systemctl daemon-reload # 4. Run `systemctl enable vncserver@:.service
即配置完后,還需執(zhí)行 #systemctl daemon-reload #systemctl enable vncserver@:1.service
然后開啟vnc服務(wù) #systemctl start vncserver@:1.service
查看啟動(dòng)是否成功 #systemctl status vncserver@:1.service 如果現(xiàn)實(shí)active即表示開啟成功。下面設(shè)置下vnc連接密碼, 執(zhí)行 #vncpassword
提示輸入密碼并確認(rèn),這是供遠(yuǎn)程連接時(shí)驗(yàn)證用的,自己設(shè)置一下即可。配置好以后可以重啟下vnc服務(wù) #systemctl restart vncserver@:1.service 4、配置防火墻 vnc服務(wù)雖然開啟了,但是如果遠(yuǎn)程客戶端需要連接,還需要為防火墻增加配置以開放端口。一般vnc服務(wù)是以590+x作為訪問(wèn)端口,x為配置的service@:x,例如此處的vncserver@:1.service,則端口是5901。 執(zhí)行命令 #vi /etc/sysconfig/iptables
在 -A INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT 下方添加配置 -A INPUT -p tcp -m state –state NEW -m tcp –dport 5901 -j ACCEPT 然后保存退出,重啟防火墻。到這里基本的vnc服務(wù)端配置就結(jié)束了。 二、客戶端遠(yuǎn)程連接
配置好了服務(wù)端的vnc服務(wù)后,遠(yuǎn)程就可以連接了。這里使用的是win7下連接,客戶端使用的是tigervnc-1.5.0,百度下一般都有,下載后直接安裝,安裝過(guò)程中可以去掉作為服務(wù)端的勾選,不過(guò)沒(méi)關(guān)系。之后進(jìn)入安裝目錄,找到vncviewer.exe,雙擊執(zhí)行,輸入ip和端口號(hào),點(diǎn)擊connection即可,然后按照提示輸入之前配置的訪問(wèn)密碼,回車,即可看到遠(yuǎn)程的linux主機(jī)桌面。 三、開啟多個(gè)vncserver
有時(shí)候我們可能需要不止一個(gè)用戶的桌面環(huán)境,比如我在遠(yuǎn)程安裝oracle時(shí),還需要一個(gè)oracle用戶的桌面環(huán)境,而之前僅僅配置了root用戶的,下面介紹下配置多用戶的vncserver。配置思路很簡(jiǎn)單,就是配置多個(gè)vncserver@:n.service。 1、復(fù)制vncserver@.service
假設(shè)我們的用戶已經(jīng)建立好,這里以admin為例。首先以root用戶登錄,在 #cd /lib/systemd/system
目錄下,和前述一樣,拷貝配置文件,不過(guò)這里不是:1,而是:2,數(shù)字可以自己設(shè)置,一般遞增。 #cp vncserver@.service vncserver@:2.service
然后修改vncserver@:2.service #vi vncserver@:2.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=/sbin/runuser -l admin -c “/usr/bin/vncserver %i ” PIDFile=/home/admin/.vnc/%H%i.pid ExecStop=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’ [Install] WantedBy=multi-user.target
保存退出。然后按照配置文件提示,執(zhí)行 #systemctl daemon-reload #systemctl enable vncserver@:2.service 2、修改vnc登錄驗(yàn)證密碼
執(zhí)行完畢后,切換到admin賬戶,執(zhí)行 $vncserver :2
會(huì)要求輸入驗(yàn)證密碼 You will require a password to access your desktops. Password: Verify: xauth: file /home/admin/.Xauthority does not exist
New ‘localhost.localdomain:2 (admin)’ desktop is localhost.localdomain:2 Creating default startup script /home/admin/.vnc/xstartup Starting applications specified in /home/admin/.vnc/xstartup Log file is /home/admin/.vnc/localhost.localdomain:2.log 3、啟動(dòng)服務(wù)
之后切換回root,執(zhí)行 #systemctl deamon-reload #systemctl start vncserver@:2.service
這時(shí)候提示啟動(dòng)不成功,執(zhí)行命令 #vncserver :2
提示已經(jīng)有一個(gè)vncserver as :2 running了,這時(shí)候我們先要?dú)⒌暨@個(gè)進(jìn)程,執(zhí)行命令 #vncserver -kill :2
但一般沒(méi)有用,那么我們 # ps -ef | grep vnc
查看vncserver :2的進(jìn)程id,如pid為1311,則執(zhí)行 #kill -9 1311
然后再執(zhí)行 #systemctl start vncserver@:2.service
還是報(bào)錯(cuò),查看日志, #journalctl -xn 提示需要?jiǎng)h除/tmp/.X2-lock 執(zhí)行 #rm /tmp/.X2-lock
再次啟動(dòng) #systemctl start vncserver@:2.service 還是報(bào)錯(cuò),查看日志,提示需要?jiǎng)h除/tmp/.X11-unix/X2 執(zhí)行 #rm /tmp/.X11-unix/X2
再次啟動(dòng) #systemctl start vncserver@:2.service
終于不報(bào)錯(cuò)了,然后查看狀態(tài) #systemctl status vncserver@:2.service
發(fā)現(xiàn)已經(jīng)啟動(dòng),則完成。之后注意不要忘了如前述配置防火墻。 到此為止就結(jié)束了所有的配置,在實(shí)際啟動(dòng)過(guò)程中可能會(huì)遇到各種各樣的問(wèn)題,大家只要靜下心來(lái)查看日志,一般都能解決。有錯(cuò)誤的地方,還望指正。
centostigervnc [root@localhost system]# systemctl daemon-reload [root@localhost system]# systemctl enable vncserver@:1.service [root@localhost system]# systemctl start vncserver@:1.service Job for vncserver@:1.service failed. See ‘systemctl status vncserver@:1.service’ and ‘journ alctl -xn’ for details.[root@localhost system]# systemctl status vncserver@:1.service vncserver@:1.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled) Active: failed (Result: exit-code) since Thu 2015-04-23 16:04:58 CST; 14s ago Process: 24764 ExecStart=/sbin/runuser -l root -c /usr/bin/vncserver :1 -geometry 1280x10 24 -depth 24 (code=exited, status=98) Process: 24760 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Apr 23 16:04:58 localhost.localdomain systemd[1]: vncserver@:1.service: control proces…98 Apr 23 16:04:58 localhost.localdomain systemd[1]: Failed to start Remote desktop servi…). Apr 23 16:04:58 localhost.localdomain systemd[1]: Unit vncserver@:1.service entered fa…e. Hint: Some lines were ellipsized, use -l to show in full. [root@localhost system]#
把 vncserver@:1.service 中的 Type 參數(shù)設(shè)置為 simple 再執(zhí)行 systemctl daemon-reload 再執(zhí)行 systemctl start vncserver:1.service 即可解決
|