需要 运行 chromium 作为普通用户从 root 脚本

Need to run chromium as normal user from root script

我有一个每天使用 rtcwake 关闭的信息亭,它使用 root 用户。我在 rtcwake 完成后使用 && 执行启动脚本,但是它随后以 root 身份启动浏览器导致问题。

这是我使用的命令: echo debian | sudo -S rtcwake -m mem -u -t $(date +%s -d '3 days 7:45') && sudo -u debian -i bash $HOME/kiosk/bin/startup.sh &.

sudo 命令在某种程度上确实有效。它调用 debian 用户,并执行正确的脚本,但是,它仍然搞砸了我的 chromium 偏好。

这是启动脚本:

echo debian | sudo -S hwclock -w

export HOME=/home/debian

#log boot time

echo "Booting at" $(date) >> $HOME/kiosk/bin/logs/boot.log


#echo debian | sudo -S service connman restart


echo debian | sudo -S at 15:30 -f $HOME/kiosk/bin/shutdown.sh

crontab -u debian crontab.txt

bash $HOME/git.sh

#sudo -i -u debian

#start kiosk

export DISPLAY=:0
chromium-browser --kiosk --disable-gpu 
http://localhost/kiosk/Client/main.html &

#update ip
bash /home/debian/git.sh &

我想知道是什么导致 chrome 以 root 身份执行。我不知道出了什么问题。

如果您使用 sudo 执行命令,它不会像 $HOME 那样更改环境变量。由于每个用户的设置都存储在 $HOME 中,如果需要这样的配置文件,这会影响执行的程序。例如检查这个:

sudo -u debian bash -c 'echo $HOME'

它将打印调用用户的主文件夹,而不是通过 -u 指定的用户的主文件夹。 sudo 命令支持 -H 命令行选项来处理这个问题,但是它是否有效取决于所使用的安全警察。

在这种情况下,您可以使用 su 命令代替 sudo 作为解决方案:

... && su debian -c chromium

因为 su 本身是由 root 执行的,所以不会要求您输入密码。

您必须输入密码才能登录新用户 shell。

命令需要修改如下:

echo debian | sudo -S rtcwake -m mem -u -t $(date +%s -d '3 days 7:45') && echo debian | sudo -S -u debian -i bash $HOME/kiosk/bin/startup.sh &

这避免了需要密码才能以普通 Debian 用户身份登录并执行脚本。