3588 向日葵使用问题与解决 —— 识别码改变、启动后连接服务器失败
向日葵远程控制是常用的跨平台远控软件,按版本可分为企业版与个人版(此处为麒麟版本)两类。在 RK3588 等嵌入式设备上部署后,两类版本均可能遇到两个典型问题:
- 设备识别码频繁变化:同一台设备在不同时间显示的识别码(设备代码)不一致,导致远程主机列表中的设备信息混乱,无法稳定连接。
- 服务启动异常:开机时向日葵服务启动过早,网络尚未就绪,导致服务连接服务器失败,此时自动重新连接需要等待一百多秒。
注意,官网最近提供了Ubuntu arm64的版本,但实测3588装libmali等opengles后,无法正常使用(报GL错误),好像没装mali就正常。
一、识别码变动:dummy0 虚拟网卡的 MAC 地址
参考: https://zhuanlan.zhihu.com/p/422237802

查询到当前系统有dummy0网卡,随机MAC。
dummy0是因为内核配置了这个选项
# zcat /proc/config.gz | grep CONFIG_DUMMY
# CONFIG_DUMMY_IRQ is not set
CONFIG_DUMMY=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
通用解法:通过 systemd 的 .link 文件强制固定 dummy0 的 MAC 地址。
创建 /etc/systemd/network/10-dummy0.link:
[Match]
OriginalName=dummy0
[Link]
MACAddressPolicy=none
MACAddress=02:aa:bb:cc:dd:ee
即关闭 MAC 地址策略(MACAddressPolicy=none),并直接指定一个固定地址 02:aa:bb:cc:dd:ee。重启后 dummy0 的 MAC 恒定,识别码也随之稳定。
二、向日葵企业版(runawesunhost)问题与解决
2.1 问题现象
企业版设备上,runawesunhost.service 服务启动异常,主要表现为:
- 开机后向日葵服务未正常连接服务器,远程连接失败;
- 服务启动时系统网络尚未就绪,服务无法完成注册。
2.2 解决思路
在服务定义层面做两处增强(通过 systemd drop-in 覆盖文件实现,等价于 sudo systemctl edit runawesunhost.service):
- 等待网络就绪:在
[Unit]段声明Wants=network-online.target与After=network-online.target,让服务在网络完成初始化后再启动。 - 启动前延迟:在
[Service]段增加ExecStartPre=/bin/sleep 20,在服务正式启动前预留 20 秒缓冲,进一步规避网络或依赖组件未就绪的窗口期。
2.3 具体配置
创建 drop-in 文件 /etc/systemd/system/runawesunhost.service.d/override.conf:
[Unit]
Wants=network-online.target
After=network-online.target
[Service]
ExecStartPre=/bin/sleep 20
配合上文的 10-dummy0.link(固定 dummy0 MAC),即构成企业版的完整修复。
三、向日葵个人版(sunloginclient)问题与解决
3.1 问题现象
个人版设备上,runsunloginclient.service 存在三类问题:
- 识别码变化:同企业版,
dummy0网卡 MAC 不稳定导致识别码频繁变动。 - 服务启动过快:服务在网络就绪前启动,连接服务器失败。
- 没有自启动:桌面环境登录后,向日葵客户端不会自动启动,需手动打开。
3.2 解决思路
个人版在通用修复(固定 MAC)的基础上,额外处理服务启动与桌面自启动两个环节:
- 固定
dummy0MAC:同前文,解决识别码变化。 - 等待网络就绪 + 启动延迟:通过 drop-in 覆盖文件为
runsunloginclient.service声明网络依赖并延迟 20 秒。 - 配置桌面自启动:在用户目录创建
~/.config/autostart/sunlogin.desktop自启动项,并在启动命令中等待服务激活后再拉起客户端界面,保证登录后客户端自动运行且状态正常。
3.3 具体配置
① 固定 MAC(/etc/systemd/network/10-dummy0.link):
[Match]
OriginalName=dummy0
[Link]
MACAddressPolicy=none
MACAddress=02:aa:bb:cc:dd:ee
② 服务延迟(/etc/systemd/system/runsunloginclient.service.d/override.conf):
[Unit]
After=network-online.target
Wants=network-online.target
[Service]
ExecStartPre=/bin/sleep 20
③ 桌面自启动(/home/<用户>/.config/autostart/sunlogin.desktop):
[Desktop Entry]
Name=Sunlogin Client
Name[zh_CN]=向日葵
Comment=向日葵远程控制软件
Exec=sh -c "until systemctl is-active --quiet runsunloginclient.service; do sleep 2; done; /usr/local/sunlogin/bin/sunloginclient"
Terminal=false
Type=Application
Categories=Network;RemoteControl;
Icon=/usr/local/sunlogin/res/icon/sunlogin_client.png
其中 Exec 行的 until systemctl is-active --quiet ... 循环会在服务处于 active 状态前每 2 秒重试一次,确保客户端界面在服务完全就绪后才启动,避免”界面起来了但连不上”的假死现象。
留下评论