在 CentOS 6.5 这样一个经典的系统环境中,xhost 是一个用于管理 X 服务器访问控制的重要工具,它并非一个需要独立安装的庞大软件,而通常是包含在 X11 服务器工具包中的一个实用程序,理解并正确配置 xhost,对于实现本地不同用户间的图形应用转发,或远程图形界面访问至关重要。

重要提示:CentOS 6.5 已是一个停止维护(EOL)的古老版本,使用它存在显著的安全风险,本文仅针对特定历史环境提供技术指导,强烈建议在生产环境中升级到受支持的现代系统版本。
安装必要的软件包
在最小化安装的 CentOS 6.5 系统中,可能并未包含 xhost 命令,它隶属于 xorg-x11-server-utils 软件包,要安装它,首先需要确保 Yum 源可用,由于官方源已不可用,您可能需要配置 Vault 源或使用第三方存档源。
安装命令非常直接:
yum install xorg-x11-server-utils
此命令会自动处理依赖关系,要让图形界面能够正常工作,您还需要一个完整的 X11 环境基础,如果系统是纯命令行模式,您可能需要安装以下核心组件组:
| 软件包/组件组名称 | 描述 |
|---|---|
X Window System |
提供基础的 X11 图形框架 |
Desktop 或 GNOME Desktop |
提供完整的桌面环境(可选) |
xorg-x11-fonts-* |
提供各种字体,避免应用乱码 |
mesa-libGL |
提供 3D 图形支持库 |
您可以使用 yum groupinstall "X Window System" 来安装基础图形环境,安装完成后,重启并进入图形界面,xhost 命令就可以使用了。
理解与使用 xhost
xhost 的核心功能是控制哪些客户端可以连接到本地的 X 显示服务器(即你的桌面),其基本语法为 xhost [+/-] [选项]。
-
查看当前状态:
xhost
这会列出当前被允许连接的主机名或访问控制规则。
-
完全开放访问(不推荐):
xhost +
此命令会禁用所有访问控制,允许任何网络上的主机连接到你的显示器,这在测试时很方便,但构成了严重的安全漏洞,任何人都可以截获你的键盘输入、屏幕内容,甚至在你屏幕上显示窗口。

-
关闭访问控制:
xhost -
恢复到默认的严格访问控制模式,只允许本机特定用户连接。
-
允许特定主机访问:
xhost +hostname.example.com
只允许来自
hostname.example.com的连接。 -
允许本地用户访问(推荐):
xhost +local:
这是一个更安全的选项,它只允许来自本机(localhost)的连接,这对于在不同本地用户(如
root用户)之间共享 X 会话非常有用,同时有效阻止了远程网络访问。
一个典型的应用场景
假设您以普通用户 centos 登录了图形桌面,现在需要以 root 身份运行一个图形应用程序(如 gedit)。
-
在普通用户的终端中,授权本地 root 用户访问 X 服务器:
[centos@localhost ~]$ xhost +local:root non-network local connections being added to access control list
-
切换到 root 用户:
[centos@localhost ~]$ su - 密码:
-
设置 DISPLAY 环境变量,图形界面的第一个显示器是
0。
[root@localhost ~]# export DISPLAY=:0
-
运行图形程序:
[root@localhost ~]# gedit &
gedit窗口应该会成功显示在你的centos用户的桌面上。 -
操作完成后,为了安全,撤销授权:
[centos@localhost ~]$ xhost -local:root non-network local connections being removed from access control list
相关问答FAQs
Q1: 我已经执行了 xhost +,但切换到 root 用户后运行图形程序依然提示 “Cannot open display”,这是为什么?
A1: 这个问题通常由以下几个原因导致:
- DISPLAY 变量未设置:切换用户后,环境变量
DISPLAY没有被正确继承,请务必在 root 用户下执行export DISPLAY=:0(或你的实际显示器编号)。 - 未登录图形界面:
xhost命令和 X 服务器只在有用户登录图形桌面时才会运行,如果是纯 SSH 远程连接,需要启用 X11 转发(ssh -X user@host)。 - SELinux 限制:CentOS 的 SELinux 安全模块可能会阻止
root访问普通用户的 X 服务器,可以临时执行setenforce 0来测试是否为 SELinux 所致,如果是,需要配置正确的 SELinux 策略而非永久禁用它。
Q2: xhost + 和 xhost +local: 在安全性上具体有什么区别?在什么情况下该用哪个?
A2: 两者的安全级别差异巨大。
xhost +:完全关闭了访问控制,等同于把你的显示器“公之于众”,任何能访问到你网络的人(例如在同一 Wi-Fi 下的他人)都可以连接到你的会话,进行恶意操作。此命令应仅在完全隔离、可信的网络中临时用于调试。xhost +local::只允许来自本机(0.0.1或:1)的连接,它完美解决了在 Docker 容器内或以不同本地用户身份运行 GUI 应用的需求,同时拒绝了所有外部网络连接。
除非有极其特殊的理由,否则应始终优先使用 xhost +local: 或 xhost +hostname 来实现精细化、安全的访问控制,避免使用 xhost + 这个“懒人”开关。