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

  • Каким интерфейсом привязывается nspawn по умолчанию?
  • Что делает «systemctl daemon-reload»?
  • Как исправить атрибут устройства последних строк журнала systemd перед выходом?
  • Как запустить команду внутри запущенного контейнера systemd
  • Горе отказано в установке точки GlusterFS при загрузке
  • Показать ip на boot - centos 7
  • Как параметр systemd Type влияет на запуск других устройств?
  • Как обновить мою систему до последней версии?
  • 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" } 
    Interesting Posts

    Как я узнаю, что мой микрофон отключен или включен, когда у меня есть более одного микрофона?

    огромный файл .sujournal на FreeBSD

    Apache2 vHost Проблема: субдомен работает неправильно

    Kali Linux не загружается с USB-устройства

    tar выходит на «Can not stat: Нет такого файла каталога», почему?

    возможность запуска демонов под привилегированными пользователями во время загрузки

    Как сказать, когда компьютер простаивает?

    Редактировать значения в txt-файле с помощью команды sed / awk / grep

    Файлы файлов в Linux

    Конфигурация диска clone dmsetup – а не данные?

    Как использовать переменную вместо файла для вывода этой команды wc

    Как удалить значения $ VAR2 из $ VAR1 и вывести оставшиеся значения в $ VAR3?

    Предупреждение Chkrootkit о зараженном порту 600

    Fedora 15 не запускает браузер автоматически при запуске сервера?

    сколько места зарезервировать на файловой системе ext3 для предотвращения проблем с фрагментацией?

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