Puncte:2

Firefox 94, atunci când rulează dintr-un crontab, susține că „se rulează deja, dar nu răspunde”.

drapel id

Înțeleg că există sau pot exista întrebări similare aici, dar aceasta nu se referă la închisoare de foc nici Firefox nu are întârzieri la pornire.

Informații despre sistemul de operare:

Xubuntu 20.04
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
VERSION_ID="20.04"
$ uname -a
Linux terrance-ubuntu 5.11.0-40-generic #44~20.04.2-Ubuntu SMP Mar 26 oct 18:07:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

introduceți descrierea imaginii aici

Rulez un script de la a crontab care va lansa pagina mea de conectare ADP și mă va semnaliza intrarea și ieșirea la anumite ore ale zilei. Acest lucru a funcționat impecabil până când a fost lansat Firefox 94. Acum, înțeleg că, pentru distanță, Mozilla a decis să nu mai folosească X11, ci D-Bus. Pentru viața mea, nu pot să-mi dau seama ce înseamnă folosirea D-Bus în loc de X11, cu excepția faptului că ei susțin că este mai simplu de utilizat. Presupun că acest lucru se poate datora lui Wayland, pe care nu îl folosesc.

Dacă rulez următorul script de la un terminal de linie de comandă la anumite momente, funcționează perfect, dar dacă rulez scriptul de la crontab Primesc următorul mesaj:

introduceți descrierea imaginii aici

Scenariul (încă o lucrare în curs):

#!/bin/bash

#Această funcție verifică calea aplicației pe un Mac.
realpath1() {
        [[ $1 = /* ]] && echo „$1” || ecou „$PWD/${1#./}”
}

#Această funcție se potrivește cu ziua săptămânii și returnează 0 dacă se potrivește, 1 dacă în weekend.
funcția dowcheck(){
cazul „${daysofweek[@]}” în
    *\ ${DOW}\ *)
        returnează 0;;
    *)
        return 1;;
esac
}

#Această funcție se potrivește dacă ora de intrare sau de ieșire a ceasului este o potrivire cu 0 sau 1 dacă nu.
functie timecheck(){
cazul „${timesofday[@]}” în
    *\ ${HM}\ *)
        returnează 0;;
    *)
        return 1;;
esac
}

#Această funcție corespunde zilelor libere cu ziua de astăzi. Dacă un meci revine 0 înseamnă zi liberă, 1 înseamnă nu zi liberă.
funcția daysoffcheck(){
cazul „${daysoff[@]}” în
    *\ ${daymdy}\ *)
        returnează 0;;
    *)
        return 1;;
esac
}

#Verificați tipul de sistem de operare.
OS_TYPE=$(uname -a | awk '{print $1}')
dacă [[ ${OS_TYPE} == „Linux” ]]; atunci
        OS=$(grep -i ^name= /etc/*release | awk -F= '{print $2}' | sed 's/\"//g')
altfel
        OS=$(system_profiler SPSoftwareDataType | awk '/System Version:/ {print $3}')
fi
if [ "${OS}" = "CentOS Linux" ]; atunci
        OS=Fedora
fi

#Setați directoarele de lucru și setați afișajul pentru a rula într-un CRONJOB.
caz $OS în
        macOS) apppath=/Applications/Firefox.app/Contents/MacOS
        export DISPLAY="/private/tmp/com.apple.launchd.*/org.macosforge.xquartz:0"
                PWD=$(dirname $(realpath1 $(care $0)));;
        *) apppath=/usr/bin
        DM=$(/usr/bin/basename $(/bin/cat /etc/X11/default-display-manager))
        caz $DM in
            lightdm)
                export DISPLAY=:0;;
            gdm3)
                grep -E „# AutomaticLogin|AutomaticLoginEnable = false” /etc/$DM/*.conf >/dev/null && export DISPLAY=:1 || export DISPLAY=:0;;
            *);;
        esac
                PWD=$(dirname $(realpath $(care $0)));;
esac

#Setați variabile pentru funcțiile de potrivire.
DOW=$(data +%a)
HM=$(data +%H:%M)
daymdy=$(data +%m-%d-%Y)
#Dacă ziua de azi este mai nouă decât ziua liberă, eliminați ultima zi liberă.
dacă [[ "${daymdy}" > "$(head -1 $PWD/daysoff.txt)" ]]; atunci
    sed -i '1d' $PWD/daysoff.txt
fi

#Declare matrice.
declare -a daysofweek=('Luni' 'Marti' 'Miercuri' 'Joi' 'Vineri')
declare -a timesofday=('08:00' '12:00' '12:30' '16:30')
declare -a inout=('in' 'out la prânz' 'in from lunch' 'out for the day')
declara -a daysoff=($(cat $PWD/daysoff.txt))

#Intra sau iesi.
pentru i în „${!timesofday[@]}”; do
    dacă [[ "${timesofday[$i]}" == "${HM}" ]]; atunci
        inorout="${inout[$i]}";
    fi;
Terminat

#Run funcții și returnează 0 sau 1.
dayoffcheck
doff=$?
dowcheck
dow=$?
verificarea timpului
timp=$?

#Terminați și trimiteți informații sau lansați Firefox dacă este necesar.
dacă [[ $doff != "1" ]]; atunci
        echo "Astăzi este o zi liberă! De ce încerci să înregistrezi?"
        iesirea 1
elif [[ $dow != "0" ]]; atunci
        echo "Este weekend! De ce încerci să înregistrezi?"
        iesirea 1
elif [[ $time != "0" ]]; atunci
        echo "Este $DOW la $HM. Nu este timpul să înregistrați sau să ieșiți."
        iesirea 1
altfel
        echo "Este ${HM}. Este timpul să cronoști ${inorout}." | mail -s „Ceas” [email protected]
        echo "Este ${HM}. Este timpul să cronoști ${inorout}." | mail -s „Ceas” [email protected] 
        xdotool mousemove --sync 677 1011
        $apppath/firefox --new-tab https://workforcenow.adp.com/workforcenow/login.html &
        $PWD/clock_in_out.bsh
        aștepta
fi

Dacă cineva are vreo idee că aș putea face Firefox să funcționeze cu D-Bus așa cum a fost cu X11 înainte de versiunea 94, aș aprecia foarte mult!

Terrance avatar
drapel id
P.S. Va funcționa bine cu Waterfox, dar există o problemă de reîmprospătare a paginii cu Waterfox care mă enervează. :)
raj avatar
drapel cn
raj
Probabil că trebuie să treceți valoarea corectă a variabilei de mediu `DBUS_SESSION_BUS_ADDRESS` din sesiunea dvs. desktop către scriptul crontab. O fac pentru scriptul meu crontab care folosește `notify-send` pentru a afișa notificări pe ecran (acestea folosesc și D-Bus). Am un script în programele mele de pornire a sesiunii GNOME care scrie valoarea acestei variabile într-un fișier temporar la conectare, iar scriptul crontab citește din acest fișier.
Terrance avatar
drapel id
@raj Da, asta a fost! Am făcut `printenv` și am luat linia `DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus` și am exportat-o ​​chiar înainte de comanda `firefox` din script și acum funcționează grozav! Vrei să scrii asta ca răspuns? Multumesc din nou!
Puncte:6
drapel cn
raj

Scriptul tău crontab trebuie să aibă variabila de mediu DBUS_SESSION_BUS_ADDRESS setat corect, de ex. la aceeași valoare care este utilizată în sesiunea desktop. Eu însumi folosesc această metodă pentru un script crontab care folosește notifica-trimite pentru a afișa notificări pe ecran. Această valoare este de obicei statică pentru fiecare utilizator, adică. nu se schimbă între sesiuni, depinde doar de ID-ul utilizatorului, așa că îl puteți copia simplu din sesiunea desktop în script. Sau pentru a fi întotdeauna sigur că utilizați valoarea corectă, puteți pune un script în programele de pornire a sesiunii, care scrie această valoare într-un fișier temporar, iar scriptul crontab o citește din acest fișier.

Rob avatar
drapel vn
Rob
Funcționează și la mine. Am schimbat această comandă crontab: `32 11 13-20 12 * export DISPLAY=:0 && firefox --new-window "/home/rob/Documents/crontab/Happy-Birthday-Paulette.htm" > /dev/null 2 >&1`. Am rulat `printenv` în terminal și am primit asta de la sfârșitul ieșirii: `DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus` L-am adăugat la comanda crontab: `32 11 13-20 12 * export DISPLAY=:0 && DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus firefox --new-window "/home/rob/Documents/crontab/Paulette's-Birthday.htm" > /dev/null 2>&1 ` și funcționează.

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.