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. Примечание: приоритет окна ввода должен быть высоким или критическим, иначе он не будет отображаться.

Мой ответ запоздал, но для дальнейшего использования я вижу три неотложные проблемы:

  1. Вы не устанавливаете -eфлаг вверху, который необходим для Debconf.

  2. Вы не источник /usr/share/debconf/confmoduleэто должно быть во всех сценариях управления.

  3. Результат zenityне перенаправляется в переменную или куда-либо, что может помешать протоколу связи Debconf.

Лучше всего использовать Debconf, если он может работать.

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