bashrc:如何知道X窗口是否可用?


10

我的一部分~/.bashrc,将$ EDITOR设置为gvim。当我在X窗口中时,它工作正常。但是,如果我从另一个工作站SSH到我的工作站,则gvim开始抱怨“无法打开显示”。

因此,我希望if在bashrc中声明,如果X窗口可用,则使用gvim,否则将其设为vim。

我该如何实现?

Answers:


11

执行此操作的一种方法是测试DISPLAY环境变量的存在:

if [ "$DISPLAY" ]
then
    EDITOR=gvim
else
    EDITOR=vim
fi

在某些情况下,即使您的gvim无法联系X服务器,也会设置DISPLAY。在这种情况下,请使用RunningX程序:

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi

if [[ $DISPLAY ]]双括号爱好者
Serge Stroobandt

7

$DISPLAY,如果你是在X环境变量应设置的东西,和取消,如果你没有连接到显示器。

因此,您可以使用以下代码:

if [ -n "$DISPLAY" ]; then
    alias vim='gvim'
else
    alias vim='vim'
fi

但是还有另一种解决方案。这就是ssh X转发。

ssh -X yourworkstation

那么您可以在ssh所在的机器上运行vim,它将显示在您正在运行X的机器上。


3

将其放入您的.bashrc中:

if [ -z "${DISPLAY:-}" ]; then
  EDITOR='vim'
else
  EDITOR='gvim'
fi

1

尽管这不能解决您的问题,但我想指出一下,如果您是从运行X *的一个工作站切换到另一工作站,那么如果您通过ssh设置X转发,则实际上可以使用gvim。窗口信息将仅通过网络发送,并且gvim会像在本地运行一样弹出。

在〜/ .ssh / config中添加以下内容

Host *
   ForwardX11 yes 

现在,您将可以运行gvim。

如果您的原始工作站是Windows,并且未运行X,则实际上可以使用Cygwin在本地启动X服务器。设置完成后,您可以配置流行的ssh客户端(例如PuTTy)来进行X11转发,然后gvim会在看起来像是原生Windows装饰的窗口中弹出。


0

只需检查Xorg在启动时设置的环境变量之一,例如XLOCAL,其中包含有关当前X11会话的信息。


0

我喜欢使用RunningX的garyjohn的答案,因为它对坏的但非空的DISPLAY变量很聪明。

但是..我想做得更好。我经常使用屏幕会话。我可能在家中开始了一个屏幕会话,DISPLAY已定义。然后,我从其他地方切入,仍然定义了DISPLAY,它实际上在家里显示!所以..然后我将“导出$ DISPLAY =”。很好,但是由于该答案已经过检查,并且在最初运行EDITOR的时间找到了一个有效的DISPLAY变量,仍将其设置为gvim。

我来这里是为了寻找类似问题的解决方案,我想使用yelp进行X-GUI手册页浏览,但是当不使用X时会自动使用传统的man命令。

man () {
    if RunningX
    then
        yelp "man:$@";
    else
        /usr/bin/man "$@";
    fi
}

我认为对于EDITOR问题,可以做以下事情:

EDITOR=vim
vim () {
    if RunningX
    then
        gvim "$@";
    else
        vim "$@";
    fi
}

我本来会发布没有长篇幅的文章,但我尚未对其进行测试。我认为自己是个新手。我测试了我的“ man命令”,这行得通!我在编辑器中使用的是emacs,它确实是对X的检查。我什至没有安装gvim。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.