test.sh: /usr/bin/notify-send "test"
The following works: bash ~/Documents/test.sh
BUT the crontab never shows the notification. Why?
*/1 * * * * bash ~/Documents/test.sh
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It only takes a minute to sign up.
Sign up to join this communityTo execute any GUI related app from Cron you should export few desktop environment variables. The below solution is based on this answer where are provided more details.
crontab
in Ubuntu 16.04, 17.10, 18.04 and other Ubuntu distributions with GnomeCreate a startup script that will export the desktop environment variables and will launch your application. Let's call it gui-launcher
. Its content should be (referencs: [1], [2] and [3]):
#!/bin/bash -e
# NAME: gui-launcher
# Check whether the user is logged-in
while [ -z "$(pgrep gnome-session -n -U $UID)" ]; do sleep 3; done
# Export the current desktop session environment variables
# Sometimes it try to change $UID so we must remove -e option or use 2>/dev/null
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ") 2>/dev/null
# Execute the input command
nohup "$@" >/dev/null 2>&1 &
exit 0
gnome-session
in this part $(pgrep gnome-session -n -U $UID)
with the name of the process of the DE in use, for example mate-session
. A list of the most Ubuntu DE is presented here. Lubuntu implementation of the same script - here. The script could be used to launch GUI app from TTY or SSH session in the current user's Desktop session.chmod +x gui-launcher
.Then use it within crontab
in this way:
*/1 * * * * /full/path/to/gui-launcher "/full/path/to/the-target-application"
Here is how it works on Ubuntu 17.10 on Wayland:
Here is presented an implementation of the same script over SSH: How to run script (.sh) files in a new terminal after connecting to Ubuntu 16.04 server via ssh?
Here are presented more explanations: Cron job to run python script at reboot does not work.
And one more example: Adjust brightness with xrandr and cron job
Environment for cron and your regular user can be different.
When you're using any scripts in cron better to put full path to them.
$DISPLAY
could be enough, but it will fail with the@reboot
jobs. Recently I've found this complete solution: askubuntu.com/a/970795/566421notify-send
work from the console or over ssh.Ubuntu 16.04 LTS