Как заставить предупреждение zenity "transient parent" исчезнуть навсегда [duplicate]

Zenity раздражает меня постоянным отображением предупреждения в терминале:

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

Видимо, я не единственный:

Почти все ответы говорят вам изменить способ вызова zenity, добавив 2>/dev/null в конец команды. Я не хочу делать это со всем кодом, который я уже написал, и помнить об этом для будущего кода, который я напишу.

Есть ли более простой способ заставить это раздражающее сообщение исчезнуть?

5
задан 17 May 2019 в 16:20

3 ответа

Обновление 17.05.2019: OP нашел другое разрешение вдоль того же метода представленным здесь через глобальное перенаправление при помощи исполнительной команды. См. связанное дублирующееся сообщение для большего количества информации

В основном, нет никакого другого пути кроме перенаправления stderr к /dev/null. Главная причина состоит в том, потому что Gtk требует диалоговых окон (который является тем, что zenity окна на самом деле) иметь окно родительского приложения. Это то же самое происходит при создании диалогового окна графического интерфейса пользователя с нуля в c или Python.

Таким образом, единственный "реальный" путь состоит в том, чтобы разработчики Gtk на самом деле позволили диалоговым окнам стоять самостоятельно, или zenity разработчики для глушения тех, которые предупреждают из их исходного кода. Иначе Ваша единственная опция состоит в том, чтобы постоянно добавлять 2>/dev/null к любому zenity команда. Конечно, можно всегда делать псевдоним или функцию обертки, которая сделает это для Вас, чего-то вроде этого:

zenity(){
    /usr/bin/zenity "$@" 2>/dev/null
}

Это, однако, может иметь проблемы с заключением в кавычки и передающими аргументами, но по большей части должно работать. Если Вы работаете в Python или другом языке, который может на самом деле обработать Gtk, можно варить собственные раскрывающиеся диалоговые окна со скрытыми родительскими окнами, который прибывает за счет сложности и изучения, как создать те вещи. Но снова, реальный путь был бы для zenity, разработчики на самом деле фиксируют это или разработчиков Gtk для подтверждения потребности в автономных диалоговых окнах.

6
ответ дан 23 November 2019 в 08:43

Автоматически добавьте 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 добавленный к нему как все другие ответы, сообщают.

5
ответ дан 23 November 2019 в 08:43

Я предпочитаю редактировать ~/.bashrc с:

alias zenity="zenity 2> >(grep -v 'GtkDialog' >&2)"

Это более строго, запрещения только предупреждающие сообщения, которые сделали, чтобы GtkDialog представил в виде строки, оставив другие сообщения об ошибках или предупреждающие сообщения, которые будут отображены

3
ответ дан 23 November 2019 в 08:43

Другие вопросы по тегам:

Похожие вопросы: