如何查找 X 服务器的主机名

如何查找 X 服务器的主机名

假设我在机器上并使用 X11 转发通过 sshlocal登录机器。remote有什么方法可以让在 ssh 会话中运行的程序remote知道它们正在显示吗local?理想情况下,我想知道运行 X 服务器的计算机的主机名。我的目标是根据程序(emacs)显示的机器来导致不同的行为。

答案1

我认为 X 服务器不会向客户端报告其主机名。客户端应该知道他们要连接的主机名,但通过 SSH 连接,即localhost使用 ssh 进行转发。

OpenSSH服务器设置SSH_CLIENT环境变量;您可以从那里读取客户端的 IP 地址。这是服务器看到的地址,因此您无法区分同一 NAT 后面的计算机。这是 X 服务器的地址,前提是没有发生任何其他事情(SSH 转发、客户端上的远程 X 服务器……)。请注意,只有当 Emacs 是从该 SSH 连接中启动时,您才会在 Emacs 中获得环境变量,而如果您使用 emacsclient 在正在运行的 Emacs 中创建了框架,则不会获得该环境变量。

x-server-XXX您可以使用 Emacs 中的函数、x-display-XXX和 来获取显示器的某些属性(尺寸、颜色深度、X 供应商等)display-XXX

答案2

获取服务器名称的一种巧妙方法:

  • 当服务器启动时,安排它将自己的名称放入根属性中:

    xprop -root -f __SERVER_NAME__ 8s -set __SERVER_NAME__ "$(hostname -s)"
    
  • 然后您可以使用xprop -root __SERVER_NAME__来获取名称。

相关内容