我是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.
我的猜测还在发展中。
答案 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