3

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

也许这甚至不可能?

编辑:

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

4

3 回答 3

7

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

其他的事情是检查变量$DISPLAY。大多数情况下,它是在您在 GUI 终端上运行时设置的。

于 2013-09-19T08:47:53.390 回答
1

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

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

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

由于你的环境有zenity,如果不能使用显示器也会返回bad状态,并输出错误信息。您可以在 bash 中检测到这一点:

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

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

我过去使用过 xterm 方法。

于 2013-09-26T17:57:56.060 回答
0

您真正想要测试的是是否存在 atty或 pseudotty。

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

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

于 2019-04-04T12:11:00.033 回答