Рейтинг:0

Как запустить скрипт от root с DISPLAY=:0

флаг jp

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

Я попытался с файлом my.sh:

экспорт ДИСПЛЕЙ =: 0
/usr/bin/python3 /путь/к/myscript.py

кронджоб:

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

И все же не запускается.

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

user10489 avatar
флаг in
Проверьте почтовый ящик root на наличие ошибок из cron и, возможно, добавьте эти ошибки в свой вопрос? Предполагая, что вы вошли в консоль как пользователь без полномочий root, вам может потребоваться использовать xauth, чтобы скопировать отображаемый файл cookie в учетную запись root. Или, как вариант, запустить скрипт в cron от имени того же пользователя, который залогинился.
Hakan Ulusoy avatar
флаг jp
Я вхожу в систему как root. crontab также является корневым. мое главное подозрение в том, что экспорт DISPLAY. Я запускаю этот sh как root из ssh, тоже не работает; возвращается с невозможностью подключения дисплея. Однако, если я запускаю sh как пользователь, он работает (без привилегий root, снова возникает ошибка)
user10489 avatar
флаг in
Вы вошли в графическую консоль одновременно с использованием ssh? Если да, то под каким пользователем?
user10489 avatar
флаг in
Когда вы входите в систему с помощью ssh, вы ожидаете, что сценарий будет работать на локальном для вас дисплее или на дисплее, который находится на компьютере, для доступа к которому вы используете ssh?
Hakan Ulusoy avatar
флаг jp
на самом деле меняется. Иногда войти иногда нет. Но пользователь тот же, существует только один пользователь. Вы имеете в виду, что вы не можете использовать отображение из ssh или cronjob, пока пользователь не войдет в систему и не запустит xsession?
user10489 avatar
флаг in
Вы не можете открыть окно в несуществующем сеансе. Если вы хотите отобразить окно в своем локальном сеансе, а не сеанс (возможно, несуществующий) на удаленном компьютере, вам не следует возиться с DISPLAY.
Рейтинг:1
флаг cn
raj

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

Вы должны добавить этот сценарий в «Автозапуск программ» сеанса рабочего стола. Что касается запуска от имени пользователя root, для меня наиболее надежным методом запуска сценария от имени пользователя root является использование бинарная оболочка это setuid root.

Напишите следующую короткую программу на C (назовите ее обертка.с Например):

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

основной ()
{
   инт рс;
   сетуид(0);
   rc=WEXITSTATUS(system("/path/to/your/script" ));
   выход(рс);
}

Скомпилируйте программу, используя: gcc -o обертка wrapper.c (тебе нужно иметь построить-необходимый установленный для этого пакет).

Сделать обертка корневой идентификатор файла: sudo chown root: корневая оболочка с последующим обертка sudo chmod o+s

Затем настройте путь к вашему обертка файл в программы запуска сеанса вашего рабочего стола.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.