스냅 패키지 제한 내에서 gsettings를 실행하는 방법

스냅 패키지 제한 내에서 gsettings를 실행하는 방법

나는 Java 기반이고 인터넷에서 배경 화면을 다운로드하는 내 응용 프로그램용 스냅 패키지를 만들고 있습니다. 지금까지는 괜찮았지만 이제 선택한 배경화면을 설정하는 새로운 기능을 추가하고 있는데 작동하지 않습니다. 이 기능은 gsettings 명령줄 도구를 통해 바탕화면 배경화면을 쉽게 설정할 수 있는 Unity 및 Gnome 3 데스크톱용으로 구현되었습니다.

이런 식으로 실행gsettings는 org.gnome.desktop.Background 그림-uri 파일을 설정합니다://blablabla.jpg바탕 화면 배경 무늬를 직접 변경할 수 있으며 내 Java 기반 응용 프로그램은 이 도구와 명령을 사용하여 이 목표를 달성합니다.

첫째, 스냅 패키지 내에서 wallpaperdownloader를 테스트했을 때 스냅 내에서 gsettings 바이너리를 찾지 못해서 불평했습니다. 이제 내가 포함했기 때문에 수정되었습니다.libglib2.0-bin무대 패키지로 그럼에도 불구하고 작동하지 않습니다. 스냅 패키지 내부의 gsettings는 스냅 외부의 파일을 조작할 수 없으며 사용자의 홈 디렉터리에 있는 해당 파일을 직접 수정해야 하는 것 같습니다. 이것을 달성할 수 있습니까? 아니면 제한되어 있습니까?

이는 snapcraft.yaml 파일과 wallpaperdownloaded가 시작될 때 실행되는 스크립트입니다.

snapcraft.yml

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

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). 주요 파일들입니다. 다른 사람들이 비슷한 문제를 해결하는 데 도움이 될 수 있도록 게시했습니다.

snapcraft.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

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
desktop-launch java -jar -Duser.home=$SNAP_USER_DATA $SNAP/jar/wallpaperdownloader.jar

관련 정보