【问题标题】:Determining if the user is running a graphical interface at the present tty判断用户是否在当前 tty 运行图形界面
【发布时间】:2013-09-19 08:12:35
【问题描述】:

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

也许这根本不可能?

编辑:

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

【问题讨论】:

  • 也许您可以检查终端功能并键入并弄清楚。你的最终目标是什么?
  • @lc2817,我已经添加了有关我想做的事情的详细信息。
  • 我不知道该怎么做,是否经常发生用户不使用图形 tty 的情况?否则只是尝试启动这个东西,看看它是否失败,如果失败,使用后备?
  • 如果您担心与ssh 联系的人,请使用此处描述的tty 对应于ssh 会话:http://serverfault.com/questions/187712/how-to-determine-if-im-logged-in-via-ssh
  • 您是否关心ssh以外的其他情况?

标签: bash shell tty


【解决方案1】:

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

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

【讨论】:

  • tput 在 Debian 上似乎没有 -q 选项。
  • @user2064000 对不起。实际上应该是tset -q
  • 在 RedHat 上,我在 tset -q 中看到“xterm”,无论我是否可以访问显示器(例如,当我使用 ssh 连接到另一台计算机时)。所以 tset 似乎没有用。非空的 $DISPLAY 是必需的,但不能保证显示可用。
  • @SteveZobell 将它与变量TERM 结合起来怎么样?此外,您可以将其基于控制终端的进程。另一个线程也有类似的问题,我在那里得到了答案:stackoverflow.com/a/18453471/445221
  • echo $TERM 正在产生“xterm”,无论显示是否可用。我不确定你的意思是从控制终端的过程中建立它。登录 ssh (bash shell) 我无法启动新的 xterm。好吧,我想如果我设置 DISPLAY 并使用 xhost 打开另一台机器对显示器的访问权限,我可以。但我认为无论 $TERM 是什么,这都会起作用。我已经概述了一个替代解决方案,该解决方案应该提供您是否可以访问显示的明确答案。
【解决方案2】:

一种可靠的方法是丢弃一些将立即终止的 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 方法。

【讨论】:

    【解决方案3】:

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

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

    tset -q 命令可以返回一个 TERM(例如 linux 在我的例子中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多