Ändern der Einstellungen für einen anderen Benutzer über ein ansibles Skript (gestartet von vagrant)

7

Ich habe die Frage bereits zum Stackoverflow gestellt, aber ich dachte mir, dass dies ein besserer Ort sein könnte, um eine Antwort zu erhalten: Ich möchte eine virtuelle Maschine mit Ubuntu 16 LTS unter Verwendung von Vagrant und Ansible (lokal) bereitstellen. Ein Teil der Bereitstellung besteht darin, einige Unity Launcher-Symbole für einen Benutzer hinzuzufügen und zu entfernen, der ebenfalls von demselben Skript erstellt wird. Das Skript wird vom vagrantBenutzer gestartet . Nachdem ich einige verwandte Fragen durchgesehen hatte, versuchte ich Variationen von

  • dbus-launch --exit-with-session vor dem Befehl gsettings
  • become_flags: '-i'
  • become_flags: '-H'
  • become_flags: '-E'

auf den folgenden grundlegenden ansible Befehl

- 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 }}"

Bisher kein Erfolg, ABER das Ausführen des Befehls als angemeldeter Benutzer funktioniert.

BEARBEITEN Mein bester Ansatz für eine Lösung wäre, ein Shell-Skript von ansible aus zu starten, anstatt die Änderung in ansible direkt vorzunehmen. Ich bin mir jedoch nicht sicher, wie es aussehen soll.

bln-tom
quelle
1
Wenn Ihre andere Frage noch auf Stackoverflow steht, löschen Sie diese bitte. Cross-
Posted
OK, danke für den Hinweis, ich werde den anderen löschen.
Bln-Tom

Antworten:

1

Ich empfehle Ihnen, eine .desktopDatei in den ~/.config/autostartOrdner jedes Benutzers zu legen , in der das Launcher-Setup-Skript aufgerufen wird. Alternativ können Sie die .desktopDatei /etc/xdg/autostartso ablegen, dass das Skript für jeden Benutzer ausgeführt wird. Anschließend müssen Sie den Benutzernamen abrufen und die Konfiguration des Benutzer-Starters in einer Datenbank finden. Ich persönlich würde ein Python-Skript verwenden, das eine JSON-Datei mit dem Benutzernamen: Launcher List Valies liest, weil es einfach ist.

Sergiy Kolodyazhnyy
quelle
Wenn ich Sie richtig verstehe, wird das Skript dann ausgeführt, wenn sich ein Benutzer als dieser Benutzer anmeldet. Dies würde auch bedeuten, dass das Skript spätere Ergänzungen des Starters durch den Benutzer verarbeiten muss (zumindest nicht überschreiben).
Bln-Tom
@ bln-tom technisch ja. Wenn Ihr Benutzer dem Launcher etwas hinzufügt, bleibt dieser normalerweise dort. Sie haben jedoch ein Skript, das den Launcher jedes Mal ändert, sodass das auch Änderungen erkennen muss.
Sergiy Kolodyazhnyy
Ich plane, dass die Shell-Datei auch eine zusätzliche Datei als Marker erstellt, dass sie ausgeführt wurde. Also ließ ich beim zweiten Bereitstellungslauf die Shell-Datei die .desktop-Datei wieder entfernen
bln-tom
@ bin-tom Ich habe die Ergänzungen, die Sie zu meiner Antwort gemacht haben, zurückgesetzt. Ich schätze die Verbesserung, aber der Code, den Sie geschrieben haben, ist nicht meine ursprüngliche Arbeit, daher ist es für mich falsch, dafür Anerkennung zu finden. Wenn Sie möchten, veröffentlichen Sie bitte Ihre eigene Antwort mit diesem Inhalt. Ich verstehe und habe nichts dagegen, wenn es notwendig ist, meinen Beitrag nicht zu
akzeptieren
3

Ich habe auch Probleme damit, die Launcher-Favoriten über ansible festzulegen.

Für mich bestand die Lösung darin, das Ansible- dconfModul anstelle von gsettings:

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

Ich denke, es funktioniert auch mit anderen Benutzern über become_user(aber ich habe es nicht getestet).

leopold.talirz
quelle