kjtsune/embyToLocalPlayer

关于Linux使用systemd自启动的一点建议

Closed this issue · 8 comments

使用systemd自启动只有声音没有播放器界面,我怀疑应该需要某些前置服务
但多次尝试后还是不可行,最后换了个简单粗暴的方法,直接延迟10s后启动,成功
~/.config/systemd/user/

[Unit]
Description=embytoplayer

[Service]
ExecStartPre=/bin/sleep 10
ExecStart=/home/rim/embyToLocalPlayer/etlp.sh

[Install]
WantedBy=default.target

还真可以。
要保存到用户目录,刚开始没注意看。
~/.config/systemd/user/

感觉是需要什么wayland/x11之类的先启动,不过是在找不到相关服务
最后还是选择直接延时,能跑就行(
顺带我只在Arch Linux上测试运行,其他OS应该大差不差

我用 Debian_Xfce 测试。
用 ssh systemctl --user status etlp 检查服务完全启动后再登录桌面的话,就会无法弹出播放窗口。
此时,若重启服务,会正常工作。systemctl --user restart etlp

该方案需要在 etlp 服务启动完成前登录桌面,才可以。

对,事实上10s就是给我登录的时间(
我一直怀疑是显卡或者wayland来着,但找不到wayland相关服务(现在发现原来在 --user )

按照桌面环境这个思路我找到一个图形界面服务,graphical-session.target
这可以让 etlp 在图形界面启动后运行
这应该适用于所有使用桌面环境的Linux了


~/.config/systemd/user/etlp.service

[Unit]
Description=etlp
After=graphical-session.target

[Service]
ExecStart=/home/rim/embyToLocalPlayer/etlp.sh

[Install]
WantedBy=graphical-session.target

Debian_Xfce
还是弹不出,但服务启动和登录时间基本上同步,加延迟两秒后成功了。
但如果登录之前,用远程ssh连接上的话,服务就会启动,导致后续登录弹不出播放器。
步骤:不登录图形界面,等30秒左右,用ssh检查服务运行状态,发现服务刚刚运行。

Arch_KDE_Wayland
ssh 连接会让 graphical-session.target 运行?我这里复现不出来
加延迟可以写个注释,按需添加

ssh 连接会让 graphical-session.target 运行?

是的。

后面我用下面这个测试,目前没发现问题

[Unit]
Description=embyToLocalPlayer
After=graphical-session.target

[Service]
ExecStart=/root/etlp/etlp_run.command
ExecStartPre=/bin/bash -c "until loginctl show-session $(loginctl | grep $USER | awk '{print $1}') -p Type | grep -q -e 'x11\|wayland'; do sleep 1; done; sleep 2"
TimeoutStartSec=infinity

[Install]
WantedBy=graphical-session.target

添加 ExecStartPre 的版本我这里测试没有问题