在已建立的 SSH 连接上启用/禁用 X

在已建立的 SSH 连接上启用/禁用 X

因此,在我的工作中,我通过 SSH 从我的 CentOS 机器连接到其他本地 CentOS 机器。我们使用在 X11 和终端中运行的应用程序。某些功能仅在终端中可用,其他功能仅在 X11 中可用。该程序会自动检测是否有可连接的 X 显示器,并在可用时使用它。如果能够在应用程序的两个版本之间快速切换而无需提出增强请求,那就太好了。我们有大量没有-X-Y标志的桌面图标/快捷方式。有什么方法可以在没有-X或标志启动的正在运行的 SSH 会话上启用/禁用 X11 转发吗-Y

答案1

如果您使用-X或运行,-Y则这将$DISPLAY在远程端设置为指向 X 隧道。取消设置$DISPLAY将阻止 X 应用程序与 X 服务器通信。例如

$ echo $DISPLAY 
localhost:10.0

$ xdpyinfo | head -2
name of display:    localhost:10.0
version number:    11.0

$ DISPLAY= xdpyinfo | head -2
xdpyinfo:  unable to open display "".

$ DISPLAY= xterm
xterm: Xt error: Can't open display: 
xterm: DISPLAY is not set

因此,启用 X 隧道后,您应该能够通过取消设置来“隐藏”它$DISPLAY

在 SSH 会话中,您可以键入~?以获取可以进行的更改的列表。您可以通过添加/删除端口转发,~C但无法轻松更改 X 隧道,因为这需要运行xauth和类似的操作。事件的顺序是将远程端口转发回 localhost:6000(或本地 X 服务器所在的任何端口),设置 DISPLAY 并添加xauth权限 - 不是那么容易!

答案2

如果接受的解决方案导致您的脚本崩溃(这发生在我的 python 脚本中),您可以DISPLAY使用 bash 命令完全删除该变量unset。那是,

unset DISPLAY

https://stackoverflow.com/questions/19930715/how-to-undo-display-export-in-linux

答案3

当您需要在没有 X11 的情况下运行应用程序时,请尝试:export DISPLAY=''

对于 X11,让 DISPLAY 保持原样。

相关内容