我的 snap 安装应用程序是一个 wxWidgets 应用程序。它在编译和链接后运行良好,但从 snap 安装后就无法正常工作。我假设当我输入应用程序的名称时,也许“snapd”会运行目录下的包装器/snap/<myappname>/x1/
。无论如何,我得到了...
Gtk-Message: Failed to load module "overlay-scrollbar"
Gtk-Message: Failed to load module "gail"
Gtk-Message: Failed to load module "atk-bridge"
Gtk-Message: Failed to load module "unity-gtk-module"
23:11:06: Error: Unable to initialize GTK+, is DISPLAY set properly?
我唯一的猜测是,并非所有依赖项都可以/snap/<mayappname>/x1/usr/lib/x86_64-linux-gnu/
通过 snap install 找到并放置在目录中。我尝试用两种方式来测试这个假设。首先,在安装之前运行目录,但错误无法在那里重现prime
。其次,将我认为需要的库复制到所述目录中,但它是只读的,即使我在安装过程中将 snapcraft 限制更改为devmode
并使用该--devmode
标志,即使我尝试以 root 身份运行。chmod 777 .
如果有人有兴趣看看我的这个愚蠢的项目,可以从...克隆它。
http://github.com/spencerparkin/RubiksCube.git
snapcraft.yaml 文件配置为在 scons 上运行。我不会尝试在项目根目录中使用 snapcraft。在尝试之前,我将 snapcraft.yaml 文件复制到其他目录。
我已经走了很长一段路,感觉离真正让这件事成功已经很近了......只是一个接一个的障碍......我很差劲。
答案1
因此,让我们来分析一下这个问题,因为这里存在很多问题:
正在运行prime
当你prime
直接从经典系统运行时,你会看到经典系统拥有的所有库,所以这实际上并不是最好的方法。当作为折断在这种情况下,实际看到的根文件系统是ubuntu-core
或core
。
为了体验该环境的感觉,最好进入该环境的 shell,你可以通过运行以下命令进行操作:
snap run --shell <snap-name>.<app-name>
只读快照
在为实际快照安装时,快照会挂载到squashfs
,此文件系统是只读的,因此您无法写入和修改已安装的快照。
在开发过程中,最好从项目目录中执行以下任务:
snap try prime [--devmode]
通过这样做,您可以实时编辑目录来prime
测试事物的变化。
启动应用程序
模块加载警告并不是那么糟糕,它们也发生在一些快照上。糟糕的是它找不到显示器。为了快速启动,可以使用桌面启动器,它可以让您快速启动。
它们是作为零件提供的,为了了解它是如何与 snapcraft 一起工作的,运行
snapcraft update
snapcraft search desktop
要查看其中一个函数的parts
作用,请运行
snapcraft define <part-name>
有关桌面启动器的更多信息,请访问https://insights.ubuntu.com/2016/07/06/ubuntu-app-developer-blog-announcing-new-snap-desktop-launchers/