【问题标题】:dpkg postinst - how to run it as a normal userdpkg postinst - 如何以普通用户身份运行它
【发布时间】:2014-03-25 07:44:00
【问题描述】:

我正在编写一个快速的 shell 脚本来处理显示设置,但这无关紧要。将shell脚本放在任何可以访问的目录中;我选择了/usr/local/bin/<dir>/<script>

我使用 postinst 脚本创建相关快捷方式并将此脚本注册为启动应用程序。配置完成后,我希望执行/usr/local/bin/<dir>/<script>。这似乎执行(因为它生成详细数据),但没有预期的视觉变化(显示设置不生效)。我期望为 root 用户完成更改。安装退出后,我可以运行/usr/local/bin/<dir>/<script> 以获得所需的效果,但sudo /usr/local/bin/<dir>/<script> 不会产生相同的效果,因为它正在更改根的显示设置。

如果postinst里面的命令可以没有root权限运行,就可以轻松解决。我怎样才能做到这一点?

【问题讨论】:

    标签: debian deb dpkg post-install


    【解决方案1】:

    如果您想以 root 以外的用户身份运行某些东西,有很多方法可以做到这一点。它被称为“放弃特权”。如果您对如何保留环境、如何继承功能或如何应用 PAM 配置没有特殊要求,那么从 shell 脚本上下文中最简单的方法可能是使用 /bin/su。例如,

    su $someuser -c /usr/local/bin/$dir/$script
    

    有关该工具的更多信息,请参阅man su

    【讨论】:

    • 这对很多事情都不起作用......就像我们说 gsettings......理想情况下这应该适用于用户 whizzzkid: sudo su "whizzzkid" -c gsettings set org.gnome.desktop.background图片 uri "file://"。但它失败,拒绝 dconf 的权限。
    • 我按要求回答了您的问题;您说脚本的作用无关紧要,如果可以在没有 root 权限的情况下运行命令,一切都会得到解决。但是请注意警告:“如果您对如何保护环境没有特殊要求”。 gsettings 工具确实依赖于某些完整的环境变量。请参阅stackoverflow.com/questions/10374520/gsettings-with-cron 上的一些答案以获取有关如何继续的线索。
    猜你喜欢
    • 2017-08-09
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多