Debian dpkg postinst-如何作为普通用户运行它

Debian dpkg postinst-如何作为普通用户运行它,debian,deb,dpkg,post-install,Debian,Deb,Dpkg,Post Install,我正在编写一个快速shell脚本,它可以对显示设置进行一些操作,但这与此无关。shell脚本要放在任何可以访问的目录中;我选择了/usr/local/bin/ 我使用postinst脚本创建相关的快捷方式,并将此脚本注册为启动应用程序。配置完成后,我希望执行/usr/local/bin/。这似乎会执行(因为它会生成详细数据),但没有预期的视觉变化(显示设置不会生效)。我希望对根用户进行更改。安装退出后,我可以运行/usr/local/bin/以获得所需的效果,但是sudo/usr/local/b

我正在编写一个快速shell脚本,它可以对显示设置进行一些操作,但这与此无关。shell脚本要放在任何可以访问的目录中;我选择了
/usr/local/bin/

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


如果postinst中的命令可以在没有根权限的情况下运行,那么这个问题可以简单地解决。如何实现这一点?

如果您想以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 picture uri“file://”。但它失败了,dconf被拒绝了许可;您说过脚本所做的与此无关,如果命令可以在没有root权限的情况下运行,那么所有问题都将得到解决。不过,请注意警告:“如果您对如何保护环境没有特殊要求”。gsettings工具确实依赖于某些环境变量是否完好无损。有关如何继续的线索,请参阅中的一些答案。