如何在Bash / Shell中检测GUI的可用性?

时间:2019-03-05 05:28:53

标签: linux bash macos shell user-interface

我正在用NodeJS编写CLI。因为我可以使用child_process轻松运行bash / shell命令,所以我想知道最简单的最跨平台方式,以检测bash / shell中的GUI可用性。

谢谢!

4 个答案:

答案 0 :(得分:4)

在macOS上,没有明显合适的方法可以从shell中进行检查。这是一种编程方式,我们可以使用一种解释语言来利用这一点。

这是一个小脚本,可以输出以下三种状态之一:Mac GUI,Mac non-GUI或X11:

#!/bin/bash
if [ `uname` = "Darwin" ]
then
    if which swift >/dev/null && swift <(cat <<"EOF"
import Security
var attrs = SessionAttributeBits(rawValue:0)
let result = SessionGetInfo(callerSecuritySession, nil, &attrs)
exit((result == 0 && attrs.contains(.sessionHasGraphicAccess)) ? 0 : 1)
EOF
)
    then
        echo "Mac GUI session"
    elif [ -n "$DISPLAY" ]
    then
        echo "Mac X11 GUI session"
    else
        echo "Mac non-GUI session"
    fi
elif [ -n "$DISPLAY" ]
then
    echo "X11 GUI session"
fi

Mac可以安装X服务器,在这种情况下,将定义DISPLAY。但是,我不知道您的Electron应用程序能否在该配置下正常运行。因此,我分别检测到它。

答案 1 :(得分:0)

检查环境中是否设置了DISPLAY。如果是,则您正在运行Xserver。如果没有,您就不会。可以肯定的是,wayland也可以设置它。

答案 2 :(得分:0)

这是一个有效的示例:

$like

所有这些操作就是检查if [ x$DISPLAY != x ] ; then echo "GUI Enabled" else echo "GUI Disabled" fi 变量。

答案 3 :(得分:0)

尝试一下:

echo $XDG_CURRENT_DESKTOP

或这样:

echo $DESKTOP_SESSION