Ubuntu 16.04の下で、次のメッセージが表示されます
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged
コマンドでZenityを開くと
zenity --text-info --filename=<filename>
これは14.04では発生しませんでした。答えは この投稿 に関連していると思いますが、この投稿では提案されたソリューションの実装方法を説明していません。誰かが提案された行を追加するファイルを説明してもらえますか?
この警告を修正するには、GtkDialogにモーダルになる親を指定します。関連する関数は、gtk_window_set_transient_for()(このウィンドウを常に別のウィンドウの一番上または一時的に設定する)と、オプションでgtk_window_set_modal()でモーダルダイアログにすることです。これは最終的に、さまざまなGtkDialogコンストラクターが行うことです。
無視
警告であり、エラーではありません。アプリケーションは動作しますが、ベストプラクティスを念頭に置いてコーディングされていないようです。リンクされた質問で説明されている修正を実装するためにzenity
のソースコードを変更し、それを自分でコンパイルする必要がありますが、...それはとにかく動作します。
端末の出力を単に削除したい場合は、/dev/null
を末尾に追加することで、STDERR(標準エラーストリーム、警告が出力される場所)を2> /dev/null
(データを飲み込む仮想キャラクターデバイス)にリダイレクトできます。次のようなコマンド:
zenity --text-info --filename=<filename> 2> /dev/null
Gtk開発者は、多くのパッケージに影響するこの警告を追加することに決めたようです。 Zenity開発者がZenityに追いついて修正するのを待つ必要があります。
bash Shell(これはPosixに準拠していません)を使用すると、特定のエラーメッセージを抑制し、他のメッセージをstderrに送信することが比較的簡単になります。
zenity --info --text "hello" 2> >(grep -v 'GtkDialog' >&2)
これはstdoutに干渉しませんので、通常どおりコマンド置換でパイプ処理または使用できます。
echo message: $(zenity --entry 2> >(grep -v 'GtkDialog' >&2) )
zenity ... 2>/dev/null
が機能します。私が見る唯一の問題は、他の(重要な)エラーメッセージも抑制されるため、コードで何らかの形でエラーキャプチャを構築することです