2026/10/2 6:14:04

Ubuntu 20.04安装向日葵远程控制:依赖修复与踩坑全指南

Ubuntu 20.04安装向日葵远程控制:依赖修复与踩坑全指南 说实话在Ubuntu下折腾远程控制这事我很多年前是拒绝的。那时候觉得服务器能SSH就够了桌面远程一套VNC就凑合。但等真正需要在办公室、家里、客户现场三台Linux机器之间来回切的时候就会发现VNC那套“能连通”和“好用”之间隔着一整条街。后来试了好几个方案最后还是绕回到了向日葵。不是因为它完美而是它在不多折腾的情况下能稳定解决“有人不会配公网、不想动路由器、想要跨网远程到图形桌面”这类最真实的场景。不过向日葵在Windows上双击下一步就能装好到了Ubuntu 20.04和Debian 10上事情就没那么顺利了。官网上明明写着支持Ubuntu和Debian下载下来deb包一装报错一串。这篇文章是我的一次完整踩坑记录把下载、安装、依赖修复、运行期黑屏、服务自启这些坑全部摊开讲希望能帮同样在Linux上折腾向日葵的人少走弯路。先交代一下环境我的实测机器是Ubuntu 20.04.6 LTSGNOME桌面和Debian 10 BusterKDE桌面两台都是x86_64架构的台式机。如果你和我的环境一样下面的操作基本能直接照着走如果是Ubuntu 22.04之后的系统很多依赖包名已经变了参考思路即可命令要相应调整。1. 为什么说Linux下装向日葵不是“下一个deb就完事”1.1 先搞清官方包依赖了什么很多人第一次接触Linux安装软件习惯用Windows的逻辑下载一个exe双击下一步完成。但deb包不一样它自带一份完整的“依赖清单”系统里缺任何一个库安装程序都会拒绝工作。向日葵Linux版是基于Qt 5构建的图形程序同时为了跟系统托盘、通知中心、Web登录交互它又依赖一批GTK和系统级基础库。这两套东西叠加在一起deb包里的Depends字段就会特别长。只要系统里缺其中一个dpkg就会报“依赖关系不满足”然后整个安装流程卡住。我记得第一次执行sudo dpkg -i之后的输出满屏都是报错大致长这样正在选中未选择的软件包 sunloginclient。 (正在读取数据库 ... 系统当前共安装有 352841 个文件和目录。) 准备解压 SunloginClient_xxx_amd64.deb ... 正在解压 sunloginclient (xxx) ... dpkg: 依赖关系问题使得 sunloginclient 的配置工作无法继续 sunloginclient 依赖于 libxcb-icccm4然而 未安装软件包 libxcb-icccm4。 sunloginclient 依赖于 libxcb-image0然而 未安装软件包 libxcb-image0。 sunloginclient 依赖于 libxcb-keysyms1然而 未安装软件包 libxcb-keysyms1。 sunloginclient 依赖于 libxcb-render-util0然而 未安装软件包 libxcb-render-util0。 sunloginclient 依赖于 libxcb-shape0然而 未安装软件包 libxcb-shape0。 sunloginclient 依赖于 libxcb-xinerama0然而 未安装软件包 libxcb-xinerama0。 sunloginclient 依赖于 libxcb-xkb1然而 未安装软件包 libxcb-xkb1。 sunloginclient 依赖于 libxkbcommon-x11-0然而 未安装软件包 libxkbcommon-x11-0。这一串libxcb-*是Qt的xcb平台插件在X11环境下运行所必需的依赖属于“同一个来源家族”。Windows应用装不上最多给你弹个错误框deb包则是把所有缺口一次性摆在你面前。第一次看到的时候确实有点头大但也正是因为这个特性我们才能顺着报错逐个把缺的包补齐。1.2 为什么有人可以直接装你却不行这也是很多新手最困惑的地方网上总有人说“直接dpkg -i就好”为什么到我这儿就报一堆错原因其实不复杂向日葵官方deb包一般在较新的桌面环境上测试很多精简安装的Ubuntu/Debian默认没有完整X11相关的运行库。我自己那台Ubuntu 20.04是server版最小化安装之后再手搓的桌面系统本身就缺了一堆图形库而别人用发行版自带的“完整安装”选项Qt库和GTK库已经顺带装好了自然不容易报错。另外KDE桌面自带大量Qt库但这不代表所有Qt依赖都齐了。我上面列出的libxcb-*在KDE桌面上也可能缺失因为它依赖的是X11运行环境而非某个具体桌面。所以“别人没踩坑”不代表你也可以跳过。这篇文章的价值就在这与其每次凭运气不如把依赖一次理清以后重装、换机都心里有数。2. 下载到安装失败一次完整现场还原2.1 官网下载容易忽略的两个细节去向日葵官网的下载中心选择Linux版很多人会直接点下载。有两个细节我建议你想清楚再动手架构一般x86_64机器选amd64版本树莓派、飞腾、麒麟之类ARM芯片的板子选arm64版本。选错架构的话dpkg安装时会直接报“架构不匹配”这一步就过不了。发行版适配官网有Ubuntu/Debian通用deb包也有UOS、Deepin等发行版专用包。Ubuntu 20.04和Debian 10用通用deb包问题不大但Debian 10有版本冲突的隐患这个后面单独说。下载命令很简单用wget拉下来就行。文件名里的版本号会随官方更新变化我这里的xxxx只是占位wget https://down.oray.com/sunlogin/linux/SunloginClient_xxxx_amd64.deb然后执行第一次安装尝试sudo dpkg -i SunloginClient_xxxx_amd64.deb如果你执行完看到的是“依赖关系问题使得sunloginclient的配置工作无法继续”这一句说明安装包已经被解压到系统里只是配置阶段失败了。网上的常规建议是跑一句sudo apt --fix-broken install在Ubuntu 20.04上这句通常能帮你把源里有的依赖自动补上但也不是万能的原因后面会讲。2.2 apt install ./xxx.deb 和 dpkg -i 的差别后来我学到一个更省事的做法直接用sudo apt install ./SunloginClient_xxx_amd64.deb。注意那个./不能省这是告诉apt“我要安装的是当前目录下的本地文件”而不是从软件源里找这个名字的包。apt install会自动读这个deb包的依赖列表然后尝试从软件源里把缺的包全部一次性拉下来比dpkg -i加上apt --fix-broken install少一步输出也更友好。在Ubuntu 20.04上这条命令往往能直接成功。但如果你的系统软件源不全比如最小化安装后没有启用universe源还是会报依赖不满足。遇到这种情况也别慌把报错里列出的包名记下来逐个apt install就行。下面这条命令是我在Ubuntu 20.04上真正用过的依赖安装集合亲测能解决大部分报错sudo apt install libappindicator3-1 libnotify4 libnss3 libxss1 libxtst6 xdg-utils \ libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 \ libxcb-render-util0 libxcb-shape0 libxcb-xinerama0 libxcb-xkb1 \ libxkbcommon-x11-0 libegl1 libgbm1 libgtk-3-0这些包各司其职简单梳理一下libgtk-3-0图形界面基础库向日葵的登录框和设置界面都要用到。libappindicator3-1系统托盘图标依赖。没有它向日葵可能明明在运行但桌面上看不到托盘图标你都不知道它活着还是死了。libnss3、libxss1、libxtst6分别负责浏览器内核的SSL/TLS组件、屏幕保护状态检测、键盘鼠标事件注入。libxcb-*Qt xcb平台插件的依赖这一组缺失是最常见的报错来源。libegl1、libgbm1图形渲染和EGL支持跟远程画面的编码输出有一定关系。2.3 别忘了“软件源”这个源头如果你执行apt install某个包时提示找不到先别怀疑包名拼错优先检查软件源。Ubuntu 20.04默认有main、universe、restricted、multiverse四个组件libappindicator3-1就在universe里。有些人在换源时自作主张精简了组件或者用的是某些裁剪过的镜像就会出现“官方源明明有这个包我这里却装不了”的怪象。解决办法是编辑/etc/apt/sources.list确保里面有deb http://archive.ubuntu.com/ubuntu/ focal main universe restricted multiverse deb http://archive.ubuntu.com/ubuntu/ focal-updates main universe restricted multiverse国内用户换成阿里云或清华的镜像源结构一样。改完执行sudo apt update再重新安装。3. Debian 10的“难搞”不在缺失而在版本3.1 报错里暗藏的真实冲突Debian 10 Buster发布于2019年核心库版本偏老。向日葵新版客户端是用较新的Qt版本编译的deb包依赖里往往会写类似libqt5webenginecore5 ( 5.12.0)这样的版本下限而Buster仓库里的libqt5webenginecore5只有5.11.3。这种情况下报错就不再是“未安装”而是“版本不够新”sunloginclient : 依赖: libqt5webenginecore5 ( 5.12.4) 但 5.11.3dfsg-2 已安装这才是Debian 10上最难受的地方。缺少的依赖可以装但版本冲突没法靠“装上”解决。Debian稳定版的仓库不会凭空升级某个库的版本所以apt --fix-broken install和apt install都无能为力。3.2 两个绕行方案第一个方案是加backports源从Debian的软件包测试分支中挑选兼容版本。命令如下echo deb http://deb.debian.org/debian buster-backports main | sudo tee /etc/apt/sources.list.d/buster-backports.list sudo apt update sudo apt install -t buster-backports libqt5webenginecore5 libqt5webenginewidgets5注意backports不是所有包都有而且即使有也未必满足向日葵期望的具体版本。这个方法能不能成取决于你装向日葵那天backports仓库里有什么属于“可以试但不保证成功”的方案。第二个方案是用向日葵官方提供的Linux通用压缩包。官网Linux下载页除了deb和rpm还提供过x86_64的tar.gz通用版。解压后直接进入目录运行./sunloginclient可以绕过包管理器的依赖检查。但“绕过依赖检查”不等于“没有依赖”它运行的时候依然需要系统里有Qt基础库。我在Debian 10上试过这个方案能跑起来但托盘图标需要在系统托盘插件里手动启用整体体验没有Ubuntu 20.04上那么顺。如果你手头有Debian 10的机器我的建议排序是先试apt install ./xxx.deb看版本冲突是否出现出现冲突就试backports升级Qt相关库backports解决不了就改用tar.gz版以上都不行建议直接在虚拟机上跑Ubuntu 20.04来装向日葵。3.3 libssl.so.1.1的延伸踩坑除了Qt版本Debian 10和Ubuntu 20.04还有一个常见的后遗症某些商业软件在升级完其他组件后系统里不再有libssl.so.1.1这个动态库。向日葵老版本或某些企业定制版本启动时会直接报error while loading shared libraries: libssl.so.1.1: cannot open shared object fileUbuntu 20.04的源里是有libssl1.1这个包的直接装回来就行sudo apt install libssl1.1Debian 10默认的OpenSSL也是1.1.1版本正常情况不会缺。但这个坑很容易出现在“你为了装某个新软件手动升级了OpenSSL到3.x”的场景里。所以排查思路应该是先看向日葵启动时到底报不报这个错报了再装别看到“ssl”就觉得要装否则可能徒增风险。4. 装好后的隐形坎Wayland黑屏、服务自启和显卡显示4.1 Wayland会话下的黑屏问题不少人装完向日葵能登录账号、能建立远程连接但远程一看画面全黑。折腾半天最后发现问题出在系统使用的是Wayland会话而不是X11会话。向日葵的屏幕采集是基于X11协议的。GNOME在Ubuntu 20.04登录界面默认让你进的“Ubuntu”会话实际上是GNOME Wayland。在这种会话下向日葵拿不到远程画面的数据连接建立后只能看到黑屏。解决办法有两个第一在GDM登录界面切换会话。点击用户名之后注意右下角有一个齿轮图标点开选择“Ubuntu on Xorg”或者叫“GNOME on Xorg”。第二直接在/etc/gdm3/custom.conf里禁用Wayland[daemon] WaylandEnablefalse然后重启显示管理器sudo systemctl restart gdm3或者直接重启机器。Debian 10如果用的是GDM操作一样如果是KDE桌面对应配置文件是/etc/sddm.conf可以把会话改成plasma-x11。这个坑特别隐蔽因为很多人根本不关心自己用的是Wayland还是Xorg直到远程黑屏才开始排查。4.2 systemd服务管理与开机自启向日葵安装之后会在systemd里注册一个sunloginclient.service服务。有时候你从图形界面启动过向日葵控制端也能连上但后台服务却处于dead状态这就可能导致某些功能异常或者开机不自启。检查服务状态systemctl status sunloginclient.service如果显示inactive或failed手动启动并设置开机自启sudo systemctl start sunloginclient.service sudo systemctl enable sunloginclient.service这里补充一个实际经验向日葵图形界面里那个“开机自启动”开关和systemd的enable不是一回事。图形界面的开关只管你登录桌面之后是否拉活客户端而systemctl enable是在系统层面注册服务。我在一台Ubuntu 20.04机器上遇到过重启后向日葵起不来的情况最后就是靠systemctl enable解决的。4.3 显卡驱动和显示器输出带来的画面问题远程控制时如果画面花屏、分辨率低、甚至一登录就黑屏还有一半的可能是显卡驱动或显示器输出问题。排查顺序建议是这样用nvidia-smi确认NVIDIA显卡驱动是否正常工作确认本地桌面显示正常之后再测向日葵如果被控机器是台服务器没有接实体显示器很多主板或显卡在无显示输出时会锁定最低分辨率远程画面会非常模糊。解决方法是插一个HDMI诱骗器或者接一台淘汰的显示器向日葵设置里也可以手动切换“清晰度”和“帧率”默认的高清模式不一定适合弱网环境。这里和热搜词里的“ubuntu20.04安装显卡驱动”其实是对应上的。显卡驱动没装好的系统本地桌面都可能有问题远程画面自然更不稳定。所以如果向日葵画面异常先把本地桌面整正常了再说别上来就怀疑向日葵。5. Ubuntu 20.04完整安装清单和自检方法5.1 一条龙命令清单为了让你少走弯路我把Ubuntu 20.04上验证过的完整流程整理成一条龙命令直接复制执行就可以# 1. 更新系统和软件源 sudo apt update sudo apt upgrade -y # 2. 安装基础依赖这一条解决90%的deb依赖报错 sudo apt install -y libappindicator3-1 libnotify4 libnss3 libxss1 libxtst6 \ xdg-utils libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 \ libxcb-render-util0 libxcb-shape0 libxcb-xinerama0 libxcb-xkb1 \ libxkbcommon-x11-0 libegl1 libgbm1 libgtk-3-0 # 3. 用apt安装本地deb包注意./不能省 sudo apt install ./SunloginClient_xxx_amd64.deb # 4. 如果没有报错启动服务并设置开机自启 sudo systemctl enable --now sunloginclient.service # 5. 查看服务状态 systemctl status sunloginclient.service下载文件名请换成你从官网实际拿到的名字。如果官网下载太慢你可以先在别的机器上下载好再用U盘或者scp传到目标机器最后执行第3步安装效果一样。5.2 安装后自检清单装完之后别急着高兴按下面这张表过一遍基本能确认系统是健康的检查项命令/操作预期结果服务状态systemctl status sunloginclient.serviceactive (running)进程存在pgrep -f sunlogin至少返回一个PID托盘图标查看系统托盘区域能看到向日葵图标登录框手动执行sunloginclient能弹出登录界面远程连接用另一台设备的向日葵连接本机画面正常且能控制开机自启重启后再次执行systemctl statusactive (running)如果托盘图标没有大概率是libappindicator3-1没装对如果远程画面黑屏优先检查Wayland会话如果服务状态是failed运行下面的命令看日志journalctl -u sunloginclient.service -n 50日志会直接告诉你启动失败的具体原因比瞎猜靠谱得多。5.3 双系统、虚拟机里的补充注意事项热搜词里出现大量“双系统安装Ubuntu 20.04”“虚拟机安装Ubuntu 20.04”的内容说明不少人是把向日葵装在这种环境里。我补充两个相关经验在Windows和Ubuntu双系统下向日葵本身没大问题但双系统的时间偏差会影响一些远程定时任务。建议两个系统都把硬件时间设为UTC避免来回切换系统后时间乱跳。在VMware或VirtualBox虚拟机里装Ubuntu 20.04再装向日葵远程连接前建议把虚拟机的显示控制器设置为比较兼容的模式并安装open-vm-tools-desktop或virtualbox-guest-dependencies。不装的话远程画面在分辨率切换或缩放时可能出现撕裂。另外虚拟机里的Ubuntu如果网络是NAT模式向日葵的P2P连接也可能受影响。被控端建议把虚拟机网络改成桥接模式让虚拟机从路由器直接获取IP远程穿透的成功率会高很多。这与宿主机是否安装了其他网络管理工具无关纯粹是NAT带来的连接限制。其实安装向日葵的依赖问题说穿了就是“先把自己的软件源和基础库理顺再用apt去解析依赖”。踩过一次坑之后我现在每装一台Linux机器都会先补一遍常用运行库再装这类图形化远程工具。如果你能照着这篇文章少折腾一晚上那这个坑就记录得值了。希望你在Ubuntu 20.04和Debian 10上都能顺利把向日葵跑起来。