![如何使用 DISPLAY=:0 以 root 身份启动脚本](https://linux22.com/image/938520/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20DISPLAY%3D%3A0%20%E4%BB%A5%20root%20%E8%BA%AB%E4%BB%BD%E5%90%AF%E5%8A%A8%E8%84%9A%E6%9C%AC.png)
我有一个脚本应该以 root 权限运行,并且还应该使用显示(其中的 opencv imshow)。我如何在重启时运行该脚本?
我尝试使用 my.sh 文件:
export DISPLAY=:0
/usr/bin/python3 /path/to/myscript.py
计划任务:
@reboot /bin/bash /path/to/my.sh
但它还没有启动。
你能帮我么?
答案1
您无法运行通过图形显示运行的作业,@reboot
因为在系统启动时,尚未启动和运行图形显示。
您应该将该脚本添加到桌面会话的“启动程序”中。至于以 root 身份运行,对我来说,以 root 身份运行脚本的最万无一失的方法是使用二进制包装器即 setuid root。
编写如下简短的 C 程序(wrapper.c
例如:调用它):
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
int rc;
setuid( 0 );
rc=WEXITSTATUS(system( "/path/to/your/script" ));
exit(rc);
}
使用以下命令编译程序:(gcc -o wrapper wrapper.c
您需要build-essential
安装该包)。
将文件设置wrapper
为 setuid root:sudo chown root:root wrapper
然后sudo chmod o+s wrapper
然后将文件的路径配置wrapper
到桌面会话的启动程序中。