Под 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 --help-general
дает,--attach=WINDOW Set the parent window to attach to
но я не уверен, как его использовать (что такое Window?), возможно, это решит вашу проблему.WINDOW_ID=$(xprop -name
echo $ TITLE` | grep WM_CLIENT_LEADER | cut -d "#" -f2 | cut -c2-20) `и я попытался,zenity --attach=$WINDOW_ID --text-info --filename=<filename>
но, к сожалению, я все еще получил предупреждение. Жаль, но однажды может пригодиться узнать, как получить идентификатор окна!NULL
. Однако я не мог установитьmake install
локально zenity (я не мог найти документы или что-то о том, как настроить установку), поэтому я в конце концов сдался. Придется использовать грязный2>/dev/null
.Ответы:
Игнорируй это.
Это предупреждение , а не ошибка. Приложение работает, просто оно не закодировано с учетом передового опыта, как кажется. Вам нужно изменить
zenity
исходный код, чтобы реализовать исправление, описанное в связанном с вами вопросе, а затем скомпилировать его самостоятельно, но ... в любом случае это работает, так почему вы должны беспокоиться?Если вы просто хотите избавиться от вывода в вашем терминале, вы можете просто перенаправить STDERR (стандартный поток ошибок, на который выводится предупреждение) в
/dev/null
(виртуальное символьное устройство, которое глотает данные), добавив2> /dev/null
в конец команды, как это:источник
2> /dev/null
не дает желаемого эффекта, предупреждение все еще сохраняется. Я знаю, что это только неприятность, но я хотел бы иметь возможность подавлять подобные предупреждения.Похоже, что разработчики Gtk решили добавить это предупреждение, которое затрагивает ряд пакетов. Нам просто нужно подождать, пока разработчик Zenity догонит и исправит Zenity.
С оболочкой bash (она не является Posix-совместимой) относительно просто подавить определенные сообщения об ошибках, а другие сообщения могут проходить через stderr:
Это не мешает работе stdout, поэтому его можно передать или использовать в подстановке команд как обычно:
источник
zenity ... 2>/dev/null
работает для меня. Единственная проблема, которую я вижу, состоит в том, что другие (важные) сообщения об ошибках также будут подавлены, так что лучше собрать сборку ошибок в вашем кодеисточник
Основываясь на ответе Дэйва Роува , если у вас много подсказок, вы можете очистить это, создав такую функцию, как
затем используйте это так:
Это немного облегчает чтение в сочетании с другой логикой:
источник