Zenity не показывает сообщения в deb preinst, когда он запускается через Ubuntu Software Center
Я создаю пакет deb, для которого требуется java oracle >= 7. Поэтому я написал простой preinst-файл со сценарием bash, который выведет сообщение (с использованием zenity), которое предупредит пользователя о необходимости его установки. Однако, когда пакет deb устанавливается через Ubuntu Software Center, он падает до появления сообщения. Пожалуйста, помогите мне исправить это.
Изменить: это произошло в Ubuntu 15.04 64/32 бит.
файл preinst:
#!/bin/bash
JAVA_VERSION=`echo "$(java -version 2>&1)" | grep "java version" | awk '{ print substr($3, 2, length($3)-2); }'`
if [[ "$JAVA_VERSION" = *"1.7"* ]] || [[ "$JAVA_VERSION" = *"1.8"* ]]; then
echo 'java is ok'
exit 0
fi
zenity --error --text="Please install java oracle 7 or newer. \"Ok\", exiting instalation"
exit 1
Установить журнал:
Reading database ... 100%
(Reading database ... 171184 files and directories currently installed.)
Preparing to unpack .../usb/test.deb ...
gdk_mir_display_open
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused (zenity:3179): Gtk-WARNING **:
cannot open display: dpkg: error processing archive /media/test/usb/test.deb (--install):
subprocess new pre-installation script returned error exit status 1
Errors were encountered while processing: /media/test/usb/test.deb
2 ответа
Я нашел эту опцию: 'экспорт DISPLAY=:0' необходимо добавить в строку сценария zenity.
export DISPLAY=:0 && zenity --error --text="Please install java oracle 7 or newer. \"Ok\", exiting installation"
Но это не сработало для меня. Странно, но каждый 20-й тест работал.
Лучшим способом для меня было отказаться от zenity и использовать debconf. Ссылка на учебник по Debconf. Примечание: приоритет окна ввода должен быть высоким или критическим, иначе он не будет отображаться.
Мой ответ запоздал, но для дальнейшего использования я вижу три неотложные проблемы:
Вы не устанавливаете
-e
флаг вверху, который необходим для Debconf.Вы не источник
/usr/share/debconf/confmodule
это должно быть во всех сценариях управления.Результат
zenity
не перенаправляется в переменную или куда-либо, что может помешать протоколу связи Debconf.
Лучше всего использовать Debconf, если он может работать.