[Linux] Win 10 和 CentOS 7 远程桌面连接
Win 10 远程连接 CentOS 7
1 通过 ssh 连接命令行界面
- 在 CentOS 7 中安装 ssh 服务
- 在 Win 10 中使用 PuTTY 来通过 ssh 远程连接 CentOS 7 的命令行界面。
2 通过 vnc 连接图形界面
2.1 CentOS 7 配置 vncserver
在 CentOS 7 中安装
tigervnc
和tigervnc-server
:yum install -y tigervnc tigervnc-server
将
/lib/systemd/system/[email protected]
复制为/etc/systemd/system/vncserver@:1.service
,cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:\1.service
新文件的
:1
表示将配置 vnc 端口号为 1 的 vnc server desktop,使远程用户可以通过X.X.X.X:1
来登录本机图形界面,其中X.X.X.X
为本机 IP 地址,可以通过改变数字 i 来配置多个vncserver@:i.service
:该配置文件的注释中有如何快速开始的教程:
# Quick HowTo:
# 1. Copy this file to /etc/systemd/system/[email protected]
# 2. Replace <USER> with the actual user name and edit vncserver
# parameters appropriately
# (“User=<USER>” and “/home/<USER>/.vnc/%H%i.pid”)
# 3. Runsystemctl daemon-reload
# 4. Runsystemctl enable vncserver@:<display>.service
进入
/etc/systemd/system/
目录,修改vncserver@:1.service
文件的配置,上面的注释只说将<USER>
替换为合适的用户名,并设置相应的正确参数。但是我在实际配置过程中因为这里配置不对,会造成 vnc server 启动失败,远程连接失败等各种问题。最后,经过多次尝试以及参考网上博客,我对本文件做出如下修改可以达到基本正确的效果:原文件需修改内容:
[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针对 root 修改内容
[Service]
Type=simple
User=root
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’
ExecStart=/bin/sh -c ‘/usr/bin/vncserver %i’
PIDFile=/root/.vnc/%H%i.pid
ExecStop=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’针对 普通用户(如tong) 修改内容
[Service]
Type=simple
User=tong# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’
ExecStart=/bin/sh -c ‘/usr/bin/vncserver %i’
PIDFile=/home/tong/.vnc/%H%i.pid
ExecStop=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’需要注意的是,原
vncserver@:1.service
文件里有一行Type=forking
,需要将其改成Type=simple
,否则启动 vncserver 服务会失败。执行下列命令,重新加载服务,并将 vncserver@:1.service 服务添加到开机启动:
systemctl daemon-reload systemctl enable vncserver@:1.service
开启 vncserver@:1.service 服务:
systemctl start vncserver@:1.service
重启 vncserver@:1.service 服务:
systemctl restart vncserver@:1.service
配置防火墙允许 vnc-server 服务:
firewall-cmd --permanent --add-service=vnc-server firewall-cmd --reload
某一用户身份(比如 root)下可以通过
vncpasswd
设置该用户在 vnc server 上的密码。
正常情况下,以上步骤完成后,本机所配置的 :1 端口的 vncserver 服务将会正常运行启动(包括每次重开机后),远程用户可以通过 X.X.X.X:1
以 root 用户身份,使用相应的 vnc 密码来登录本机的图形界面。
2.2 CentOS 7 vncserver 其他命令
如果某一身份的用户之前没有设置过密码,那么在第一次运行
vncserver
命令时,会要求输入密码:[root@localhost system]# vncserver
You will require a password to access your desktops.
Password:
在输入密码后,vncserver 会自动创建该用户身份的新的 vnc server desktop(新 vnc 端口),及相关配置文件:
New ‘localhost.localdomain:1 (root)’ desktop is localhost.localdomain:1
Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost.localdomain:1.log再次在相同用户下执行
vncserver
,不用再输入密码,并自动创建新的 vnc desktop(新 vnc 端口)。[root@localhost ~]# vncserver
New ‘localhost.localdomain:3 (root)’ desktop is localhost.localdomain:3
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost.localdomain:3.log通过
vncserver -list
命令可以查看当前用户下有效的 vnc 端口:[root@localhost ~]# vncserver -list
TigerVNC server sessions:
X DISPLAY # PROCESS ID
:1 8338
:3 10160vnc 端口号并不是实际的网络端口,而是从 1 开始递增的逻辑端口号,在客户端通过 vnc server 的 IP 地址以及该逻辑 vnc 端口号连接相应的 vnc server desktop 图形界面。
通过
vncserver -kill :i
命令可以删除 vnc 端口号为 i 的 vnc server desktop。这里需要注意的一点是,有时运行
vncserver
时会出现一下警告:[root@wayne .X11-unix]# vncserver
Warning: wayne.buptlab:4 is taken because of /tmp/.X11-unix/X4
Remove this file if there is no X server wayne.buptlab:4New ‘wayne.buptlab:5 (root)’ desktop is wayne.buptlab:5
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/wayne.buptlab:5.log这个警告表示在 /tmp/.X11-unix/ 下已经存在 X4 文件,这个文件表示之前存在过 vnc 端口号为 4 的 vnc server desktop,但可能是由于不正常关闭等原因使得这个端口号发生了异常,vnc server 无法再使用该端口号。
虽然
vncserver
命令会自动创建新端口,但是这一警告对于配置 vncserver@:i.service 服务却有严重影响,比如我希望配置vncserver@:3.service
服务,希望远程用户可以通过X.X.X.X:3
来登录本机,但如果因为异常原因/tmp/.X11-unix/
下已经存在X3
,那么vncserver@:3.service
服务在将无法正常启动运行(包括重启开机后),无法自动创建 vnc 端口号为 3 的 vnc server desktop。目前我找到的解决方法也简单粗暴,那就是删除
/tmp/.X11-unix/
下的异常Xi
文件(甚至直接全部删除以可以,下次重启开机时vncserver@:i.service
会重新新建对应端口号的Xi
文件。
2.3 Win 10 远程登录 CentOS 7
- win 10 使用 VNC Viewer 软件,输入有效的 vnc server 地址(X.X.X.X:1),便可以登录相应 IP 地址(X.X.X.X)和 vnc 端口(:1)的远程 CentOS 7 主机。
CentOS 7 远程连接 Win 10 Pro
CentOS 7 安装 rdesktop 和 tsclient,其中rdesktop是基于命令行的工具,tsclient只是一个图形化的界面,依赖于rdesktop:
yum install -y rdesktop yum install tsclient
Win10 Pro 在 “我的电脑->属性->远程” 中配置“远程桌面”,启用“允许远程连接到此计算机”,并取消勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”(若不取消勾选 rdesktop 将不能远程连接 Win 10)。
CentOS 命令行可以使用以下命令远程连接 Win 10:
rdesktop -f -a 16 X.X.X.X
- 需要注意的问题是 Win 10 家庭版没有远程桌面的功能。而我的电脑正好是 Win 10 家庭版,导致了我的电脑始终不能被远程桌面连接。所以如果想让自己的电脑能够被远程桌面连接,请使用 Win 10 专业版。
参考资料
CenOS 配置 vncserver(好):
Windows 远程连接 CentOS:
警告 /tmp/.X11-unix/Xi :
CentOS远程连接 Windows:
Windows 和 CentOS 互相远程桌面:
比较 Windows 版本功能: