web-dev-qa-db-fra.com

Modification de gsettings pour un autre utilisateur à partir d'un script ansible (démarré par vagrant)

J'ai déjà posé la question sur stackoverflow, mais je me suis dit que cela pourrait être un meilleur endroit pour obtenir une réponse: je veux approvisionner une machine virtuelle avec Ubuntu 16 LTS en utilisant vagrant et ansible (local). Une partie du provisionnement consiste à ajouter et à supprimer des icônes de lanceur Unity pour un utilisateur également créé par le même script. Le script est lancé à partir de l'utilisateur vagrant. Après avoir parcouru plusieurs questions connexes, j’ai essayé différentes variantes de

  • dbus-launch --exit-with-session avant la commande gsettings
  • become_flags: '-i'
  • become_flags: '-H'
  • become_flags: '-E'

sur la commande de base suivante ansible

- name: Remove Launcher Icons
  command: gsettings set com.canonical.Unity.Launcher favorites "['application://org.gnome.Nautilus.desktop', 'application://firefox.desktop', 'application://gnome-terminal.desktop', 'application://atom.desktop', 'application://unity-control-center.desktop', 'unity://running-apps', 'unity://expo-icon', 'unity://devices']"
  become: true
  become_user: "{{ user }}"

Jusqu'à présent, aucun succès, MAIS exécuter la commande en tant qu'utilisateur connecté fonctionne.

EDIT Ma meilleure solution pour une solution serait de lancer un script Shell depuis ansible au lieu de faire le changement directement dans ansible. Cependant, je ne sais pas à quoi cela devrait ressembler.

6
bln-tom

Je vous recommande de placer un fichier .desktop dans le dossier ~/.config/autostart de chaque utilisateur qui appellera le script de configuration du programme de lancement. Vous pouvez également placer le fichier .desktop dans /etc/xdg/autostart afin que le script s'exécute pour tous les utilisateurs. Vous devrez ensuite saisir un nom d'utilisateur et rechercher la configuration du programme de lancement de l'utilisateur dans une forme de base de données. Je utilise personnellement le script Python qui lit le fichier json avec le nom d’utilisateur: launcher list valies, car c’est simple.

1

J'ai également eu du mal à définir les favoris du lanceur via ansible.

Pour moi, la solution consistait à utiliser le module ansible dconf au lieu de gsettings:

- name: set icons/applications
  dconf:
    key: /com/canonical/unity/launcher/favorites
    value: "{{ launcher_favorites }}"
    state: present

Je suppose que cela fonctionne aussi avec d'autres utilisateurs via become_user (mais je ne l'ai pas testé).

1
leopold.talirz