Làm thế nào để gọi zquil từ cron script?


8

Kịch bản ví dụ error.sh:

#! /bin/bash

zenity --error --text='Something very bad has happened!'  

My incron-config:

~/Documents IN_MOVED_TO ~/scripts/error.sh

Nếu tôi chạy error.shtrong hộp thoại GUI đầu cuối bật, nhưng không phải trong kịch bản incron ở trên.

Làm cách nào tôi có thể tạo sự thoải mái để bật hộp thoại đó khi tôi di chuyển tệp trong thư mục Tài liệu?

Câu trả lời:


19

Tìm thấy câu trả lời ở đây . Thêm vào ~/.bashrc:

xhost local:$USER > /dev/null

và sau đó sử dụng sự thoải mái trong kịch bản được gợi lên bởi cron như thế này:

zenity --error --text='Something very bad has happened!' --display=:0.0

thêm --display=:0.0là những gì quan trọng


--display =: 0,0 rất quan trọng. Nhưng bây giờ tôi có cùng một vấn đề cho dịch vụ. Nó không hiển thị bất cứ điều gì nếu tôi đặt kịch bản như một dịch vụ!
Dr.jacky

4

Để chạy lệnh GUI trên cron, bạn sẽ phải cho cron biết chương trình nào sẽ sử dụng. Cho rằng bạn sử dụng: xuất HIỂN THỊ =: 0

Để có thông báo tiện lợi sau mỗi 30 phút, hãy chỉnh sửa crontab -evà đặt một công việc như:

*/30 *  * * *  export DISPLAY=:0 && /somedirectory/your_zenity_script.sh

Chi tiết cách làm: link


2

Có một giải pháp khả thi khác nếu bạn muốn nó hoạt động bất kể tên người dùng, bằng cách tìm người dùng hoạt động của màn hình X, sử dụng ConsoleKit (lệnh ck-list-sessions). Giả sử tập lệnh bên dưới được chạy dưới quyền root, nó sẽ hiển thị thông báo tiện ích cho người dùng đang hoạt động hiện tại trên máy tính của bạn:

#!/bin/bash
ACTIVE=$(ck-list-sessions | awk -F' = ' '
    function f(){if(A=="TRUE"){P=U"\t"D;gsub("'"'"'","",P);print P}}
    $1=="\tunix-user"{U=$2} 
    $1=="\tx11-display"{D=$2} 
    $1=="\tactive"{A=$2} 
    END{f()} /^[^\t]/{f()}
')
USERID=${ACTIVE%    *} # tab
USERNAME=$(getent passwd $USERID|cut -f1 -d':')
DISPLAY=${ACTIVE#*  } # tab

DISPLAY="$DISPLAY" su $USERNAME -c "zenity --error --text='Something very bad has happened!'"

Tập lệnh awk nhỏ chỉ để phân tích các phiên ck-list và xuất tên người dùng và hiển thị của người dùng đang hoạt động (cũng có thể yêu cầu đó là kết nối cục bộ nếu bạn muốn loại trừ người dùng ssh -X, nếu bạn muốn).

(Tôi sử dụng điều này trong một tập lệnh sao lưu chạy bằng cách cắm vào ổ USB.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.