Como executar gsettings dentro de um confinamento do pacote snap

0

Estou criando um pacote instantâneo para o meu aplicativo, que é baseado em java e faz o download de papéis de parede da Internet. Até aí tudo bem, mas agora estou adicionando um novo recurso para definir o papel de parede selecionado e não funciona. Esse recurso é implementado para desktops Unity e Gnome 3, que fornecem uma maneira fácil de configurar o papel de parede da área de trabalho através da ferramenta de linha de comando gsettings.

Desta forma, executando gsettings set org.gnome.desktop.background arquivo picture-uri: //blablabla.jpg você pode alterar o papel de parede diretamente, e meu aplicativo baseado em java está usando este ferramenta e este comando para atingir esse objetivo.

Primeiro, quando testei o wallpaperdownloader em um pacote de encaixe, ele reclamou porque não encontrou binário de configurações no momento do snap. Agora está corrigido, porque incluí libglib2.0-bin como um pacote de estágio. No entanto, isso não funciona. Eu acho que gsettings dentro do pacote snap não podem manipular arquivos fora do snap, e eu preciso modificar diretamente esses arquivos dentro do diretório pessoal do usuário. Posso conseguir isso ou está restrito?

Estes são os arquivos snapcraft.yaml e o script executado quando o wallpaperdownloaded é iniciado

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

P.S .: Eu tentei gsettings e plugins unity7, mas eles não funcionaram muito embora eu os incluísse apenas no arquivo snapcraft.yaml e eu não apliquei qualquer ajuste / configuração.

Muito obrigado,

Eloy

    
por Eloy García Almadén 30.08.2016 / 16:47

1 resposta

1

Finalmente, resolvi esse problema. O truque é usar a interface gsettings e os auxiliares de área de trabalho do snapcraft do Wiki ( desktop / gtk3 ). Estes são os arquivos principais. Eu os publiquei apenas no caso de serem úteis para outros resolverem um problema similar.

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
    
por Eloy García Almadén 18.09.2016 / 21:34