web-dev-qa-db-ja.com

スナップインストールされたアプリのGTKロードモジュールの障害

私のスナップインストールされたアプリはwxWidgetsアプリケーションです。コンパイルとリンケージの後は正常に動作しますが、一度インストールすると動作しません。アプリの名前を入力すると、おそらく '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/ディレクトリ内に配置されるわけではないということです。この仮説を2つの方法でテストしようとしました。まず、インストール前にprimeディレクトリを使い果たすことで、バグはそこで再現できません。次に、必要なライブラリと思われるものを上記のディレクトリにコピーしますが、スナップクラフトの制限をdevmodeに変更し、インストール中に--devmodeフラグを使用しても、読み取り専用です。そして大声で叫ぶためのルートとしてchmod 777 .を試しても.

誰かが私の愚かなプロジェクトを見てみたいと思っているなら、それをクローンすることができます...

http://github.com/spencerparkin/RubiksCube.git

Snapcraft.yamlファイルは、sconsから実行されるように構成されています。私はプロジェクトのルートでスナップクラフトを試みません。試してみる前に、snapcraft.yamlファイルを他のディレクトリにコピーします。

私は長い道のりを歩んで、このことを実際に機能させることに非常に近いと感じています...ただ一つの障害物が次々と...私は吸います。

2
Spencer Parkin

ここに多くの問題があるので、このアパートを取りましょう:

primeから実行

クラシックシステムから直接primeから実行すると、クラシックシステムにあるすべてのライブラリが表示されるため、実際には最適な方法ではありません。 snapとして実行すると、実際に表示されるルートファイルシステムは、この場合はubuntu-coreまたはcoreです。

環境がどのように感じるかを体験するために、その環境のシェルに飛び込む方が良いかもしれません、あなたはそれを実行することによってそうすることができます:

snap run --Shell <snap-name>.<app-name>

読み取り専用スナップ

実際のスナップ用にインストールされたスナップはsquashfsへのマウントであり、このファイルシステムは読み取り専用であり、インストールされたスナップに書き込みおよび変更を加えることができない理由です。

開発中は、プロジェクトディレクトリから行う方が良い場合があります。

snap try prime [--devmode]

そうすることで、primeディレクトリを実際に編集して、さまざまなものをテストできます。

アプリを起動する

モジュールのロード警告はそれほど悪くはありませんが、いくつかのスナップでも同様に発生します。悪いのは、ディスプレイが見つからないことです。すぐに使い始めるために、デスクトップランチャーを使用すると、かなり早くブートストラップできます。

これらは部品として提供され、スナップクラフトでこれがどのように機能するかを感じるために、実行します

snapcraft update
snapcraft search desktop

そして、これらのpartsの1つが何をするかを見るために、実行します

snapcraft define <part-name>

デスクトップランチャーに関する詳細情報は https://insights.ubuntu.com/2016/07/06/ubuntu-app-developer-blog-announcing-new-snap-desktop-launchers/ で入手できます。

1
sergiusens