Zenity 在通过 Ubuntu 软件中心运行时不显示 deb preinst 中的消息

Zenity 在通过 Ubuntu 软件中心运行时不显示 deb preinst 中的消息

我正在创建一个需要 java oracle >= 7 的 deb 包。因此,我编写了一个简单的带有 bash 脚本的 preinst 文件,它将弹出一条消息(使用 zenity),警告用户需要安装它。但是,当通过 Ubuntu 软件中心安装 deb 包时,它会在弹出消息之前崩溃。请帮我修复它。

编辑:这发生在 Ubuntu 15.04 64/32 位上。

预安装文件:

#!/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

答案1

我发现这个选项:需要将“export DISPLAY=:0”添加到 zenity 脚本行。

export DISPLAY=:0 && zenity --error --text="Please install java oracle 7 or newer. \"Ok\", exiting installation"

但对我来说没用。奇怪的是,每隔 20 次左右的测试它就会起作用。

对我来说最好的方法是放弃 zenity 并使用 debconf。Debconf 教程链接. 注意:输入窗口的优先级需要很高或者很关键,否则不会显示。

答案2

我的回答有些晚了,但作为将来的参考,我可以看到三个直接的问题:

  1. 您没有-e在顶部设置 Debconf 所需的标志。

  2. 您不需要/usr/share/debconf/confmodule在所有控制脚本中找到必须的源代码。

  3. 的输出zenity不会被重定向到变量或者任何可能干扰 Debconf 通信协议的地方。

如果可以的话,最好使用 Debconf。

相关内容