最近从 Windows 换到了 Manjaro,日常离不开 MATLAB,虽然 MATLAB 官方提供了 Linux 版本,但是没有对 Manjaro 做适配,所以在安装 MATLAB 的过程中遇到了各种问题,以此记录。任何其他问题建议查阅ArchWiki。
MATLAB 安装报错
最初安装的时候,我下载的是 MATLAB 2020b 的 iso 镜像,即使按照 ArchWiki 的指导,移除了libfreetype.so*
还是会继续报错。后来换成 MATLAB 2022a 的镜像才成功安装。
进入 MATLAB 2022a 安装文件所处的文件夹,运行./install
,出现报错
1
2
3
|
terminate called after throwing an instance of 'std::runtime_error'
what(): Failed to launch web window with error: Unable to launch the MATLABWindow application. The exit code was: 127
[1] IOT instruction (core dumped) ./install
|
此时可以运行
1
|
./bin/glnxa64/MATLABWindow
|
应该会出现报错信息
1
|
bin/glnxa64/MATLABWindow: symbol lookup error: /usr/lib/libcairo.so.2: undefined symbol: FT_Get_Color_Glyph_Layer
|
FT_Get_Color_Glyph_Layer
是 freetype2 里的一个符号,只要删除 MATLAB 安装文件夹里的libfreetype.so*
,执行
1
|
rm ./bin/glnxa64/libfreetype.so*
|
或者也可以添加环境变量
1
|
LD_PRELOAD=/lib64/libfreetype.so
|
此时再执行./install
就可以成功打开 MATLAB 安装引导。
解决方案来源:ArchWiki-MATLAB
MATLAB 界面内中文无法显示
安装完成,打开 MATLAB 却发现中文乱码,所有的中文都是方块。MATLAB 的界面是用 JAVA 开发的,中文无法显示是因为 JAVA 的中文字体配置问题。
此时进入 MATLAB 的安装路径下的 jre 目录,我的 MATLAB 安装在/usr/local/MATLAB/R2022a
,进入该文件夹
1
|
cd /usr/local/MATLAB/R2022a/sys/java/jre/glnxa64/jre/lib/fonts
|
在此目录下新建fallback
文件夹
将中文字体移动到 fallback 文件夹,我使用的字体是 NotoSansCJK-Regular.ttc,想要获取改字体可以先运行sudo pacman noto-fonts-cjk
,然后在/usr/share/fonts/noto-cjk
就可找到字体文件。
1
|
sudo cp /usr/share/fonts/noto-cjk/NotoSansCJK-Regular.ttc /usr/local/MATLAB/R2022a/sys/java/jre/glnxa64/jre/lib/fonts/fallback
|
复制完字体文件后,在fallback
文件夹内,运行
此时会生成fonts.scale
,打开fonts.scale
,将其中内容复制到上级目录/usr/local/MATLAB/R2022a/sys/java/jre/glnxa64/jre/lib/fonts
中的fonts.dir
注意fonts.dir
没有可写权限,需要先授予可写权限
此时进入 MATLAB 就可以正常显示中文了。
解决方案来源:Linux 下 Matlab 的安装和中文显示支持。
如果 MATLAB 的终端无法显示中文,可以在 MATLAB 内主页-预设-字体
下的两个字体选项里选择中文字体(如果设置无法保存请参考下节)。
MATLAB 的设置无法保存
在 MATLAB 的设置界面更改设置选项,发现退出 MATLAB 后在重新打开,所有的设置会恢复默认值,这是因为 MATLAB 无法使用/tmp 文件夹。新建文件夹
1
|
mkdir ~/.cache/matlab-tmp
|
在/home/xuq/.local/share/applications
为 MATLAB 建立一个启动方式matlab.desktop
,文件内容为
1
2
3
4
5
6
7
8
|
[Desktop Entry]
Type=Application
Version=R2022b
Name=MATLAB
Comment=Scientific computing software
Icon=/home/<username>/.local/share/applications/matlab_logo.png
Exec=bash -c "export TMPDIR=/home/<username>/.cache/matlab-tmp; /usr/local/MATLAB/R2022a/bin/glnxa64/MATLAB -desktop; rm -r $TMPDIR"
Terminal=False
|
注意替换 MATLAB 可执行文件的路径,以及 MATLAB 的 Icon 路径。
解决方案来源:Why aren’t my MATLAB preferences saved on Linux?。
MATLAB 无法打开文本编辑器
在 MATLAB 中新建脚本或者打开脚本时,出现报错Unable to open this file in the current system configuration
,终端输出
1
2
3
4
5
6
7
8
9
|
Exception in thread "AWT-EventQueue-0": java.lang.NullPointerException
at com.mathworks.mde.desk.MLDesktop.updateTemplate(MLDesktop.java:3665)
at com.mathworks.mde.desk.MLDesktop.access$2000(MLDesktop.java:225)
at com.mathworks.mde.desk.MLDesktop$NewMFileAction.actionPerformed(MLDesktop.java:2853)
at com.mathworks.mwswing.ChildAction.actionPerformed(ChildAction.java:214)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
......
|
此时只需要进入 MATLAB 的安装路径,去除libfreetype.so.6
1
2
|
cd /usr/local/MATLAB/R2022a/bin/glnxa64
mv libfreetype.so.6 libfreetype.so.6.old
|
解决方案来源:MATLAB cannot create or open script files。
MATLAB 界面缩放过小
MATLAB 的界面、字体和图标在 Linux 下很小,无法随着系统缩放而改变。
以 MATLAB 界面放大 1.25 倍为例,在 MATLAB 终端输入
1
2
|
>> s = settings;s.matlab.desktop.DisplayScaleFactor
>> s.matlab.desktop.DisplayScaleFactor.PersonalValue = 1.25
|
解决方案来源:Does MATLAB support High DPI screens on Linux?。
MATLAB 无法使用 OpenGL 加速
MATLAB 绘图时终端输出
1
2
3
4
|
Warning: MATLAB previously crashed due to a low-level graphics error.
To prevent another crash in this session, MATLAB is using software OpenGL instead of using your graphics hardware.
To save this setting for future sessions, use the opengl('save', 'software') command.
For more information, see Resolving Low-Level Graphics Issues.
|
设置由于 MATLAB 无法使用 OpenGL 硬件加速,导致图形渲染能力下降,在 3D 绘图时可能出错。
进入 MATLAB 可执行文件所在的路径
1
2
|
cd /usr/local/MATLAB/R2022a/bin/glnxa64
MATLAB -nodesktop -nosplash -r "opengl info; exit" | grep Software
|
如果终端中输出的software rendering
值不是false
(0 也不行),说明此时未启用硬件加速。查看系统的 OpenGL 配置
1
|
glxinfo | grep "direct rendering"
|
如果direct rendering
的值为yes
说明配置正确,否则先要解决 OpenGL 的系统配置。如果系统的 OpenGL 配置正确,更改先前创建的 MATLAB 启动方式,在/home/xuq/.local/share/applications
打开matlab.desktop
,在 Exec 项添加 MATLAB 运行时的环境变量,将其更改为
1
|
Exec=bash -c "export TMPDIR=/home/xuq/.config/matlab-temp; export LD_PRELOAD=/usr/lib/libstdc++.so; export LD_LIBRARY_PATH=/usr/lib/dri/; /usr/local/MATLAB/R2022a/bin/glnxa64/MATLAB -desktop; rm -r $TMPDIR"
|
然后在 MATLAB 可执行文件所在的路径下新建文件
1
|
touch /usr/local/MATLAB/R2022a/bin/glnxa64/java.opts
|
在java.opts
中写入-Djogl.disable.openglarbcontext=1
。
解决方案来源:ArchWiki-MATLAB。