确定用户是否在当前tty上运行图形界面

时间:2013-09-19 08:12:36

标签: bash shell tty

shell脚本能否确定用户是否在用户正在使用的相同tty上运行图形界面?

也许这甚至不可能?

编辑:

我正在尝试编写一个shell脚本,当用户在与用户正在处理的tty相同的tty上运行窗口管理器时,该脚本显示GUI(通过使用zenity / yad)。否则,脚本将回退到普通的命令行界面。

3 个答案:

答案 0 :(得分:5)

尝试检查变量TERM,或者更准确地检查tset -q的输出。终端的类型取决于它。在普通的控制台中,它只是Linux,而在大多数终端中它是xterm。

其他方面是检查变量$DISPLAY。您在GUI终端上运行时大部分时间都已设置。

答案 1 :(得分:1)

一种可靠的方法是抛弃一些将立即终止的GUI进程,并检查退出状态。 xterm通常是可用的(尽管最新的Linux Mint默认没有它)并且可以立即退出:

xterm -iconic -e echo test && echo "Has a display"

-iconic应该防止xterm在显示屏上闪烁(我希望这是一般选项)。

由于您的环境具有zenity,如果无法使用该显示,它也将返回错误状态,并输出错误消息。您可以在bash中检测到这一点:

echo "" | zenity --progress --text "Display test" --auto-close 2> /dev/null
if [ $? -eq 0 ]
then 
   echo "has display"
fi

不幸的是,进度对话框瞬间在显示屏上闪烁。这具有检测zenity本身是否不可用的额外好处。

我过去使用过xterm方法。

答案 2 :(得分:0)

您真正要测试的是是否存在tty或伪内容。

在linux上,使用命令tty。如果不是tty,它将返回0并输出tty文件位置,或者返回1(假)并打印not a tty

无论如何,tset -q命令都可以返回一个TERM(例如我的情况是linux)。