解决 Ubuntu 向日葵 (Sunlogin) 开机自启网络未就绪导致登录失败的问题
在 Linux(特别是 Ubuntu)上使用向日葵远程控制(SunloginClient)时,经常遇到这样一个问题:设置了开机自启,但机器重启后向日葵显示“离线”或登录失败,必须手动重启服务才能恢复。
这通常是因为 Linux 的启动速度很快,而 systemd 默认的并行启动机制可能导致向日葵在网卡获取到 IP 地址之前就已经尝试登录,从而导致“自动登录失败”。
本文将介绍如何通过修改 systemd 服务配置,让向日葵“乖乖等待”网络就绪后再启动,从而彻底解决这个问题。
核心思路
- 查找服务名:确认向日葵的服务名称。
- 修改依赖:让服务强制等待“网络在线(network-online)”状态。
- 强制延时(可选):如果网络依赖无效,直接加 10-30 秒的强制启动延时。
具体操作步骤
第一步:找到向日葵的服务文件
打开终端,执行以下命令查找服务名:
1
systemctl list-units --type=service | grep sunlogin
通常官方版本的服务名是 runsunloginclient.service。
确认服务状态和路径:
1
systemctl status runsunloginclient.service
在输出中找到 Loaded: loaded (/etc/systemd/system/runsunloginclient.service; ...) 这一行,括号里的路径就是我们要修改的文件路径。
第二步:修改服务配置(推荐方案)
使用编辑器(如 nano 或 vim)修改该文件。假设路径是 /etc/systemd/system/runsunloginclient.service:
1
sudo nano /etc/systemd/system/runsunloginclient.service
你需要修改两个地方:
1. 修改 [Unit] 部分
将原有的 After=network.target 修改(或添加)为等待 network-online.target。
注意:
network.target只代表网络服务启动了,但不代表已联网;network-online.target才代表已获取 IP。
1
2
3
4
5
[Unit]
Description=Sunlogin Remote Control Client
# 修改或添加下面这两行
After=network-online.target
Wants=network-online.target
2. 修改 [Service] 部分(可选但推荐)
为了双重保险,建议在启动命令前加一个简单的延时(比如 10 秒),确保路由和 DNS 彻底准备好。
1
2
3
4
5
6
[Service]
Type=simple
# 添加这一行,强制等待 10 秒
ExecStartPre=/bin/sleep 10
ExecStart=/usr/local/sunlogin/bin/sunloginclient
# ...
修改后的完整文件示例:
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Sunlogin Remote Control Client
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=root
ExecStartPre=/bin/sleep 10
ExecStart=/usr/local/sunlogin/bin/sunloginclient
# ...其他原有配置保持不变
第三步:应用更改并重启
修改完成后,保存退出(在 nano 中按 Ctrl+O 回车保存,Ctrl+X 退出),然后执行以下命令让配置生效:
1
2
3
4
5
# 1. 重载 systemd 配置
sudo systemctl daemon-reload
# 2. 重启向日葵服务
sudo systemctl restart runsunloginclient.service
验证方法
重启 Ubuntu 机器 (sudo reboot),观察向日葵是否能正常上线。你可以通过以下命令查看启动日志,确认它是否执行了延时:
1
journalctl -u runsunloginclient.service -f
原理总结
After=network-online.target: 告诉系统“必须等到网络真正连通了(Ping 得通了)再启动我”。ExecStartPre=/bin/sleep 10: 这是一个简单粗暴但非常有效的办法。有时候系统认为网络通了,但其实 DNS 还没解析好,硬等 10 秒能解决 99% 的网络未就绪问题。