当前位置:首页 > 互联网 > 正文内容

深入解析绿联云 DX4600 Pro UGOS 系统 (2)

cmc3个月前 (01-31)互联网101

OK ,讲了那么多系统底层的东西,接下来让我们看看与用户打交道最直接的,软件层级的用户交互体验。

真正上手体验过,你才会明白大伙之前对张小龙的态度有点过于严格了,他可能真的算是相对比较好的产品经理。

套件分析:文件管理

2023 年很少能够找到一个连 Explorer 都做得有点问题的软件开发商了。我们都知道绿联的这套东西是基于 Electron 的前端项目,所以里面有相当一部分交互被受限于纯前端的逻辑。

首先是这个前进后退键。说起来你可能不信,在 Explorer 中浏览文件,你不能够跳跃式地浏览目录,因为顶上的地址栏,是一个装饰品,你不能在上面键入任何的路径或者快速跳转。想要进入到某个目录,你只能从根目录一路递归到你想到达的地方,然后用多了几次你会发现,这两个箭头的逻辑是反 PC 的:

  • 「后退」键实际上是../,就是 Windows Explorer 里面的上移,后退到父目录

  • 「前进」在浏览绝大多数目录的时候它都是灰色的,只有你选中了一个文件夹,或者当前路径下只有一个文件夹时它才会亮起——就是说,它的作用是代替双击?

  • 这两个键不绑定监听鼠标侧键,鼠标侧键在这个软件里没有任何用处

  • 也就是说文件管理不记录你任何的访问历史路径,你只能递归查找(除非“添加到快捷入口”或“桌面快捷方式”)

  • 后退/前进键的功能对于左侧侧边栏来说是独立的,左侧侧边栏跳转的每一条导航视作一个 Page 的话,这两个键只对 Page 内部有效

    (纯粹的前端逻辑,Navigation 页面路由、组件隔离)

来看看你微软爹是怎么做 Explorer 的……

其次就是当我上传文件的时候,它总是会先问我,究竟是选择跳过、替换还是保留两者,而无论你要导入的文件是否存在重复。就好像是我高考先把志愿报了再进考场考试一样。那我肯定是希望当拷贝的时候把所有的冲突项记录下来,最后列表让我决定怎么做( Windows 逻辑),而它只有闭着眼睛闷头干,或者每次都询问我,不允许对每个文件进行单独的决策。

套件分析:相册

我的父亲是一位很热爱生活的人,很多年前他买了一台相机,游山玩水的时候会记录很多照片,回到家分门别类整理好放在每一个文件夹里,从 2010 年一直带到现在,光看目录就知道当时去了哪,在干什么。

那么,把整理得这么细致的照片放到绿联相册里会是什么样的呢??……

是的,绿联云在设计这个东西的时候一定是参考手机 OS 的 Gallery ,就是往一个叫做 DCIM 的文件夹里猛塞图片就好了。我从来没见过相册归纳软件竟然能完全抛弃子目录信息。我当然可以辛苦自己每个 subfolder 单独创建一个相册,但是人生的时间不是这么浪费的:

  1. 我的相册名必须低于 15 字,为什么?看看上面的文件夹有哪个 15 字写得完?

  2. 我必须从本机、存储空间、或者相册内部手动指定一张图片作为相册封面,在创建空相册时只能从本机照片指定,而不是根据相册内容自动创建封面

  3. 我不能从公共空间读取图片创建相册

  4. 我无法选择有限的成员开放相册共享,只有 0 和 1

  5. 我必须在相册 APP 里创建相册,与其它套件(说的就是你,文件管理)没有一丝一毫的联动

  6. 我必须先创建空相册,再双击进入到空相册内部才能添加图片

  7. 其实我说错了,当我在相册“收藏”一张图片时,他会以文件的形式出现在“文件管理”APP 左侧“我的收藏”里,但不会体现在“相册”里的任何一个地方

我发现一件事情,上面的第 2 点和“参考手机 OS 的 Gallery”交互理念是冲突的,手机 OS 的 Gallery 意图是让用户把图片全部丢进去就好,它去自动 AI 分析,省心,但是 UGOS 只省了一半,我还是得自己管理贴张图,是这个意思吗?

很难理解负责相册和 Explorer 的 UX (如有)在想什么,把图像和文件之间的管理搞得乱七八糟,而最关键所需的功能却见不到:

套件分析:云影院

实际上我自己长期以来在用的媒体库是 Jellyfin ,已经在 Jellyfin 搭建好了成型的接近 3TB 的庞大影视资源库。但问题在于,让完全不懂操作的家里人去弄端口登录,还额外下个 APP 也不现实,那就试试云影院好了。

(另外一个原因是,我的 Jellyfin 还提供一些同龄人看的东西,跟我的兄弟也好教、会折腾)

云影院更是一个重量级选手。它提供两种刮削源,一个内置的“智能识别”,以及 TMDB ( TheMovieDB ),让我们先来欣赏一下智能识别的准确率:

于此相比,同样的资源在 Jellyfin:

官方的智能识别源可谓是一塌糊涂。他犯下了一个质量差的刮削器能犯下的所有错误,比如说,把 Fate/Stay Night UBW 识别成了 Fate/Stay Night (近似错误)、把花絮和 Special 识别成了毫不相干的其它影视资源(随机错误)、把 Tenet.2020 识别成了册那 2020 (匹配错误)等。

而且在 PC 端,这个播放窗口竟然不能调整大小……只有 540P 小屏和全屏,并在在我的机器上( 5900X+3090 )部分视频源无论放什么视频都会在播放大概 2-3 秒之后停住不动,而拖动进度条却能继续播放,怀疑是播放器写得有问题,卡在了关键帧解码。至于字幕渲染质量什么的我也不好意思继续提,因为即使是与视频文件同名的字幕它都匹配不到,让我在文件夹里手动选……还是先把匹配做明白再去苛求质量吧。

然后你猜怎么着,这个云影院是有适配鼠标侧键前进后退的,然而文件管理却没有。

那我们把官方的“智能匹配”取消掉,使用 TheMovieDB 呢?当然没有问题,因为 Jellyfin 也将 TheMovieDB 作为数据源之一,能在 Jellyfin 正确识别的片源 90%以上都能单纯依靠 TheMovieDB 源识别成功。所以我建议原来在 Plex/Emby/Jellyfin 库迁移过来的朋友,使用纯 TheMovieDB 源。但我需要跟随官方一篇教程去花十来分钟注册 TheMovieDB 、申请 APIKEY 、测试解析配置 Hosts ,有一种传统互联网的美。

那如果我的老豆老母老姐老哥恰巧喜欢看外国电影、看美剧,而我自己不看怎么办?我还要一个个去教他们怎么去一个全英文的网站申请 API key 、测延迟选 Hosts 吗?

我想了想,也许这是我的问题。遵守国际源刮削规范的影片很明显在“智能匹配”识别率并不高,我在怀疑相比这样的名字:

Fast.and.Furious.F9.The.Fast.Saga.2021.DC.1080p.BluRay.x265-RARBG

是不是这种识别率更高呢?

速 d 与 j 情 9[1080P 蓝光超清][高清电影网]

既然云影院能够添加公共空间的视频,那么从这个云影院是公共的这件事也就合乎常理了。但是阿绿再一次选择了打破常规:我教我老姐如何使用 APP 的时候,惊奇地发现她的云影院是空的。我找了半天去哪里将片库设为公用,发现满屏幕只有“个人影院”,把个人影院四个字点烂了也只是一个筛选器在疯狂地伸缩,最后发现所谓的公共影院的功能叫做“一起看”,还是邀请制的,你分享一个片库需要被分享人同意……

就好像在一个悠闲的周末晚上我邀请大伙一起看电影,然后把片库分别发送到大家的手机上,电视放在那不开,大家点击自己的手机各看各的。并且经过实测,这个叫做“一起看”的功能完全没有类似异地放映室播放进度同步的机制,它只是单纯地把片源共享,有一些名不副实。产品经理知道什么叫做“一起”吗?

云影院的用户隔离机制无关技术问题,单纯是产品经理脑子出了问题,产品定义到这突然就混乱了,放着好好的公共/私人域不做,突然异想天开搞邀请分享制。

套件分析:云音乐/有声书

我相信这个东西应当不会有人用。不支持选择输出设备、不支持读取 FLAC 内置的 TAG(导致所有在 Foobar2000 分类整理好的歌单导进来全部变成文件名)、不支持导入公共空间资源、不支持 AIFF 、不支持 CUE ,道阻且长,绿联加油吧。

晚 22:00 更新:

它不是不支持读取 tag ,而是读得非常慢,晚上回来一看歌曲元数据慢慢都蹦出来了,怀疑在后台建库建索引,那么慢一定用的是 MySQL 。

套件分析:备份

我对 NAS 的另一个重要需求就是文件自动备份(和微信备份,但是这台 NAS 不支持),而且只要求备份不要求同步,因为我的主力机已经有 2TB+8TB 的空间。

我一般习惯把工作目录放在桌面,代码项目放在~/*Projects ,过一段时间后归档到硬盘中,现在有了绿联云 NAS 自动备份……

已经连续 4 天没有关机了。

PycharmProjects 文件夹总大小 101GB ,文件数量 536957 ,文件夹数量 66488 ,这套套件的 PC 端备份在遇到十万以上数量级时会出现严重的性能问题,以至于现在我 4 天没有关机,第一次全量备份的完成度还未达到一半。而且备份文件的速度会越来越慢,在连续运行十来个小时之后会停滞不前,“我的备份”窗口会直接无响应挂掉,必须退出绿联私有云客户端再重新启动,它才会以一个比较慢的速度继续运行备份。而且是每十几个小时需要重新启动一次,天知道我离第一次备份成功还有多远。

不过这种极限工况不是所有人都会遇到的,目前我的相册自动备份大概 3000 张,比较流畅,不会有什么问题。

套件分析:百度云

我自己是向来不用百度云盘的,从拥有自己的电脑开始,数据一直牢牢掌握在本地硬盘里,需要的资源也总能从云盘以外的地方找到替代品。

但是家里其他的年轻人会用。我在邀请他们加入私有云后,我说我不用百度云盘的,但是你可以登陆试试,把云盘上的东西下载到家里,本地化。然后她在她的手机点了一下百度云盘插件。

提示“仅限管理员使用”,她让我给她开下权限,这个时候我人已经麻了,因为我已经意识到百度网盘估计只有管理员能用这一事实。

所以现在我的账户上很无奈地登录着别人的网盘,挂着别人的下载,等到下载完之后还要操作移到公共空间给其他人取用(没错,百度网盘的保存位置,又不支持公共空间了)

我尝试理解这件事情,虽然不懂技术的人根本不会管为什么不能用。我推测这类第三方工具本身限制在一个系统里面运行多个实例,出于之前分析的用户机制,实例只能交给管理员用户运行。

那这种情况在不考虑法律风险的时候怎么解决呢?虚拟机或者容器化方案。这就是新的问题了:

  1. 现阶段绿联根本没把虚拟机做出来,在当前用户机制的约束下做出来的难度比拿正经 Linux 重构还大

  2. 假设我们使用容器来承载多个实例,并且对用户隐藏,可以做到吗?

答案是不完全可以。docker 是不支持隐藏 container 的,但是 docker 支持每个用户运行不同的dockerd,那系统镜像就交给 root 运行好了,其他用户以自己的身份管理自己的dockerd,方案很不错。

但是非管理员的用户在 Linux 不真实存在,并且现在套件里的 dockerd 就是以 root 身份运行,如果要更新,那么怎么处理 root 容器降权迁移的问题?

另外,dockerd 多用户机制依赖systemd,而 Openwrt 正是**不使用systemd**的一个 Linux 发行版,意味着多用户容器方案在当前架构下不可能实现。

下集预告

对这个奇葩系统的分析就此结束了。我们接下来将会基于这些分析的结论寻找解决方案,结合我踩坑的经验,告诉大家在这台机器上,想要部署一个普通的三方媒体库和下载插件需要经过哪些步骤,使用过程中又会遇到什么样的坑。

  1. 系统级部署 Tailscale 内网穿透

  2. docker 容器间组网和配置

  3. docker 公共空间的挂载方法

  4. aria2c 镜像部署

  5. qb 正确的配置方法

  6. 公网安全保护指南

  7. Jellyfin Plugin 配置和个性化配置

附录

根据 Nginx Conf 生成的反代列表,传入数据不合规的时候会被 rewrite 跳转至 404“固件版本过低”页。

列表由 GPT 整理,因为上下文过长,GPT 遗忘机制导致可能会出现一定的错误,请自行前往/etc/nginx比对甄别

# Generated by ChatGPT
LISTEN 9999 [::]:9999# NAS server
/                                 -> :9996# Ugreen launcher
/home                             -> /data/app/com.ugreen.ugos.launcher/www/index.html

# Docker Hub API
/docker/image/search              -> https://hub.docker.com/api/content/v1/products/search/# Core server
/v1/user/login                    -> :9994# Album server
/v1/album_svr/                    -> :9982/v1/ai/album/                     -> :9982/v3/ai/album/                     -> :9982/v1/album/manage/                 -> :9982/v2/album/group/                  -> :9982/v3/cloud/album/                  -> :9982/v1/ai/task/                      -> :9982/v1/ai/scan/                      -> :9982/v1/ai/similar/                   -> :9982/v1/ai/blur/                      -> :9982/v1/ai/face/                      -> :9982/v1/ai/file/                      -> :9982/v1/album/people/                 -> :9982/v1/tidy/                         -> :9982/v1/myself/del_myself_folder      -> :9982# Baidu Pan server
/v1/baidu/rest/2.0/xpan/          -> https://pan.baidu.com/rest/2.0/xpan//v2/baidu/oauth/token             -> https://pan.baidu.com/rest/2.0/xpan/# MiniApp Yun server
/v3/cmcc/devapp/                  -> https://miniapp.yun.139.com/richlifeApp/devapp//v3/cmcc/open-mpplatform/oauth2/  -> https://miniapp.yun.139.com/open-mpplatform/oauth2/# Docker web
/docker/web                       -> /ugreen/docker/www

# TTYD server
/ttyd                             -> :DYNAMIC

# Docker images export
/docker/images/export/            -> :9375# Docker image search
/docker/image/search              -> https://hub.docker.com/api/content/v1/products/search/# Docker image repositories
/docker/image/repositories/       -> https://registry.hub.docker.com/v2/repositories/# External backup server
/v1/file/external_backup/         -> :9984# Favorites server
/v1/favorites/set                 -> :11024/v1/favorites/get                 -> :11024/v1/favorites/cancel              -> :11024# File collect server
/ugos/v1/file_collect/            -> :12028# File share server
/v1/share/get_shared_files_of_users -> :11025/v1/share/get_users_of_share_file   -> :11025/v1/share/share_files               -> :11025/v1/share/cancel_shared_files       -> :11025/v1/share/get_all_users             -> :11025/ugos/fileshare/v1/shared_user/list -> :11025# File search server
/ugos/globalsearch/v1/            -> :12029# IPC server
/v1/task/                         -> :9992/v1/baidu/                        -> :9992/v1/transcode/                    -> :1080/v1/disk/                         -> :9992/v1/storage/                      -> :9992/v2/storage/                      -> :9992/v1/stormng/                      -> :9992/v1/dl/                           -> :9992/v1/cmcc/                         -> :9992/v3/cmcc/                         -> :9992/v1/file/storages                 -> :9992/v1/file/disks                    -> :9992/v1/category/                     -> :9992/v2/category/                     -> :9992/v3/category/                     -> :9992/v3/storage/                      -> :9992/v4/storage/                      -> :9992/v5/storage/                      -> :9992# LBook server
/ugos/lbook/v1/                   -> :11029# Log Center server
/ugos/log_center/v1/              -> :10002# Media Player server
/v1/mediaplayer/                  -> :1085# Movies server
/v1/movies/                       -> :9980/v2/movies/                       -> :9980/v3/movies/                       -> :9980# Music server
/ugos/music/v1/                   -> :11028# Service Manager server
/ugos/service_mgr_svr/v1/         -> :19010# Thunder server
/device/info/watch                -> :5050/device/now                       -> :5050/device/authlogin                 -> :5050/device/v1/                       -> :5050# Thunder web
/web/thunder/                     -> :5050# Transcode server
/v1/transcode/online/                   -> :1080/v1/transcode/online/info/              -> :1080/v1/transcode/online/                   -> :1080/v1/transcode/online/status             -> :1080/v1/transcode/online/switch_resolution/ -> :1080# Data app
/data/app/                        -> /

# App
/app/                             -> :9999# User Management server
/v1/quota/project                 -> unix:/var/run/user_manage.sock
/v1/quota/user                    -> unix:/var/run/user_manage.sock
/v1/quota/volume                  -> unix:/var/run/user_manage.sock
/v1/timemachine/query             -> unix:/var/run/user_manage.sock
/v1/timemachine/set               -> unix:/var/run/user_manage.sock
/v1/cache/write                   -> unix:/var/run/user_manage.sock
/v1/cache/remove                  -> unix:/var/run/user_manage.sock
/v1/cache/clean                   -> unix:/var/run/user_manage.sock
/v1/cache/query                   -> unix:/var/run/user_manage.sock
/v1/localuser/list                -> unix:/var/run/user_manage.sock
/v1/localuser/exists              -> unix:/var/run/user_manage.sock
/v1/localuser/create              -> unix:/var/run/user_manage.sock
/v1/localuser/modify              -> unix:/var/run/user_manage.sock
/v1/localuser/delete              -> unix:/var/run/user_manage.sock

# WPS server
/v1/wps_doc/                      -> :11027


扫描二维码推送至手机访问。

版权声明:本文由陈茂春的博客发布,如需转载请注明出处。

本文链接:https://www.0817cmc.com/post/786.html

分享给朋友:

相关文章

流氓插件知多少-130个流氓插件大名单

上网的呗.有没被"强奸"过?没有??没有是不可能的.^_^看看下面1. 一搜工具条2. 完美网译通3. CNIC中文上网4. 博采网摘5. 百度搜霸6. 3721上网助手7. Dudu下载加速器8. 很棒小秘书9. 网络...

32-bit Windows XP无法支持4GB内存?

INQ近日利用4条1GB OCZ PC3700 EB Platinum内存(Dual Channel CL2-3-3-8)组合进行试验,发现32-bit Windows XP操作系统无法支持。  4GB内存?确实有点前卫,不过Nvidia和...

WindowsXP 64是微软最失败的系统?

WindowsXP 64是微软最失败的系统?

Windows Vista的曙光已经开始照耀我们的脸颊,我们都知道,从Vista发布那一天起,64位架构过渡将真正拉开序幕,大步前进--将Windows XP 64远远落在身后。  记得笔者去年升级系统的时候,笔者决定将操作系统一同升级到W...

2万元的笔记本卖6千 一个奸商的忏悔录

我的低价陷井  这世界,什么样的人不爱占小便宜?   即然有“低价”需求,自然要有“低价”的供应,所谓供求平衡嘛!   眼见各网站电子商务开展的如火如茶,若不趋势捞得一笔,怎对得起生我养育我的父老乡亲!   那就开个网站吧?简单!稍稍懂点简...

分清电脑自动关机的原因 (硬件方面)

1.市电电压不稳  一般家用计算机的开关电源工作电压范围为170V-240V,当市电电压低于170V时,计算机就会自动重启或关机。因为市电电压的波动我们有时感觉不到,所以就会误认为计算机莫名其妙的自动重启了。  解决方法:对于经常性供电不稳...

即时通讯领域互联互通第一案 QQ起诉PICA索赔五百万(图)

记者昨天从掌中无限公司内部人士处获悉,腾讯以“计算机软件著作权侵权纠纷以及不正当竞争”为由起诉了该公司,索赔人民币500万元.目前,北京市一中院已经正式立案审理.掌中无限对管辖权提出了异议.值得关注的是,这将是国内即时通讯领域互联互通的第一...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。