Puncte:0

Cum să porniți scriptul ca root cu DISPLAY=:0

drapel jp

Am un script care ar trebui să ruleze cu privilegii de rădăcină și, de asemenea, ar trebui să utilizeze display (opencv imshow în el.) Cum pot rula acel script la repornire?

Am încercat cu un fișier my.sh:

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

cronjob:

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

Totuși nu începe.

Poti, te rog, sa ma ajuti?

user10489 avatar
drapel in
Verificați căsuța poștală de la root pentru erori de la cron și poate adăugați acele erori la întrebarea dvs.? Presupunând că sunteți conectat în consolă ca utilizator non-root, poate fi necesar să utilizați xauth pentru a copia modulul cookie de afișare în contul root. Sau, alternativ, rulați scriptul în cron ca același utilizator care este conectat.
Hakan Ulusoy avatar
drapel jp
Mă conectez ca root. crontab este, de asemenea, root. Principalul meu suspect este exportul DISPLAY. Rulez acel sh ca root din ssh, nici nu merge; revine cu afișajul nu se poate conecta. Cu toate acestea, dacă rulez sh ca utilizator, funcționează (fără privilegii de root, ridicați din nou eroarea)
user10489 avatar
drapel in
Sunteți conectat la consola grafică în același timp în care utilizați ssh? Dacă da, ca utilizator?
user10489 avatar
drapel in
Când vă conectați cu ssh, vă așteptați ca scriptul să ruleze pe afișajul local pentru dvs. sau pe afișajul care se află pe mașina la care utilizați ssh pentru a accesa?
Hakan Ulusoy avatar
drapel jp
de fapt se schimba. Uneori, conectați-vă uneori nu. Dar utilizatorul este același, există doar un singur utilizator. Vrei să spui că nu poți folosi display din ssh sau cronjob până când utilizatorul se autentifică și începe xsession?
user10489 avatar
drapel in
Nu poți deschide o fereastră într-o sesiune care nu există. Dacă doriți să afișați o fereastră în sesiunea dvs. locală, mai degrabă decât o sesiune (posibil inexistentă) pe mașina de la distanță, atunci nu ar trebui să vă încurcați cu DISPLAY.
Puncte:1
drapel cn
raj

Nu puteți rula o lucrare care este rulată @reboot cu un afișaj grafic, deoarece în momentul pornirii sistemului, nu există încă un afișaj grafic în funcțiune.

Ar trebui să adăugați acel script la „Programe de pornire” ale sesiunii desktop. În ceea ce privește rularea ca root, cea mai sigură metodă de a rula un script ca root pentru mine este să folosesc a înveliș binar adică rădăcină setuid.

Scrieți următorul program scurt C (numiți-l învelitoare.c de exemplu):

#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(sistem("/calea/la/scriptul/dvs." ));
   ieșire (rc);
}

Compilați programul folosind: gcc -o wrapper wrapper.c (trebuie sa ai construcție-esențială pachet instalat pentru asta).

învelitoare rădăcină setuid fișier: sudo chown root:root wrapper urmat de sudo chmod o+s wrapper

Apoi configurați calea către dvs învelitoare fișier în programele de pornire ale sesiunii desktop.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.