Запуск приложения X из сценария оболочки через системный таймер

Я пытаюсь создать таймер systemd (user), который открывает определенные вкладки каждый день в 9 вечера с помощью xdg-open . Вот файлы:

/home/me/.config/systemd/user/test.service

 [Unit] Description=Test [Service] Type=simple Environment=DISPLAY=:0 ExecStart=/bin/bash /home/me/test.sh 

/home/me/.config/systemd/user/test.timer

 [Unit] Description=Test Timer RefuseManualStart=no RefuseManualStop=no [Timer] Persistent=true OnCalendar=*-*-* 21:00:00 [Install] WantedBy=timers.target 

/home/me/test.sh

 #!/bin/bash websites=( "http://unix.stackexchange.com/" "http://stackoverflow.com/" ) for i in "${websites[@]}" do # works with /usr/bin/firefox /usr/bin/xdg-open "$i" done 

Это ничего не открывает.

Когда я заменяю xdg-open файлом firefox в указанном выше файле, вкладки становятся открытыми. Однако, когда я xdg-open "http://unix.stackexchange.com/" в терминале, он открывает вкладку в Firefox.


 systemctl --user start test.service systemctl --user status test.service 

печатает:

 ● test.service - Test Loaded: loaded (/home/me/.config/systemd/user/test.service; static; vendor preset: enabled) Active: inactive (dead) Jun 29 15:06:59 me-PC systemd[1513]: Started Test. 

Как я могу заставить этот таймер работать с xdg-open ?

  • При сохранении INTO OUTFILE из mysql в системе на основе systemd выходной файл захватывается systemd - почему?
  • systemd, используя 100% моего процессора, если нет, если я запустил его без systemd
  • clamd случайно останавливается
  • Как автоматически выполнить «netctl start tq84-wifi» при загрузке?
  • Проблемы создания и включения пользовательских системных служб для ddclient
  • Ошибка получения полномочий: Ошибка инициализации полномочий: Не удалось подключиться: ресурс временно недоступен (g-io-error-quark, 27)
  • Почему мой системный блок не запускается при перезагрузке сервера?
  • Группирование системных служб
  • One Solution collect form web for “Запуск приложения X из сценария оболочки через системный таймер”

    Часто различия между запуском сценария вручную и запуском его через systemd обусловлены различиями в среде. Перед вызовом xdg-open добавьте команду env в свою собственную строку, которая сбрасывает среду.

    Теперь запустите тест вручную и через systemd . Ищите другие переменные, кроме DISPLAY которые могут вызывать разницу. Продолжая добавлять переменные среды в сценарий systemd , вы должны быть в состоянии найти те, которые systemd должны выполнить.

    Ваш код bash в вашем тесте выглядит нормально, но вот пересмотр, который немного более идиоматичен, если вы заинтересованы. bash естественно разбивается на пространство, а URL-адреса не содержат пробела, поэтому этот альтернативный код работает. Я также заменил do/done на фигурные скобки:

     websites=" http://unix.stackexchange.com/ http://stackoverflow.com/" for i in $websites; { # works with /usr/bin/firefox /usr/bin/xdg-open "$i" } 
    Linux и Unix - лучшая ОС в мире.