恰好遇到了服务器远程桌面的需求,记一篇笔记详细介绍一下XDMCP配置。

XDMCP配置主要是XDMCP Server配置、端口打开这两个部分。至于服务器上公网,我会再开一篇写一下。

友情提醒:配置生产用的服务器是务必小心,不熟悉、不自信的同学可以先用虚拟机练练手。

1 概述

首先简单地介绍一下目前的问题。

  1. 需要在局域网内访问服务器,并实现远程桌面。
  2. CentOS 7默认桌面为Gnome。虽说没什么问题,但是7开始的Gnome据说开始使用硬件加速,如果使用XDMCP协议来远程与gdm会有冲突,会出现奇奇怪怪的问题,Xmanager官方提到了这个问题,建议更换显示管理(display manager)和桌面环境(desktop environment)。

这里顺嘴说一下CentOS的版本。下面我是用的是CentOS 7的虚拟机,没有使用CentOS 8。原因嘛,大家可以看一下CentOS官网下载页面看一下这两个版本的支持时间。CentOS之前明明说好了对CentOS 8有10年支持的,结果RedHat为了推CentOS Stream就把CentOS 8在今年(2021年)年底提前结束了。这个博客还跑在CentOS 8上面,就挺难受的。

2 更换镜像源

众所周知啊,CentOS的服务器经常因为一些问题访问非常缓慢,下载速度堪忧。所以,更换镜像源是非常直接的解决方案。目前推荐使用清华TUNA或者北外BFSU(广度优先搜索大学)的镜像。当然用阿里或者华为的也不是不行。

更换镜像源指令很简单,共两个,依次执行就可以。当然,你的账号需要有或者通过sudo可以拿到root的权限,直接使用root账号的可以忽略sudo,下同

1
2
3
4
5
6
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo

sudo yum makecache

如果之前对于镜像源进行过更改,还需要检查一下修改过的镜像源文件是否启用,再执行makecache。

这部分内容参考了TUNA的CentOS镜像使用帮助

3 更换display manager和desktop environment

display manager更换为lightdm,不再使用gdm;desktop environment可以使用MATE desktop、Xfce、KDE等等。MATE desktop是基于Gnome 2.x的桌面环境,资源占用极小。

  • 安装EPEL(Extra Package for Enterprise Linux),这是Fedora Special Interest Group维护的Enterprise Linux(RHEL、CentOS)中常用的包。
1
sudo yum install epel-release
  • 安装lightdm。
1
sudo yum install lightdm
  • 安装X Windows System。
1
2
sudo yum groups mark convert "X Window system"
sudo yum groupinstall "X Window system"

接下来展示的桌面环境安装只需要选择一个,反正我就用META了。当然都选了我也不知道,你开心就好

  • META desktop安装。
1
2
sudo yum groups mark convert "MATE Desktop"
sudo yum groupinstall "MATE Desktop"
  • Xfce安装。
1
sudo yum groupinstall xfce

3.1使用lightdm配置XDMCP Server

通过vim打开lightdm配置文件。

1
sudo vim /etc/lightdm/lightdm.conf

在文件中找到[XDMCPServer],修改其下方被注释的代码。

1
2
3
4
5
6
···
[XDMCPServer]
···
enabled=true
port=177
···

3.2 配置lightdm为默认桌面环境

切换display manager为lightdm。init 3是将系统的运行切换为命令行,同时,如果是图形界面执行该命令,需要重新登录一下系统再继续下一步;init 5是将系统的运行再次切换到UI桌面。

1
2
3
sudo systemctl disable gdm && systemctl enable lightdm
sudo init 3
sudo init 5

这时我们第二次重新登录后,就进入了META desktop了。

接着,还需要讲META设置为默认桌面环境。

1
2
3
4
5
cd /usr/share/xsessions/ && ls
sudo mkdir back
sudo mv gnome* back && ls
sudo init 3
sudo init 5

4 打开177端口

XDMCP默认的端口是177端口,可以在lightdm配置文件根据需求中更改。系统默认是不会放开177端口的,需要进一步配置。

另外,为了测试端口是否可用,需要实现准备可以ping端口的程序。Linux环境可以安装telnet;Windows环境建议使用tcping,使用时务必在程序所在文件夹中打开终端执行命令。

1
2
3
4
5
6
7
# telnet Ping 192.168.58.130的177端口
telnet 192.168.58.130 177

# tcping Ping 192.168.58.130的177端口
.\tcping.exe 192.168.58.130 177
#
.\tcping64.exe 192.168.58.130 177

好,接下来解决端口开放问题。

防火墙设置部分。

1
2
3
4
5
6
7
8
9
# 配置防火墙,将177端口永久开放给所有用户
sudo firewall-cmd --permanent --add-port=177/udp
sudo firewall-cmd --permanent --add-port=177/tcp

# 更新防火墙规则
sudo firewall-cmd --reload

# 查看所有打开的端口
sudo firewall-cmd --zone=public --list-ports

端口监听部分。

1
2
3
4
5
# 配置177端口tcp协议永久监听
sudo nc -lk 177 &

# 查看目前177端口状态
netstat -tunlp | grep 177

CentOS部分的端口配置基本结束,接下来就用telnet或者tcping来ping服务器的177端口。

tcping Ping端口177

你以为这么简单就结束了? :&(蛆音娘_摊手) 一旦SSH连接断开或系统重启当然生产用的服务器没有特殊情况是不会重启的,监听就自动结束了。这时候有两个解决方案了。

4.1 方案一:使用tmux,针对不重启的系统

tmux可以实现终端复用,即使表面上终端结束了,但是跑在tmux中的指令不会就此结束,非常适合目前的需求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 安装tmux
sudo yum install tmux

# 新建tmux会话
tmux new -s xdmcp_listen_177

# 进入会话后开始监听177端口
sudo nc -lk 177 &

# 离开tmux会话,返回主终端
tmux detach

# 其它tmux相关操作
# 列出已有tmux会话
tmux ls

# 重新进入会话
tmux attach-session -t xdmcp_listen_177

# 关闭会话(需在会话中)
exit
# 或(无需在会话中)
tmux kill-session -t xdmcp_listen_177

# 重命名会话xdmcp_listen_177为xdmcp_listen
tmux rename -t xdmcp_listen_177 xdmcp_listen

下图是我关闭终端后进行的测试(测试端口178),可以满足目标需求。

使用tmux实现端口永久监听

4.2 方案二:配置自启动

这是我最开始想到的方案,只适用于个人使用的、没有重启限制的服务器。

1
2
# 新建需要自启动的文件
vim listen177.sh

在文件中编写以下内容,用:wq保存并关闭。

1
2
3
4
5
#!/bin/sh
#chkconfig:5 80 90
#decription:autostart

nc -lk 177

然后进行自启动配置。

1
2
3
4
5
cp listen177.sh /etc/rc.d/init.d/
cd /etc/rc.d/init.d
chmod +x /etc/rc.d/init.d/listen177.sh
chkconfig --add listen177.sh
chkconfig listen177.sh

到此,端口监听才全部结束。上面两种方案就看自己的需求选取吧。

5 XDMCP客户端

这里就是各显神通的地方了。

Windows端当然是推荐Xmanager,macOS可以使用XQuartz。我就放一下我自己的Xmanager效果图。

Xmanager配置
最终效果图

总结

XDMCP配置到此结束,希望有需求的各位同学能有点收获吧。

最后,预告一下服务器挂上公网的笔记。只要我的宽带不是传说的虚拟IP

最后的最后,日常求一键三连收藏分享。 :@(击掌)