当我运行
vncserver
命令时,它将创建显示为 :1
的会话,并且在终端中,当我们检查显示变量时,它被设置为 DISPLAY=:1
,是否可以创建带有显示变量集的 vnc 会话作为 DISPLAY=hostname:1
,我知道根据 shell 使用 export
或 setenv
命令来更改显示变量,但是如果我手动将显示变量更改为 hostname:1
,则 xhost
命令不起作用,因为vnc 会话最初仅为 :1
创建,
不确定为什么会出现这种行为或者这是默认行为吗?
正在使用 Solaris 11.4 操作系统
您误解了 X Windows
DISPLAY
环境变量的工作原理。
根据 X.org 文档(粗体我的):
从用户的角度来看,每个 X 服务器都有一个显示名称 形式:
hostname:displaynumber.screennumber
应用程序使用此信息来确定它应该如何 连接到服务器以及默认情况下应使用哪个屏幕(在 与多个显示器一起显示):
主机名
主机名指定显示所在机器的名称 物理连接。 如果没有给出主机名,最有效的 将使用与同一台机器上的服务器通信的方式。
显示号码
“展示”一词通常用来指集合 共享通用键盘和指针的显示器(鼠标、平板电脑、 ETC。)。大多数工作站往往只有一个键盘,并且 因此,只有一台显示器。然而,更大的多用户系统 经常有多个显示器,以便多个人可以 立即进行图形工作。为了避免混淆,每个显示器上 当 X 出现时,机器会被分配一个显示编号(从 0 开始) 该显示的服务器已启动。显示编号必须始终为 以显示名称给出。
屏幕编号
某些显示器在两个或多个显示器之间共享一个键盘和指针 监视器。由于每个显示器都有自己的一组窗口,因此每个屏幕 当 X 服务器为 该显示已启动。如果未给出屏幕编号,则屏幕 0 会用到。
在 POSIX 系统上,默认显示名称存储在您的 DISPLAY 中 环境变量。该变量由 xterm 自动设置 终端模拟器。但是,当您登录到另一台计算机上时 网络,您需要手动设置 DISPLAY 以指向您的 展示。例如,...
从 X 服务器进程来看,显示名称中没有
hostname
部分 - 服务器正在其运行的系统上运行。
因此,将 X 服务器设置为在
hostname:1
上运行与将其设置为在 :1
上运行没有什么不同。
对于 X Windows 客户端程序,
hostname
环境变量的 DISPLAY
部分表示它们需要连接的显示器正在运行的系统。换句话说,连接变成了网络连接。
当您的
xterm
进程在本地启动时,它默认连接到 local X 服务器进程,用 :1
表示(或 :0
或 :0.0
或 :2.0
...)。设置 DISPLAY=hostname:1
意味着 X 客户端进程将尝试与在 :1
系统上运行的 hostname
显示器执行网络连接。 如果 X 服务器进程未配置为除了本地连接之外还侦听网络连接,或者如果存在防火墙,则该客户端进程将无法连接到 hostname:1
。
因此,如果 X 服务器未配置为允许此类访问,则仅使用
xhost
命令启用远程访问将不起作用。
对于
:1
显示,如果您的 X 服务器 配置为允许远程访问,运行 netstat -an | grep 6001
将产生如下输出:
*:6001 * * 0 0 256000 * LISTEN
如果您在端口 6001 上没有看到任何带有
LISTEN
的进程,则您的 :1
显示器的 X 服务器未配置为接受远程连接。