Điểm:2

Firefox 94 khi được chạy từ crontab tuyên bố "đang chạy nhưng không phản hồi."

lá cờ id

Tôi hiểu rằng có hoặc có thể có những câu hỏi tương tự ở đây, nhưng câu hỏi này không liên quan đến nhà tù lửa Firefox cũng không có bất kỳ sự chậm trễ nào khi bắt đầu.

Thông tin hệ điều hành:

Xubfox 20.04
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
NAME="Ubuntu"
VERSION="20.04.3 LTS (Fossa Fossa)"
VERSION_ID="20.04"
$ uname -a
Linux terrance-ubuntu 5.11.0-40-generic #44~20.04.2-Ubuntu SMP Thứ ba ngày 26 tháng 10 18:07:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

nhập mô tả hình ảnh ở đây

Tôi chạy một kịch bản từ một crontab điều đó sẽ khởi chạy trang đăng nhập ADP của tôi và bấm giờ cho tôi vào và ra vào những thời điểm cụ thể trong ngày. Điều này từng hoạt động hoàn hảo cho đến khi Firefox 94 được phát hành. Bây giờ, tôi hiểu rằng đối với điều khiển từ xa, Mozilla đã quyết định không sử dụng X11 nữa mà thay vào đó là D-Bus. Đối với cuộc sống của tôi, tôi không thể hiểu ý nghĩa của việc sử dụng D-Bus thay vì X11, ngoài việc họ cho rằng nó đơn giản hơn để sử dụng. Tôi cho rằng điều này có thể là do Wayland mà tôi không sử dụng.

Nếu tôi chạy tập lệnh sau từ thiết bị đầu cuối dòng lệnh vào những thời điểm cụ thể thì nó hoạt động hoàn hảo, nhưng nếu tôi chạy tập lệnh từ crontab Tôi nhận được thông báo sau:

nhập mô tả hình ảnh ở đây

Kịch bản (vẫn là một công việc đang được tiến hành):

#!/bin/bash

#Chức năng này kiểm tra đường dẫn của ứng dụng trên máy Mac.
đường dẫn thực1() {
        [[ $1 = /* ]] && echo "$1" || tiếng vang "$PWD/${1#./}"
}

# Hàm này khớp với ngày trong tuần và trả về 0 nếu khớp, 1 nếu cuối tuần.
hàm dowcheck(){
trường hợp " ${daysofweek[@]} " trong
    *\ ${DOW}\ *)
        trả về 0;;
    *)
        trả lại 1;;
esac
}

# Hàm này khớp nếu thời gian vào hoặc ra của đồng hồ khớp với 0 hoặc 1 nếu không.
chức năng kiểm tra thời gian(){
trường hợp " ${timesofday[@]} " trong
    *\ ${HM}\ *)
        trả về 0;;
    *)
        trả lại 1;;
esac
}

#Chức năng này so khớp ngày nghỉ với ngày hôm nay. Nếu kết quả khớp trả về 0 nghĩa là ngày nghỉ, 1 nghĩa là không phải ngày nghỉ.
hàm daysoffcheck(){
trường hợp " ${daysoff[@]} " trong
    *\ ${daymdy}\ *)
        trả về 0;;
    *)
        trả lại 1;;
esac
}

#Kiểm tra loại hệ điều hành.
OS_TYPE=$(uname -a | awk '{print $1}')
nếu [[ ${OS_TYPE} == "Linux" ]]; sau đó
        OS=$(grep -i ^name= /etc/*release | awk -F= '{print $2}' | sed 's/\"//g')
khác
        OS=$(system_profiler SPSoftwareDataType | awk '/Phiên bản hệ thống:/ {print $3}')
fi
nếu [ "${OS}" = "CentOS Linux" ]; sau đó
        Hệ điều hành = Fedora
fi

# Đặt thư mục làm việc và đặt Hiển thị để chạy trong CRONJOB.
trường hợp $OS trong
        macOS) apppath=/Applications/Firefox.app/Contents/MacOS
        export DISPLAY="/private/tmp/com.apple.launchd.*/org.macosforge.xquartz:0"
                PWD=$(tên thư mục $(đường dẫn thực1 $(mà $0)));;
        *) apppath=/usr/bin
        DM=$(/usr/bin/basename $(/bin/cat /etc/X11/default-display-manager))
        trường hợp $DM trong
            lightdm)
                xuất HIỂN THỊ=:0;;
            gdm3)
                grep -E "# AutomaticLogin|AutomaticLoginEnable = false" /etc/$DM/*.conf >/dev/null && export DISPLAY=:1 || xuất HIỂN THỊ=:0;;
            *);;
        esac
                PWD=$(tên thư mục $(đường dẫn thực $(mà $0)));;
esac

#Đặt biến cho hàm khớp.
DOW=$(ngày +%a)
HM=$(ngày +%H:%M)
daymdy=$(ngày +%m-%d-%Y)
#Nếu hôm nay mới hơn ngày nghỉ, hãy xóa ngày nghỉ cuối cùng.
if [[ "${daymdy}" > "$(head -1 $PWD/daysoff.txt)" ]]; sau đó
    sed -i '1d' $PWD/daysoff.txt
fi

#Khai báo mảng.
khai báo -a daysofweek=('Mon' 'Tue' 'Wed' 'Thu' 'Fri')
khai báo -a timesofday=('08:00' '12:00' '12:30' '16:30')
khai báo -a inout=('vào' 'ra ngoài ăn trưa' 'vào từ bữa trưa' 'ra ngoài trong ngày')
khai báo -a daysoff=($(cat $PWD/daysoff.txt))

# Vào hoặc ra.
cho tôi trong "${!timesofday[@]}"; làm
    nếu [[ "${timesofday[$i]}" == "${HM}" ]]; sau đó
        inorout="${inout[$i]}";
    có;
xong

#Run các hàm và trả về 0 hoặc 1.
ngày nghỉ kiểm tra
doff=$?
kiểm tra lại
dow=$?
xem thời gian
thời gian = $?

#Hoàn tất và gửi thông tin hoặc khởi chạy Firefox nếu cần.
nếu [[ $doff != "1" ]]; sau đó
        echo "Hôm nay là ngày nghỉ! Tại sao bạn lại cố bấm giờ?"
        thoát 1
elif [[ $dow != "0" ]]; sau đó
        echo "Hôm nay là cuối tuần! Tại sao bạn lại cố bấm giờ?"
        thoát 1
elif [[ $time != "0" ]]; sau đó
        echo "Đó là $DOW ở mức $HM. Chưa đến lúc bấm giờ vào hoặc ra."
        thoát 1
khác
        echo "Đó là ${HM}. Đã hết giờ ${inorout}." | thư -s "Đồng hồ thời gian" [email protected]
        echo "Đó là ${HM}. Đã hết giờ ${inorout}." | mail -s "Đồng hồ thời gian" [email protected] 
        xdotool mousemove --sync 677 1011
        $apppath/firefox --new-tab https://workforcenow.adp.com/workforcenow/login.html &
        $PWD/clock_in_out.bsh
        đợi đã
fi

Nếu bất cứ ai có bất kỳ ý tưởng nào mà tôi có thể làm cho Firefox hoạt động với D-Bus giống như với X11 trước phiên bản 94, tôi sẽ đánh giá rất cao điều đó!

Terrance avatar
lá cờ id
Tái bút Nó sẽ hoạt động tốt với Waterfox, nhưng có một vấn đề về trang làm mới với Waterfox khiến tôi khó chịu. :)
raj avatar
lá cờ cn
raj
Bạn có thể phải chuyển giá trị chính xác của biến môi trường `DBUS_SESSION_BUS_ADDRESS` từ phiên máy tính để bàn sang tập lệnh crontab của bạn. Tôi làm điều đó cho tập lệnh crontab sử dụng `notify-send` để hiển thị thông báo trên màn hình (những thông báo này cũng sử dụng D-Bus). Tôi có một tập lệnh trong các chương trình khởi động phiên Gnome ghi giá trị của biến này vào một tệp tạm thời khi đăng nhập và tập lệnh crontab đọc từ tệp này.
Terrance avatar
lá cờ id
@raj Đúng, chính là nó! Tôi đã thực hiện `printenv` và lấy dòng `DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus` và xuất nó ngay trước lệnh `firefox` trong tập lệnh và bây giờ nó hoạt động rất tốt! Bạn muốn viết nó lên như một câu trả lời? Cảm ơn một lần nữa!
Điểm:6
lá cờ cn
raj

Tập lệnh crontab của bạn cần có biến môi trường DBUS_SESSION_BUS_ADDRESS thiết lập chính xác, tức là. với cùng một giá trị được sử dụng trong phiên máy tính để bàn của bạn. Bản thân tôi sử dụng phương pháp này cho tập lệnh crontab sử dụng gửi thông báo để hiển thị thông báo trên màn hình. Giá trị này thường là tĩnh cho mỗi người dùng, tức là. nó không thay đổi giữa các phiên, chỉ phụ thuộc vào ID người dùng, vì vậy bạn có thể đơn giản sao chép nó từ phiên máy tính để bàn vào tập lệnh của mình. Hoặc để luôn chắc chắn rằng bạn sử dụng đúng giá trị, bạn có thể đặt một tập lệnh vào các chương trình khởi động phiên của mình, tập lệnh này sẽ ghi giá trị này vào một tệp tạm thời và tập lệnh crontab của bạn sẽ đọc nó từ tệp này.

Rob avatar
lá cờ vn
Rob
Làm việc cho tôi quá. Tôi đã thay đổi lệnh crontab này: `32 11 13-20 12 * export DISPLAY=:0 && firefox --new-window "/home/rob/Documents/crontab/Happy-Birthday-Paulette.htm" > /dev/null 2 >&1`. Tôi đã chạy `printenv` trong thiết bị đầu cuối và nhận được điều này từ cuối đầu ra: `DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus` Tôi đã thêm nó vào lệnh crontab: `32 11 13-20 12 * xuất 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 ` và nó hoạt động.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.