Запуск приложения 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 ?

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" } 
  • Почему моя включенная система systemd не запускается при загрузке?
  • как запустить пользовательский скрипт после пробуждения systemd?
  • Неужели systemd делает dig / nslookup бесполезным?
  • Получение услуги запускается автоматически, когда другой запускается
  • Как отлаживать systemd «init» во время загрузки?
  • systemd: переместить getty в tty2 + и запустить скрипт на tty1
  • Как сообщить systemd, что процесс java вышел, но перезапустил его с помощью нового pid?
  • Как заблокировать экран при закрытии крышки с помощью systemd?
  • Могу ли я задержать запуск скрипта systemd при загрузке?
  • systemd: spawn gettys ASAP
  • Как применить параметр «.link»?
  • Interesting Posts

    Почему моя переменная локальна в цикле «while read», но не в другом, казалось бы, подобном цикле?

    См. Только изменения при запуске rsync

    Невозможно загрузить модуль ядра zfs в Fedora с помощью Secure Boot – «Необходимый ключ недоступен»

    Использование выражения регулярного выражения внутри if в bash

    Как переключить почтовые ящики в mutt?

    Как я могу имитировать функциональные возможности gnome gsettings в KDE Plasma с помощью командной строки?

    Кэширование записывает изменения на SSD, чтобы избежать разгона HDD? ZFS, но (возможно) не L2ARC

    Интерфейс Linux RX Packet Выпало из LACP и не выполняет loadbalacing

    Эффективный способ запуска нескольких сценариев оболочки из одного сценария оболочки

    Создавать журнал истории для рабочего каталога в bash

    SSH с использованием учетных данных OpenLDAP (LDAP)

    Пакетное переименование файлов, создание подпапок и перемещение файлов по шаблону

    Любой лучший метод, чем это для сортировки файлов по дате создания?

    Как определить, какой скрипт выполняется bash?

    Права доступа к каталогу, когда вы являетесь частью группы владельцев

    Linux и Unix - лучшая ОС в мире.