gpt4 book ai didi

linux - 未检测到 systemd 和 sway 套接字

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:10 26 4
gpt4 key购买 nike

我是 swaywm 的新用户和创建我自己的自定义相当新 systemd services .我之前使用 Openbox、feh 和 systemd 创建了一个每 30 分钟更换一次的墙纸脚本。下面是一个在 openbox 中运行良好的 foo.service:

[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.

我猜它仍在开发中。

最佳答案

感谢 freenode 上#sway 的小伙子和姑娘们,我能够通过简单地使用来解决这个问题:

systemctl --user

我没有意识到用户级服务与系统服务是分开的。最后,我的脚本非常基本,运行于:

.config/systemd/user/

我确实必须追加:

systemctl --user import-environment

暂时添加到我的 .bashrc,直到我可以分析缺少什么 PATH。无论如何,如果您遇到类似情况,请查看:

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

如果有人对在 sway 中自动更改其桌面墙纸感兴趣,则以下内容应该有效。创建以下目录和文件,名称当然是您认为适合服务的名称:

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

关于linux - 未检测到 systemd 和 sway 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50311320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com