Я новый пользователь swaywm и довольно новичок в создании собственных службы systemd. Раньше я использовал Openbox, feh и systemd для создания сценария смены обоев каждые 30 минут. Ниже приведен foo.service, который отлично работает в openbox:
[Unit]
Description=wallpaper rotate service
RefuseManualStart=no
RefuseManualStop=no
[Service]
Type=oneshot
User=trentonknight
ExecStart=/bin/sh -c 'DISPLAY=:0.0 feh --recursive --randomize --bg-fill /home/trentonknight/Pictures/Wallpaper/*'
Это таймер, который запускает его каждые 30 минут:
[Unit]
Description=wallpaper rotate timer
RefuseManualStart=no
RefuseManualStop=no
[Timer]
Persistent=false
OnCalendar=*:0/30
Unit=wrotate.service
[Install]
WantedBy=default.target
Swaywm использует Wayland композитор и просто фантастический. Однако feh работает только с X. Без feh я могу легко изменить обои с помощью этой простой команды, встроенной в swaywm:
swaymsg output DP-3 bg foo_background.png
DP-3 является результатом выполнения этой команды до:
swaymsg -t get_outputs
Используя приведенную выше команду вывода в сценарии bash, я могу автоматизировать случайный выбор изображений для обоев в каталоге. Это работает при запуске из командной строки без проблем:
#!/bin/bash
NEW=$(ls ~/Pictures/Wallpaper/ | shuf -n 1)
NEW_SWAY_BACK="~/Pictures/Wallpaper/"$NEW
swaymsg output DP-3 bg $NEW_SWAY_BACK fill
Однако, если я попытаюсь вызвать этот bash-скрипт из следующей пользовательской службы, это не удастся. Вот первый сервис:
[Unit]
Description=swaymsg output rotate wallpaper service
RefuseManualStart=no
RefuseManualStop=no
[Service]
WorkingDirectory=/usr/share/backgrounds/sway/
Type=forking
User=trentonknight
ExecStart=/usr/bin/bash sway_backgroud_changer.sh
KillMode=process
Это одна из многих версий, которые я пробовал, но все они имеют одинаковый статус после попытки запуска:
[trentonknight@archboX system]$ sudo systemctl status swaywallr.service
* swaywallr.service - swaymsg output rotate wallpaper service
Loaded: loaded (/etc/systemd/system/swaywallr.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sat 2018-05-12 18:37:17 EDT; 5s ago
Process: 30491 ExecStart=/usr/bin/bash sway_backgroud_changer.sh (code=exited, status=1/FAILURE)
May 12 18:37:17 archboX systemd[1]: Starting swaymsg output rotate wallpaper service...
May 12 18:37:17 archboX bash[30491]: sway socket not detected.
May 12 18:37:17 archboX bash[30491]: E: 05/12/18 18:37:17 - [ipc-client.c:37] Unable to connect to
May 12 18:37:17 archboX systemd[1]: swaywallr.service: Control process exited, code=exited status=1
May 12 18:37:17 archboX systemd[1]: swaywallr.service: Failed with result 'exit-code'.
May 12 18:37:17 archboX systemd[1]: Failed to start swaymsg output rotate wallpaper service.
[Install]
WantedBy=multi-user.target
Я вижу, что SWAYSOCK выглядит следующим образом:
[trentonknight@archboX system]$ echo $SWAYSOCK
/run/user/1000/sway-ipc.1000.527.sock
Я понятия не имею, как это правильно назвать. Или даже если в этом проблема? Кроме того, я запускаю следующее:
[trentonknight@archboX system]$ uname -a
Linux archboX 4.16.8-1-ARCH #1 SMP PREEMPT Wed May 9 11:25:02 UTC 2018 x86_64 GNU/Linux
Я также открыт для альтернативных подходов. Я вижу, что есть swaybg, но запуск дает следующую распечатку, а справочная страница вообще не включает swaybg:
[trentonknight@archboX sway]$ swaybg
05/12/18 18:43:26 - [main.c:63] Do not run this program manually. See man 5 sway and look for output options.
Я предполагаю, что он все еще находится в разработке.