Рейтинг:2

Firefox 94 при запуске из crontab утверждает, что «уже работает, но не отвечает».

флаг id

Я понимаю, что здесь есть или могут быть похожие вопросы, но этот не относится к пожарная тюрьма при этом у Firefox нет задержек при запуске.

Информация об ОС:

Субунту 20.04
DISTRIB_DESCRIPTION="Убунту 20.04.3 ЛТС"
ИМЯ="Убунту"
ВЕРСИЯ = "20.04.3 LTS (Фокусная ямка)"
VERSION_ID="20.04"
$ uname -a
Linux terrance-ubuntu 5.11.0-40-generic #44~20.04.2-Ubuntu SMP Вт, 26 октября, 18:07:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

введите описание изображения здесь

Я запускаю скрипт из кронтаб это запустит мою страницу входа в систему ADP и будет включать и выключать меня в определенное время дня. Раньше это работало безупречно, пока не был выпущен Firefox 94. Теперь я понимаю, что для удаленного доступа Mozilla решила больше не использовать X11, а вместо этого использовать D-Bus. На всю жизнь я не могу понять, что подразумевается под использованием D-Bus вместо X11, кроме того, что они утверждают, что его проще использовать. Я предполагаю, что это может быть связано с Wayland, который я не использую.

Если я запускаю следующий скрипт из терминала командной строки в определенное время, он работает отлично, но если я запускаю скрипт из кронтаб Я получаю следующее сообщение:

введите описание изображения здесь

Сценарий (работа еще не завершена):

#!/бин/баш

#Эта функция проверяет путь к приложению на Mac.
реальный путь1 () {
        [[ $1 = /* ]] && эхо "$1" || эхо "$PWD/${1#./}"
}

#Эта функция соответствует дню недели и возвращает 0, если совпадает, 1, если выходные.
функция проверки(){
case " ${daysofweek[@]} " в
    *\ ${ДОУ}\ *)
        вернуть 0;;
    *)
        вернуть 1;;
эсак
}

#Эта функция соответствует, если время прихода и ухода часов совпадает с 0 или 1, если нет.
функция проверки времени () {
case " ${timesofday[@]} " в
    *\ ${НМ}\ *)
        вернуть 0;;
    *)
        вернуть 1;;
эсак
}

#Эта функция сопоставляет выходные с сегодняшним днем. Если совпадение возвращает 0, что означает выходной, 1 означает, что выходной нет.
функция выходныхпроверка(){
случай "${daysoff[@]}" в
    *\ ${daymdy}\ *)
        вернуть 0;;
    *)
        вернуть 1;;
эсак
}

#Проверьте тип ОС.
OS_TYPE=$(uname -a | awk '{print $1}')
если [[ ${OS_TYPE} == "Linux" ]]; тогда
        OS=$(grep -i ^name= /etc/*release | awk -F= '{print $2}' | sed 's/\"//g')
еще
        OS=$(system_profiler SPSoftwareDataType | awk '/Версия системы:/ {print $3}')
фи
если [ "${OS}" = "CentOS Linux" ]; тогда
        ОС=Федора
фи

# Установите рабочие каталоги и установите Display для запуска в CRONJOB.
случай $OS в
        macOS) apppath=/Applications/Firefox.app/Contents/MacOS
        экспорт DISPLAY="/private/tmp/com.apple.launchd.*/org.macosforge.xquartz:0"
                PWD=$(dirname $(realpath1 $(который $0)));;
        *) apppath=/usr/bin
        DM=$(/usr/bin/базовое имя $(/bin/cat /etc/X11/default-display-manager))
        случай $DM в
            светдм)
                экспорт ДИСПЛЕЙ=:0;;
            гдм3)
                grep -E "# AutomaticLogin|AutomaticLoginEnable = false" /etc/$DM/*.conf >/dev/null && export DISPLAY=:1 || экспорт ДИСПЛЕЙ=:0;;
            *);;
        эсак
                PWD=$(dirname $(realpath $(который $0)));;
эсак

#Установите переменные для сопоставления функций.
DOW=$(дата +%a)
HM=$(дата +%H:%M)
daymdy=$(дата +%m-%d-%Y)
#Если сегодня новее выходного дня, удалите последний выходной день.
if [[ "${daymdy}" > "$(head -1 $PWD/daysoff.txt)" ]]; тогда
    sed -i '1d' $PWD/daysoff.txt
фи

#Объявить массивы.
объявлять -a daysofweek=('Пн' 'Вт' 'Ср' 'Чт' 'Пт')
объявлять -a timesofday=('08:00' '12:00' '12:30' '16:30')
объявлять -a inout=('пришел' 'ушел на обед' 'пришел с обеда' 'ушел на день')
объявить -a daysoff=($(cat $PWD/daysoff.txt))

#Входи или выходи.
для i в "${!timesofday[@]}"; делать
    если [[ "${timesofday[$i]}" == "${HM}" ]]; тогда
        inorout="${inout[$i]}";
    фи;
сделано

# Запускать функции и возвращать 0 или 1.
выходнойпроверка
офф=$?
даунчек
Доу=$?
проверка времени
время=$?

#Завершите и отправьте информацию или запустите Firefox, если это необходимо.
если [[ $doff != "1" ]]; тогда
        echo "Сегодня выходной! Почему ты пытаешься прийти на работу?"
        выход 1
Элиф [[ $доу != "0" ]]; тогда
        echo "Это выходные! Почему вы пытаетесь успеть?"
        выход 1
Элиф [[ $time != "0" ]]; тогда
        echo "Сейчас $DOW в $HM. Сейчас не время начинать или заканчивать часы."
        выход 1
еще
        echo "Сейчас ${HM}. Пора ставить часы ${inorout}." | mail -s "Часы" [email protected]
        echo "Сейчас ${HM}. Пора ставить часы ${inorout}." | mail -s "Часы" [email protected] 
        xdotool mousemove --sync 677 1011
        $apppath/firefox --new-tab https://workforcenow.adp.com/workforcenow/login.html &
        $PWD/часы_in_out.bsh
        ждать
фи

Если у кого-нибудь есть идеи, как заставить Firefox работать с D-Bus, как это было с X11 до версии 94, я был бы очень признателен!

Terrance avatar
флаг id
P.S. Это будет нормально работать с Waterfox, но есть проблема с обновлением страницы с Waterfox, которая меня раздражает. :)
raj avatar
флаг cn
raj
Вероятно, вам нужно передать правильное значение переменной среды DBUS_SESSION_BUS_ADDRESS из сеанса рабочего стола в сценарий crontab. Я делаю это для своего сценария crontab, который использует `notify-send` для отображения уведомлений на экране (они также используют D-Bus). У меня есть скрипт в моих программах запуска сеанса GNOME, который записывает значение этой переменной во временный файл при входе в систему, и скрипт crontab читает из этого файла.
Terrance avatar
флаг id
@raj Да, это было так! Я сделал `printenv`, взял строку `DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus` и экспортировал ее прямо перед командой `firefox` в сценарии, и теперь она отлично работает! Хочешь написать это как ответ? Еще раз спасибо!
Рейтинг:6
флаг cn
raj

Ваш скрипт crontab должен иметь переменную окружения DBUS_SESSION_BUS_АДРЕС правильно настроен, т. к тому же значению, которое используется в сеансе рабочего стола. Сам я использую этот метод для сценария crontab, который использует уведомление-отправить для отображения уведомлений на экране. Это значение обычно является статическим для каждого пользователя, т.е. он не меняется между сеансами, зависит только от идентификатора пользователя, поэтому вы можете просто скопировать его из сеанса рабочего стола в свой скрипт. Или, чтобы всегда быть уверенным, что вы используете правильное значение, вы можете поместить скрипт в свои программы запуска сеанса, который записывает это значение во временный файл, и ваш скрипт crontab читает его из этого файла.

Rob avatar
флаг vn
Rob
У меня тоже работает. Я изменил эту команду crontab: `32 11 13-20 12 * export DISPLAY=:0 && firefox --new-window "/home/rob/Documents/crontab/Happy-Birthday-Paulette.htm" > /dev/null 2 >&1`. Я запустил `printenv` в терминале и получил это в конце вывода: `DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus` Я добавил его в команду 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 ` и это работает.

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

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