未检测到systemd和sway套接字

时间:2018-05-12 22:52:16

标签: linux desktop systemd systemctl wayland

我是swaywm的新用户,而且创建我自己的自定义systemd services还相当新。我之前使用过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 :(得分:0)

感谢freenode上#sway的男生和女生们,我只需使用以下内容解决了这个问题:

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