我想运行旧的 GNOME 应用程序

我想运行旧的 GNOME 应用程序

我知道我想做的事情有点不寻常,但是我需要在 Ubuntu 20.04 上运行一个相当老版本的 gThumb(2.10.11,来自 Ubuntu 10.04)。

(有人在评论中问我为什么,所以这里解释一下:旧版本有一个非常好的幻灯片模式,它提供了 Ubuntu 20.04 中当前版本的 gThumb 所没有的几个功能不是提供。其中包括:1)选项“仅适用于较大图像的屏幕大小”在幻灯片模式下有效;2)GIF 动画在幻灯片模式下播放;3)快捷键“I” - 显示有关当前图像的信息 - 在幻灯片模式下有效。所有这些在当前 gThumb 中均不起作用。

到目前为止,我已设法将运行此应用程序所需的所有旧库收集到一个目录中(因此所有依赖项都得到满足),应用程序启动并出现 GUI(下面的屏幕截图)。但是,该应用程序无法与当前的 GNOME VFS 守护程序通信,因此无法加载文件夹内容,因此它实际上无法使用。终端中出现以下错误消息:

(gthumb:13485): libgnomevfs-WARNING **: 13:34:54.800: Failed to activate daemon: The name org.gnome.GnomeVFS.Daemon was not provided by any .service files

在此处输入图片描述

新旧 GNOME VFS 守护进程之间肯定存在一些不兼容性,应用程序无法与其通信。有没有办法解决这个问题,让应用程序在我的系统上运行 - 例如,让应用程序不使用 VFS,而是直接从磁盘读取?(除了必须自己重建应用程序,因为我认为这不可行)

由于问题与 VFS 有关,我尝试libgnomevfs-2.so.0将从 Ubuntu 10.04 复制的库替换为我能找到的最新库,即来自 Ubuntu 18.04(20.04 没有libgnomevfs-2.so.0可用的库)。但是,效果是一样的。因此对 VFS 的更改一定发生在 18.04 和 20.04 之间。

答案1

由于依赖关系问题,您将破坏操作系统。因此我建议:从以下位置下载 Ubuntu 10.04这里. 将其安装在 VM 容器中并在其中运行应用程序。

答案2

我能够解决这个问题。问题是,除了常规的 GNOME VFS 守护进程(/usr/libexec/gvfsd,或/usr/lib/gvfs/gvfsd旧版本的 Ubuntu 中)之外,gThumb 还使用另一个守护进程,直到 Ubuntu 18.04 - /usr/lib/gnome-vfs-2.0/gnome-vfs-daemon。此守护进程在 Ubuntu 20.04 中不再存在,因此旧的 gThumb 无法访问磁盘上的文件/文件夹。需要将守护进程复制到 Ubuntu 20.04,以便应用程序可以使用它。

使应用程序运行的完整解决方案如下(这很长,可能除了我之外没有人对此感兴趣,但是当我解决了这个问题后,我发布了一个答案,也许将来有人可以使用它:)):

(顺便说一句,我想所有这些都可以做成一个 AppImage 包,如果我知道如何做的话:))

  1. 为旧的 gThumb 应用程序创建一个目录,例如/opt/gthumb_old
  2. 从 64 位 Ubuntu 10.04 的工作安装中,将以下文件复制到/opt/gthumb_old(我有这样的安装可用;如果没有,您需要识别包含这些文件的软件包,下载它们并提取文件,这需要更多的工作):
/usr/bin/gthumb
/usr/lib/gthumb/libgthumb.so
/usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so
/usr/lib/glade/2.0/libbonobo.so
/usr/lib/glade/2.0/libcanvas.so
/usr/lib/glade/2.0/libgnome.so
/usr/lib/gnome-vfs-2.0/gnome-vfs-daemon
/usr/lib/libart_lgpl_2.so.2
/usr/lib/libaudiofile.so.0
/usr/lib/libbonobo-2.so.0
/usr/lib/libbonobo-activation.so.4
/usr/lib/libbonoboui-2.so.0
/usr/lib/libcanberra-gtk.so.0
/usr/lib/libcanberra.so.0
/usr/lib/libesd.so.0
/usr/lib/libfam.so.0
/lib/libgcrypt.so.11
/usr/lib/libglade-2.0.so.0
/usr/lib/libgnome-2.so.0
/usr/lib/libgnomecanvas-2.so.0
/usr/lib/libgnome-keyring.so.0
/usr/lib/libgnomeui-2.so.0
/usr/lib/libgnomevfs-2.so.0
/usr/lib/libgnutls.so.26
/usr/lib/libhal-storage.so.1
/usr/lib/libhal.so.1
/usr/lib/libiptcdata.so.0
/usr/lib/libopenrawgnome.so.1
/usr/lib/libopenraw.so.1
/usr/lib/libORBit-2.so.0
/usr/lib/libORBitCosNaming-2.so.0
/lib/libpng12.so.0
/usr/lib/libtasn1.so.3
/usr/lib/libtiff.so.4

上述/usr/lib/*.so.*/lib/*.so.*文件是指向其他文件的符号链接,因此您当然必须复制链接指向的文件,但目标名称应为链接的名称。(如果您使用cpscp复制上述名称,则不必担心这一点,因为这会自动发生。)

您还需要符号链接 /usr/lib/x86_64-linux-gnu/libjpeg.so.8libjpeg.so.62/opt/gthumb_old应用程序需要链接到libjpeg.so.62,但是从 Ubuntu 10.04 复制的原始libjpeg.so.62库无法正常工作,并且无法显示 JPEG 文件;因此我们将改用当前系统库。

  1. 创建一个目录并将Ubuntu 10.04 安装/opt/gthumb_old/glade的内容复制到该目录。/usr/share/gthumb/glade

  2. 创建一个目录并将Ubuntu 10.04 安装/opt/gthumb_old/modules的内容复制到该目录。/usr/lib/gthumb/modules

  3. 创建一个目录并将Ubuntu 10.04 安装/opt/gthumb_old/vfs_modules的内容复制到该目录。/usr/lib/gnome-vfs-2.0/modules

  4. 创建一个目录并将Ubuntu 10.04 安装/opt/gthumb_old/modules_conf的内容复制到该目录。/etc/gnome-vfs-2.0/modules

  5. .gtk-2.0/x86_64-pc-linux-gnu/engines在您的目录中创建一个子目录/home/username,并将文件/usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so从 Ubuntu 10.04 复制到此目录。这是菜单和其他 UI 小工具正确显示所必需的(应用程序在没有此文件的情况下仍可工作,但 UI 会稍微扭曲)。如果您没有安装 Adob​​e Reader 9(Linux 的最后一个可用版本),您可以跳过中间子目录x86_64-pc-linux-gnu并将文件放入 中.gtk-2.0/engines。但如果您安装了 Adob​​e Reader(就像我一样),它需要 32 位版本的文件libmurrine.so,该文件应位于 中.gtk-2.0/i686-pc-linux-gnu/engines,因此最好使用“较长”的版本。

  6. /usr/share/gthumb/glade创建指向的符号链接/opt/gthumb_old/glade

  7. 创建一个/usr/lib/gthumb/modules指向的符号链接/opt/gthumb_old/modules(该目录/usr/lib/gthumb在 Ubuntu 20.04 的标准安装中不存在,因此您必须先创建它)

  8. 创建一个/usr/lib/gnome-vfs-2.0/modules指向的符号链接/opt/gthumb_old/vfs_modules(该目录/usr/lib/gnome-vfs-2.0在 Ubuntu 20.04 的标准安装中不存在,因此您必须先创建它)

  9. 创建一个/etc/gnome-vfs-2.0/modules指向的符号链接/opt/gthumb_old/modules_conf(该目录/etc/gnome-vfs-2.0在 Ubuntu 20.04 的标准安装中不存在,因此您必须先创建它)

  10. /opt/gthumb_old/gvfsd_wrapper创建一个包含以下内容的脚本(该文件必须是可执行的):

#!/bin/sh
GVFSD_DIR=`/usr/bin/dirname $0`
LD_LIBRARY_PATH=${GVFSD_DIR} ${GVFSD_DIR}/gnome-vfs-daemon
  1. 将文件/usr/share/dbus-1/services/gnome-vfs-daemon.service从 Ubuntu 10.04 复制到 Ubuntu 20.04 上的同一目录(/usr/share/dbus-1/services),然后編輯如下。原始文件内容如下:
[D-BUS Service]
Name=org.gnome.GnomeVFS.Daemon
Exec=/usr/lib/gnome-vfs-2.0/gnome-vfs-daemon

更改为:

[D-BUS Service]
Name=org.gnome.GnomeVFS.Daemon
Exec=/opt/gthumb_old/gvfsd_wrapper
  1. 最后,创建一个脚本/usr/local/bin/gthumb_old来运行该应用程序:
#!/bin/sh
LD_LIBRARY_PATH=/opt/gthumb_old /opt/gthumb_old/gthumb

(您也可以参考此脚本在菜单或 GNOME 面板中创建启动器)。

该应用程序与 Ubuntu 20.04 中现有的 gThumb 3.8.0 不冲突,因为它将其配置数据存储在不同的位置。两者都可以独立使用,但存在下面描述的一个可能的问题。

笔记应用程序在图像目录中崩溃,而该图像目录中的.comments子目录包含由较新版本的 gThumb 创建的评论。因此,如果应用程序在进入某个目录后崩溃,则应删除该.comments子目录。

我还发现了一个奇怪的情况,涉及两个特定的图像文件(我有几千个)。应用程序在包含以下内容的目录中崩溃:符号链接到位于另一个目录中的这两个文件(当我用文件副本或硬链接替换符号链接时,没有崩溃 - 它只发生在这两个文件上)。如果您的图像目录中没有任何符号链接,则不会出现此问题。

应用程序运行的最终截图:

在此处输入图片描述

相关内容