Como tornar o aviso de zenity “pai transitório” desaparecendo permanentemente

4

O Zenity me irrita sempre exibindo o aviso no terminal:

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

Aparentemente, não sou o único:

Quase todas as respostas dizem para você mudar a maneira como você chama zenity adicionando 2>/dev/null ao final do comando. Eu não quero fazer isso com todo o código que eu já escrevi e lembre-se disso para o futuro código que eu escrevo.

Existe uma maneira mais fácil de fazer essa mensagem irritante desaparecer?

    
por WinEunuuchs2Unix 26.03.2017 / 03:32

2 respostas

3

Adicione automaticamente 2>/dev/null sempre que o zenity for chamado

Edite o arquivo ~/.bashrc e pesquise por estas linhas:

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

Adicione as seguintes linhas depois:

# 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"

Salve o arquivo e abra uma nova janela de terminal para testar:

zenity --info --text "Hello Zenity-Silly-Error-Free World"

Voila! Todo o seu código antigo é fixo e o código futuro não precisa ter 2>/dev/null anexado a ele, como todas as outras respostas instruem.

    
por WinEunuuchs2Unix 26.03.2017 / 03:32
5

Basicamente, não há outra maneira, exceto redirecionar stderr para /dev/null . A principal razão é porque o Gtk requer janelas de diálogo (que é o que zenity windows realmente são) para ter uma janela de aplicativo pai. A mesma coisa acontece se você construir a janela da GUI do zero em c ou python.

Assim, a única maneira "real" é que os desenvolvedores Gtk realmente permitam que as janelas de diálogo fiquem por conta própria, ou os desenvolvedores zenity silenciem esses avisos a partir de seu código-fonte. Caso contrário, sua única opção é adicionar constantemente 2>/dev/null a qualquer comando zenity . É claro que você sempre pode criar um alias ou uma função de wrapper que faça isso para você, algo do tipo:

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

Isso, no entanto, pode ter problemas com a cotação e a transmissão de argumentos, mas na maioria das vezes deve funcionar. Se você trabalha em Python ou em outra linguagem que pode realmente lidar com o Gtk, você pode criar suas próprias caixas de diálogo pop-up com janelas pai ocultas, que custam complexidade e aprendem como criar essas coisas. Mas, novamente, o caminho real seria para zenity desenvolvedores realmente consertar isso ou desenvolvedores Gtk para reconhecer a necessidade de janelas de diálogo autônomo.

    
por Sergiy Kolodyazhnyy 26.03.2017 / 03:57