Zenity 总是在终端中显示警告,这让我很烦恼:
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
显然我不是唯一一个:
- linuxquestions.org - Gtk 消息 gtkdialog 映射时没有临时父级
- bugs.debian.org - GtkDialog 映射时没有临时父级
- stackoverflow.com - GtkDialog 映射时没有临时父级
- AskUbuntu - 在 16.04 Gtk-message 下运行 zenity 时出现错误消息...
几乎所有答案都告诉您通过附加到命令末尾来更改调用 zenity 的方式2>/dev/null
。我不想对我已经编写的所有代码都这样做,并记住这一点以供将来编写代码时使用。
有没有更简单的方法可以让这个烦人的消息消失?
答案1
更新 2019-05-17:OP 找到了另一种解决方案,与此处介绍的方法相同,即通过使用 exec 命令进行全局重定向。请参阅链接的重复帖子了解更多信息
stderr
基本上,除了重定向到 之外没有其他方法/dev/null
。主要原因是 Gtk 要求对话框窗口(即zenity
窗口实际是 )具有父应用程序窗口。如果您使用 c 或 python 从头构建 GUI 对话框,也会发生同样的事情。
因此,唯一“真正”的方法是 Gtk 开发人员真正允许对话框窗口独立存在,或者 zenity 开发人员从源代码中消除这些警告。否则,您唯一的选择就是不断2>/dev/null
向任何zenity
命令添加内容。当然,您可以随时创建一个别名或包装函数来为您完成此操作,如下所示:
zenity(){
/usr/bin/zenity "$@" 2>/dev/null
}
然而,这可能在引用和传递参数方面存在问题,但在大多数情况下应该可以正常工作。如果您使用 Python 或其他可以实际处理 Gtk 的语言,您可以制作自己的带有隐藏父窗口的弹出对话框,但这需要付出复杂性和学习如何创建这些东西的代价。但同样,真正的方法是让zenity
开发人员真正解决这个问题,或者让 Gtk 开发人员承认需要独立的对话框窗口。
答案2
2>/dev/null
每次调用 zenity 时自动添加
编辑文件~/.bashrc
并搜索以下行:
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
在后面添加以下几行:
# Add zenity alias to make the annoying terminal error message disappear forever:
# "Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged."
alias zenity="zenity 2>/dev/null"
保存文件并打开一个新的终端窗口进行测试:
zenity --info --text "Hello Zenity-Silly-Error-Free World"
瞧!所有旧代码都已修复,将来的代码无需2>/dev/null
像其他答案所指示的那样附加到旧代码中。
答案3
我更喜欢这样编辑~/.bashrc
:
alias zenity="zenity 2> >(grep -v 'GtkDialog' >&2)"
这是更加严格的,只禁止带有 GtkDialog 字符串的警告消息,而显示其他错误或警告消息