Как запустить сценарий от имени пользователя root с DISPLAY =: 0

У меня есть сценарий, который должен запускаться с привилегиями root, а также должен использовать display (opencv imshow in it.) Как мне запустить этот сценарий при перезагрузке?

Я пробовал использовать файл my.sh:

export DISPLAY=:0
/usr/bin/python3 /path/to/myscript.py

cronjob:

@reboot /bin/bash /path/to/my.sh

Тем не менее не запускается.

Не могли бы вы мне помочь?

0
задан 17 June 2021 в 14:25

1 ответ

Вы не можете запустить задание, которое выполняется @reboot с графическим дисплеем, потому что в момент загрузки системы графический дисплей еще не запущен.

Вам следует добавить этот скрипт в "Startup programs" вашего сеанса рабочего стола. Что касается запуска от имени 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 в стартовых программах вашей сессии рабочего стола.

1
ответ дан 28 July 2021 в 11:27

Другие вопросы по тегам:

Похожие вопросы: