- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 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/
我是 swaywm 的新用户和创建我自己的自定义相当新 systemd services .我之前使用 Openbox、feh 和 systemd 创建了一个每 30 分钟更换一次的墙纸脚本。下面是一
我是一名优秀的程序员,十分优秀!