/ HiDPI

网易云音乐 Linux 版 HiDPI 支持

网易云音乐之前和深度合作发布过一个 Linux 版本,可惜疏于维护,比如 Qt5 最近升级之后,迷你播放器和系统托盘菜单界面字体全部不能正确显示(显示为“口口”)。

这点可以通过不使用迷你播放器、系统托盘来绕过。但是除此之外,不支持高分屏这点实在是难以接受。

后来摸索了一下,发现网易云音乐 Linux 版是通过 Qt5 来实现的,而其中大部分的界面元素都是通过 Qt 的 WebKit 来渲染的,而 Qt5 目前的 WebKit 实际上是通过 fork 了一个 Chromium 进程来实现的。

接下来就简单了,我们都知道,Chromium 有一个启动参数 --force-device-scale-factor 来更改全局控件缩放,于是就试了一下:

$ netease-cloud-music --force-device-scale-factor=2

结果喜人,网易云音乐的主要界面都能正确的缩放渲染了,还好这家以养猪闻名的公司没有自己把启动参数自己吞掉。

美中不足的是,似乎网易云音乐在启动的时候,自己在代码中写死了窗口大小,导致修改缩放因子之后,界面元素会挤到一起。这样每次启动之后,需要主动拖一下窗口大小才行。另外就是,界面上一部分控件是非矢量图片来实现的,会有模糊的现象,不过还好不多。另外所有专辑封面的图片分辨率也不够,也会跟着模糊。还有就是迷你播放器/托盘是用 Qt 自己画的,依然还是有问题。

每次都用命令行来启动网易云音乐肯定不现实,所以我们只需要修改一下它的 .desktop 文件即可。将 /usr/share/applications/netease-cloud-music.desktop 拷贝到 ~/.local/share/applications/,然后修改其中的 Exec 字段,改为:

Exec=netease-cloud-music --force-device-scale-factor=2 %U

即可。此外还可以顺便修改一下 Icon 字段,让网易云音乐的图标与系统其他图片看上去更统一一些。


另外在通过命令行来启动网易云音乐的时候,发现启动之后命令行会有如下日志:

$ netease-cloud-music --force-device-scale-factor=2
getrlimit(RLIMIT_NOFILE) failed
bad character '�'
bad character '�'
bad character '�'
bad character '�'
bad character '�'
bad character '�'
bad character 'E'
bad character 'M'
bad character 'D'
bad character 'I'
bad character 'S'
bad character 'C'
bad character 'I'
bad character 'D'
bad character 'A'
bad character 'B'
1: syntax error
bad character 'C'
bad character 'D'

看来似乎是客户端从服务器上获取一个脚本文件,准备在客户端里 eval。然后这个接口最近有变动/挂了,返回结果不正确,异常信息打印了出来。

总之,这个 🌶🐔 客户端,我看迟早 💊。