web-dev-qa-db-fra.com

Comment faire en sorte que l'avertissement de «parent transitoire» de zenity disparaisse définitivement

Zenity m'énerve en affichant toujours l'avertissement dans le terminal:

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

Apparemment je ne suis pas le seul:

Presque toutes les réponses vous disent de changer la façon dont vous appelez zenity en ajoutant 2>/dev/null à la fin de la commande. Je ne veux pas faire cela à tout le code que j'ai déjà écrit et je m'en souviens pour le futur code que j'écrirai.

Existe-t-il un moyen plus simple de faire disparaître ce message agaçant?

5
WinEunuuchs2Unix

Mise à jour 2019-05-17: OP a trouvé une autre résolution selon la même méthode que celle présentée ici via la redirection globale à l'aide de la commande exec. Veuillez vous référer au message en double lié pour plus d'informations.

Fondamentalement, il n'y a pas d'autre moyen que de rediriger stderr vers /dev/null. La raison principale en est que Gtk a besoin de fenêtres de dialogue (ce que sont en réalité les noms zenity windows) pour avoir une fenêtre d'application parente. La même chose se produit si vous construisez une boîte de dialogue graphique en partant de zéro en c ou en python.

Ainsi, la seule "vraie" méthode consiste pour les développeurs de Gtk à laisser les fenêtres de dialogue se débrouiller seules ou aux développeurs de zenity pour faire taire les avertissements contenus dans leur code source. Sinon, votre seule option consiste à ajouter constamment 2>/dev/null à toute commande zenity. Bien sûr, vous pouvez toujours créer un alias ou une fonction wrapper qui le fera pour vous, quelque chose dans le sens de ceci:

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

Cela peut toutefois poser des problèmes de citation et de transmission d’arguments, mais devrait dans la plupart des cas fonctionner. Si vous travaillez dans Python ou dans un autre langage qui peut réellement gérer Gtk, vous pouvez créer vos propres boîtes de dialogue contextuelles avec des fenêtres parent masquées, ce qui se fait au détriment de la complexité et de l’apprentissage de la création de ces éléments. Mais là encore, la solution serait que les développeurs de zenity résolvent ce problème ou que les développeurs de Gtk reconnaissent la nécessité de disposer de fenêtres de dialogue autonomes.

6

Ajouter automatiquement 2>/dev/null chaque fois que zenity est appelé

Editez le fichier ~/.bashrc et recherchez ces lignes:

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

Ajoutez les lignes suivantes après:

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

Enregistrez le fichier et ouvrez une nouvelle fenêtre de terminal pour tester:

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

Voila! Tout votre ancien code est corrigé et le code futur n'a pas besoin d'être ajouté à 2>/dev/null comme toutes les autres réponses.

5
WinEunuuchs2Unix

Je préfère éditer ~/.bashrc avec:

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

Ceci est plus restrictif, n'inhibe que les messages d'avertissement qui ont la chaîne GtkDialog, laissant les autres messages d'erreur ou d'avertissement à afficher

3
Julio N