Запуск приложения 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-cgtop
  • Как заблокировать экран при закрытии крышки с помощью systemd?
  • После перехода на Devuan, как удалить systemd?
  • Firewalld занимает много времени
  • Как написать вывод на экран из службы systemd во время загрузки?
  • Есть ли причина уйти от fstab в системе systemd?
  • как запустить службу systemd до начала работы сети?
  • В systemd, что запускает единицы, сгенерированные генератором?
  • Служба syslog-ng не начинается с systemd, но команда отлично работает
  • Почему sudo -i не устанавливает XDG_RUNTIME_DIR для целевого пользователя?
  • Interesting Posts

    Как вызвать универсальную функцию без импорта ее файла?

    Доккер прав для моего использования?

    eth0 r8169 вниз после пробуждения из режима ожидания

    Извлечь тройной обратный код, огороженный кодовым блоком “ `выдержки из файла уценки

    Проблемы с беспроводной связью в Fedora 25

    Как установить сообщество Metasploit на удаленном безголовом окне Debian?

    Невозможно найти отсутствующие разделы root / sda

    Networkmanager заполняет resolv.conf неправильной информацией, которая приводит к неудачным DNS-запросам

    rsync copy copy: dotfiles

    Как разбить подкаталоги каталога на n частей?

    Два компилятора одной и той же версии ядра: одна загружается, одна не может найти корневое устройство

    Каков самый простой способ создания предварительно созданного «образа» хоста Debian / Rasbian?

    zsh kill Ctrl + Backspace, Ctrl + Delete

    Получить общий размер jpeg-изображений для каждого каталога в каждом каталоге, содержащем jpegs

    Где zypper устанавливает ключи для подписи хранилища или пакета?

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