сокет systemd и sway не обнаружен - PullRequest
0 голосов
/ 13 мая 2018

Я новый пользователь swaywm и довольно новичок в создании своих собственных системных служб . Ранее я использовал 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.

Полагаю, он все еще находится в разработке.

1 Ответ

0 голосов
/ 14 мая 2018

Благодаря парням и девушкам из #sway на freenode, я смог решить эту проблему, просто используя:

systemctl --user

Я не осознавал, что служба уровня пользователя была отделена от системных служб. В конце концов, мой скрипт очень прост:

.config/systemd/user/

Я должен был добавить:

systemctl --user import-environment

временно на мой .bashrc, пока я не смогу проанализировать, что отсутствует в PATH. В любом случае, если вы столкнетесь с подобными обстоятельствами, проверьте:

https://wiki.archlinux.org/index.php/Systemd/User

Если кто-то заинтересован в автоматической смене обоев рабочего стола, то должно работать следующее. Создайте следующий каталог и файлы, назовите, как считаете нужным, со службами:

mkdir -p ~/.config/systemd/user
touch ~/.config/systemd/user/foo.service
touch ~/.config/systemd/user/foo.timer

foo.service

[Unit]
Description=swaymsg output rotate wallpaper service

[Service]
ExecStart=/usr/share/backgrounds/sway/sway_backgroud_changer.sh

[Install]
WantedBy=multi-user.target

foo.timer устанавливает время на то, что вы хотите. Ниже указано 59 минут.

[Unit]
Description=wallpaper rotate timer
RefuseManualStart=no
RefuseManualStop=no

[Timer]
Persistent=false
OnCalendar=*:0/59
Unit=foo.service

[Install]
WantedBy=default.target

Скрипт Bash для вращающихся обоев:

[trentonknight@archboX user]$ cat /usr/share/background/sway/sway_backgroud_changer.sh

#!/bin/bash
NEW=$(ls ~/Pictures/Wallpaper/ | shuf -n 1)
NEW_SWAY_BACK="~/Pictures/Wallpaper/"$NEW
swaymsg -s $SWAYSOCK output DP-3 bg $NEW_SWAY_BACK fill

Я не определил лучший способ обеспечить установку PATHS до запуска этой службы, по крайней мере, сегодня вечером, поэтому добавьте это в ваш .bashrc или воспользуйтесь учебным пособием по Arch Linux, чтобы улучшить его:

[trentonknight@archboX ~]$ cat .bashrc
systemctl --user import-environment

Запустить, чтобы включить до следующего входа в систему:

systemctl --user enable foo.timer

Если вы хотите проверить перед таймером:

systemctl --user start foo.service

И последнее. Убедитесь, что у вас есть качественные изображения в ~ / Pictures / Wallpaper или где вы когда-либо редактировали PATH для загрузки изображений из. DP-3 был моим выводом, проверьте, что вы используете:

swaymsg -t get_outputs
...