2014-02-23 77 views
0

我正在編寫一個快速的shell腳本,用於執行某些顯示設置,但這無關緊要。 shell腳本將放在任何可以訪問的目錄中;我選擇了/usr/local/bin/<dir>/<script>dpkg postinst - 如何以普通用戶身份運行它

我使用postinst腳本來創建相關的快捷方式,並將此腳本註冊爲啓動應用程序。一旦配置完成,我想要執行/usr/local/bin/<dir>/<script>。這似乎執行(因爲它會生成詳細的數據),但沒有按預期的方式進行視覺更改(顯示設置不起作用)。我期待爲root用戶完成更改。安裝退出後,我可以運行/usr/local/bin/<dir>/<script>以獲得所需的效果,但sudo /usr/local/bin/<dir>/<script>不會產生相同的效果,因爲它會更改根的顯示設置。

它可以簡單地解決,如果postinst中的命令可以運行WITHOUT根權限。我怎樣才能做到這一點?

回答

2

如果你想以非root用戶的身份運行某些東西,有很多方法可以做到這一點。它被稱爲「放棄特權」。如果您對保留環境的方式,如何繼承功能或應用PAM配置的方式沒有特殊要求,那麼使用shell腳本上下文的最簡單方法可能是使用/bin/su。例如,

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

有關該工具的更多信息,請參閱man su

+0

這不適用於多種事情......比如讓我們說gsettings ...理想情況下,這應該適用於用戶whizzzkid:sudo su「whizzzkid」-c gsettings set org.gnome.desktop.background picture-uri「file :// 「。但是它拒絕授權給dconf。 – whizzzkid

+1

我按照問題回答了您的問題;你說過腳本做了什麼是無關緊要的,如果這些命令可以在沒有root權限的情況下運行,那麼所有這些都將被解決。不過要注意的是:「如果你對環境的保存沒有特別的要求」。 gsettings工具確實取決於某些環境變量是完整的。請參閱http://stackoverflow.com/questions/10374520/gsettings-with-cron上的一些答案以獲取有關如何繼續的線索。 –

相關問題