如何使用 DISPLAY=:0 以 root 身份启动脚本

如何使用 DISPLAY=:0 以 root 身份启动脚本

我有一个脚本应该以 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到桌面会话的启动程序中。

相关内容