透過 crontab 啟動 X11 應用程式 (Firefox)

透過 crontab 啟動 X11 應用程式 (Firefox)

我想寫一個每分鐘打開Firefox的crontab(只是為了測試它,我知道它沒有任何意義)。我的問題是,即使 crontab 處於活動狀態,也沒有任何反應。這是我的 crontab 的樣子:

SHELL=/bin/bash
PATH=~/bin:/usr/bin:bin
* * * * * export DISPLAY=:0.0 xhost localuser /usr/bin/firefox

知道為什麼它不起作用嗎?

答案1

export DISPLAY=:0.0 xhost localuser /usr/bin/firefox

只要看看上面的 cron 指令,我就明白為什麼它不起作用了。該命令的用法export

export name[=word]...

在 POSIX shell 中,後面的其餘單字export DISPLAY=:0.0將被視為應導出到環境的其他 shell 變量,而不是要執行的命令。 POSIX(2018 年版第 7 期)也規定姓名應該

僅由可移植字元集中的底線、數字和字母組成的單字。

這意味著 shell 變數名稱不能包含諸如 之類的字符,/因此嘗試將其包含/usr/bin/firefox在要導出的變數名稱列表中將引發錯誤,並顯示諸如not a valid identifier或 之類的消息bad variable name


另外,該xhost指令的使用不正確。自行運行xhost以查看是否需要將您的使用者帳戶新增為允許的使用者。這應該只需要運行一次,並且不應該由 cron 安排。


除非有其他機制阻止程式連接到 X 顯示伺服器,否則上面的行可以簡單地替換為:

DISPLAY=:0.0
* * * * * /usr/bin/firefox

這應該每分鐘啟動一個新的 Firefox 視窗。也無需指定SHELL環境變數 - 並且由於您指定了可執行檔的完整路徑firefox,因此也無需設定該PATH變數。


也可以看看:POSIX 規範export

相關內容