スナップパッケージの制限内で gsettings を実行する方法

スナップパッケージの制限内で gsettings を実行する方法

私は、Java ベースでインターネットから壁紙をダウンロードするアプリケーション用のスナップ パッケージを作成しています。これまでのところは順調ですが、選択した壁紙を設定するための新しい機能を追加したところ、うまくいきませんでした。この機能は Unity および Gnome 3 デスクトップ用に実装されており、gsettings コマンドライン ツールを使用してデスクトップの壁紙を簡単に設定できます。

このように実行するとgsettings は org.gnome.desktop.background の picture-uri ファイルを://blablabla.jpg に設定しますデスクトップの壁紙を直接変更することができ、私の Java ベースのアプリケーションはこのツールとこのコマンドを使用してこの目的を達成しています。

まず、snapパッケージ内でwallpaperdownloaderをテストしたところ、snap内にgsettingsバイナリが見つからないというエラーが出ました。今は修正されています。libglib2.0-binステージ パッケージとして。それにもかかわらず、動作しません。スナップ パッケージ内の gsettings はスナップ外のファイルを操作できないため、ユーザーのホーム ディレクトリ内のファイルを直接変更する必要があると思います。これを実現できますか、それとも制限されていますか?

これらはsnapcraft.yamlファイルとwallpaperdownloadedが起動されたときに実行されるスクリプトです。

スナップクラフト

name: wallpaperdownloader
version: "2.2"
summary: Download and manage your favorite wallpapers from the Internet
description: WallpaperDownloader is a simple GUI Java based application for downloading and managing wallpapers from the Internet
confinement: strict

apps:
  wallpaperdownloader:
    command: wallpaperdownloader.sh
    plugs: [x11, network-bind, home]

parts:
  # Pulls the code from the original source (master branch)
  wallpaperdownloader:
    plugin: maven
    source: .
    stage-packages:
      - libglib2.0-bin

  # It will copy wallpaperdownloader script into /bin/
  # This script contains all the commands needed (sets env variables, launches the jar file...) to
  # execute the application
  exec:
    plugin: copy
    files:
      wallpaperdownloader.sh: bin/wallpaperdownloader.sh

壁紙ダウンロード

#!/bin/sh
# Only for packaging!
# Script for snap packaging wallpaperdownloader application. It is not related to the code itself
# Not good, needed for fontconfig
export XDG_DATA_HOME=$SNAP/usr/share
# Font Config
export FONTCONFIG_PATH=$SNAP/etc/fonts/config.d
export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf
export HOME=$SNAP_USER_DATA
java -jar -Duser.home=$SNAP_USER_DATA $SNAP/jar/wallpaperdownloader.jar

PS: gsettings と unity7 プラグインを試しましたが、snapcraft.yaml ファイルに含めただけで、調整や構成を適用しなかったにもかかわらず、動作しませんでした。

どうもありがとうございます、

エロイ

答え1

ついにこの問題を解決しました。その秘訣はg設定インターフェースと snapcraft-desktop-helpers の部分は Wiki から (デスクトップ/gtk3)。これらはメインのファイルです。他の人が同様の問題を解決するのに役立つかもしれないので、公開しました。

スナップクラフト.yaml

name: wallpaperdownloader
version: "2.2"
summary: Download and manage your favorite wallpapers from the Internet
description: WallpaperDownloader is a simple GUI Java based application for downloading and managing wallpapers from the Internet
grade: stable
confinement: strict

apps:
  wallpaperdownloader:
    command: wallpaperdownloader.sh
    plugs: [x11, network-bind, home, gsettings]

parts:
  # Pulls the code from the original source (master branch)
  # desktop/gtk3 is a snapcraft part (snapcraft-desktop-helpers) from the Wiki: https://wiki.ubuntu.com/snapcraft/parts
  # It enables desktop integration and gsettings manipulation from the confined application
  # It is necessary to use gsettings interface (see above) in order to have a fully functional
  # desktop/gtk3 part
  # Github repository for snapcraft-desktop-helpers: https://github.com/ubuntu/snapcraft-desktop-helpers
  wallpaperdownloader:
    plugin: maven
    source: ..
    after: [desktop/gtk3]

  # It will copy wallpaperdownloader script into /bin/
  # This script contains all the commands needed (sets env variables, launches the jar file...) to
  # execute the application
  exec:
    plugin: dump
    source: scripts

壁紙ダウンロード

#!/bin/sh
# Only for packaging!
# Script for snap packaging wallpaperdownloader application. It is not related to the code itself
# Not good, needed for fontconfig
export XDG_DATA_HOME=$SNAP/usr/share
# Font Config
export FONTCONFIG_PATH=$SNAP/etc/fonts/config.d
export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf
export HOME=$SNAP_USER_DATA
desktop-launch java -jar -Duser.home=$SNAP_USER_DATA $SNAP/jar/wallpaperdownloader.jar

関連情報