因此,在我的工作中,我通过 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 保持原样。