少于 1 分钟阅读 次阅读

向日葵远程控制是常用的跨平台远控软件,按版本可分为企业版个人版(此处为麒麟版本)两类。在 RK3588 等嵌入式设备上部署后,两类版本均可能遇到两个典型问题:

  1. 设备识别码频繁变化:同一台设备在不同时间显示的识别码(设备代码)不一致,导致远程主机列表中的设备信息混乱,无法稳定连接。
  2. 服务启动异常:开机时向日葵服务启动过早,网络尚未就绪,导致服务连接服务器失败,此时自动重新连接需要等待一百多秒。

注意,官网最近提供了Ubuntu arm64的版本,但实测3588装libmali等opengles后,无法正常使用(报GL错误),好像没装mali就正常。

一、识别码变动:dummy0 虚拟网卡的 MAC 地址

参考: https://zhuanlan.zhihu.com/p/422237802 alt text

查询到当前系统有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):

  1. 等待网络就绪:在 [Unit] 段声明 Wants=network-online.targetAfter=network-online.target,让服务在网络完成初始化后再启动。
  2. 启动前延迟:在 [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 存在三类问题:

  1. 识别码变化:同企业版,dummy0 网卡 MAC 不稳定导致识别码频繁变动。
  2. 服务启动过快:服务在网络就绪前启动,连接服务器失败。
  3. 没有自启动:桌面环境登录后,向日葵客户端不会自动启动,需手动打开。

3.2 解决思路

个人版在通用修复(固定 MAC)的基础上,额外处理服务启动与桌面自启动两个环节:

  1. 固定 dummy0 MAC:同前文,解决识别码变化。
  2. 等待网络就绪 + 启动延迟:通过 drop-in 覆盖文件为 runsunloginclient.service 声明网络依赖并延迟 20 秒。
  3. 配置桌面自启动:在用户目录创建 ~/.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 秒重试一次,确保客户端界面在服务完全就绪后才启动,避免”界面起来了但连不上”的假死现象。

留下评论