At為什麼
為什麼 at
不執行 GUI 應用程序?
在我的 Ubuntu 20 桌面上,我計劃
gedit
從現在開始執行一分鐘,但沒有任何反應。這是為什麼?$ echo "echo foo > at.sux" | at now + 1 warning: commands will be executed using /bin/sh job 8 at Tue Jun 2 21:47:00 2020 $ echo `which gedit` | at now + 1 warning: commands will be executed using /bin/sh job 9 at Tue Jun 2 21:47:00 2020 $ atq 9 Tue Jun 2 21:47:00 2020 a dandv 8 Tue Jun 2 21:47:00 2020 a dandv # A minute later $ cat at.sux foo $ ps auxf | grep gedit # nothing but grep $ `which gedit` # launches gedit
echo "gedit &" | at now + 1
我按照評論中的建議進行了嘗試,但gedit
一分鐘後仍然沒有執行。
GUI 應用程序通過伺服器訪問螢幕。當您從命令行或菜單執行它們時,環境會告訴應用程序如何連接到伺服器。
但是,當您執行
at
命令時,環境不包含該資訊(您可以at -c JOBNUMBER
查看應用程序繼承的環境),這就是應用程序將啟動但無法執行的原因。要執行 GUI 應用程序,您可以指定伺服器,或者使用以下內容呼叫應用程序(您的顯示可能不同):
DISPLAY=:0 application
或者,取決於應用程序:
application --display :0
您可能需要更改伺服器權限,並且可能需要其他服務,但無法從會話外部訪問(例如 dbus)。