如何在bashrc文件中区分SSH会话、VNC会话或控制台会话

3
我正在尝试在使用VNC连接到我的计算机时保持gvim作为默认编辑器。但是当通过SSH登录时,我想保持vim作为默认编辑器。我不确定如何在我的 .bashrc 文件中区分它们以自动执行此操作。同样,是否有一种方法可以知道会话是通过直接连接到我的计算机的控制台完成的。

谢谢

3个回答

2

听起来你并不在乎是SSH、VNC还是控制台。你关心的是是否有图形界面可以运行gvim。

你可以通过$DISPLAY来检查:

[[ $DISPLAY ]] && export EDITOR=gvim || export EDITOR=vim

这将会将你的编辑器设置为gvim,用于VNC、XDMCP、NX、Chromoting、本地图形登录、带有图形转发的ssh以及任何其他具有X11显示的情况。

它将会将你的编辑器设置为vim,用于常规SSH登录以及Telnet、rsh、串行控制台、本地登录和所有其他非基于X11的登录。


0

在任何SSH会话中,应该设置环境变量$SSH_AUTH_SOCK。因此,在您的.bashrc文件中,您可以添加以下内容:

if [ -n "$SSH_AUTH_SOCK" ]
then
    # code for SSH sessions here
fi

关于确定您是否在直接连接的控制台上,请参见此问题;要在shell中获取tty名称(而不是在C程序内部),请使用tty命令。


1
在我的情况下,我发现当我使用VNC时,SSH_AUTH_SOCK被设置了,但是如果我通过SSH登录,则没有设置。VNC会话: $ set | grep SSH SSH_AGENT_PID=4958 SSH_AUTH_SOCK=/tmp/keyring-TnDwmJ/ssh SSH_CLIENT='192.168.1.1 60038 22' SSH_CONNECTION='192.168.1.1 60038 192.168.1.2 22' SSH_TTY=/dev/pts/2SSH会话: $ set | grep SSH SSH_CLIENT='192.168.1.1 49874 22' SSH_CONNECTION='192.168.1.1 49874 192.168.1.2 22' SSH_TTY=/dev/pts/2注意:我不确定这是否相关,但我正在使用putty进行SSH连接,RealVNC进行VNC连接。 - adikshit
啊,听起来你的VNC会话正在通过SSH隧道转发。而我(不恰当地)假设你已经为其他SSH会话启用了SSH转发。你是否检查了两个会话的环境是否有其他差异?也许有一些可靠的东西可以使用。 - ajk

0

感谢ajk的提示,我查看了设置的变量,并发现只有在使用VNC时才设置了VNCDESKTOP。我采用了上面建议的方法,现在它可以正常工作。

虽然如此,我仍然希望有人能够提供是否这是一个完整解决方案的建议。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接