
Я создаю пакет snap для своего приложения, которое основано на Java и загружает обои из Интернета. Пока все хорошо, но теперь я добавляю новую функцию для установки выбранных обоев, и она не работает. Эта функция реализована для рабочих столов Unity и Gnome 3, которые предоставляют простой способ установки обоев рабочего стола с помощью инструмента командной строки gsettings.
Таким образом, выполняяgsettings set org.gnome.desktop.background файл-uri изображения://blablabla.jpgвы можете напрямую менять обои рабочего стола, и мое приложение на основе Java использует этот инструмент и эту команду для достижения этой цели.
Во-первых, когда я тестировал wallpaperdownloader в пакете snap, он жаловался, потому что не нашел двоичный файл gsettings в snap. Теперь это исправлено, потому что я включилlibglib2.0-binкак пакет stage. Тем не менее, это не работает. Я полагаю, что gsettings внутри пакета snap не может манипулировать файлами вне snap, и мне нужно напрямую изменять эти файлы в домашнем каталоге пользователя. Могу ли я этого добиться или это ограничено?
Это файлы 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
Наконец, я решил эту проблему. Хитрость в том, чтобы использоватьgsettingsinterface и 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