At

為什麼 at 不執行 GUI 應用程序?

  • June 5, 2020

在我的 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)。

引用自:https://unix.stackexchange.com/questions/590533