从 ansible 脚本更改另一个用户的 gsettings(由 vagrant 启动)

从 ansible 脚本更改另一个用户的 gsettings(由 vagrant 启动)

我已经在 stackoverflow 上问过这个问题,但我认为这可能是获得答案的更好的地方:我想使用 vagrant 和 ansible (local) 配置带有 Ubuntu 16 LTS 的虚拟机。配置的一部分是为用户添加和删除一些 Unity 启动器图标,这些图标也是由同一脚本创建的。该脚本从用户启动vagrant。在搜索了几个相关问题后,我尝试了以下变体

  • dbus-launch --exit-with-session在 gsettings 命令之前
  • become_flags: '-i'
  • become_flags: '-H'
  • become_flags: '-E'

以下基本 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 }}"

到目前为止还没有成功,但是以登录用户身份运行该命令是可行的。

编辑 我最好的解决方案是从 ansible 启动 shell 脚本,而不是直接在 ansible 中进行更改。但是,我不确定它应该是什么样子。

答案1

我也曾努力通过 ansible 设置启动器收藏夹。

对我来说,解决方案是使用 ansibledconf模块而不是gsettings

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

我猜它也适用于其他用户become_user(但我还没有测试过)。

答案2

我建议你将一个.desktop文件放入每个用户的~/.config/autostart文件夹中,该文件将调用启动器设置脚本。或者,将.desktop文件放入/etc/xdg/autostart以便脚本为每个用户运行,但随后你需要获取用户名并在某种形式的数据库中找到用户启动器配置。我个人会使用 Python 脚本读取带有用户名的 json 文件:启动器列表值,因为它很简单。

相关内容