Как сделать так, чтобы в zenity "временные родительские" предупреждения исчезли навсегда

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

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

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

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

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

3 ответа

Решение

Обновление 2019-05-17: OP обнаружил другое разрешение по тому же методу, представленному здесь, через глобальное перенаправление с помощью команды exec. Пожалуйста, обратитесь к дублированному сообщению для получения дополнительной информации

В принципе, нет другого пути, кроме перенаправления stderr в /dev/null, Основная причина в том, что Gtk требует диалоговых окон (что zenity окна на самом деле), чтобы иметь родительское окно приложения. То же самое происходит, если вы строите диалог GUI с нуля в c или python.

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

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

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

Автоматически добавлять 2>/dev/null каждый раз зенит называется

Редактировать файл ~/.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 приложил к нему, как и все остальные ответы наставлять.

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

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

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

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