做Linux环境下的科研和开发这十来年,我装过的MATLAB版本两只手数不过来,从R2015b一路装到R2024a,踩坑踩到闭着眼都能背出来。前两天刚在Ubuntu 20.04上给一台新到的工作站部署MATLAB R2023b,果然又遇到一堆问题——许可证激活失败、启动闪退、OpenGL渲染崩溃、中文乱码,一个都没落下。装完之后我干脆把这次的排查过程完整梳理了一遍,想着应该能帮到正在被同一个过程折磨的人。
这篇文章适用于以下几类读者:第一次在Ubuntu上装MATLAB的新手,从Windows切换过来不知道Linux安装逻辑差异的老用户,以及需要在无图形界面的服务器上做静默部署的运维同学。我尽量把每一个坑都讲到“为什么会这样”和“具体怎么处理”,而不是简单甩一句“敲这个命令就行了”。
1. 安装前的准备工作与环境预检
1.1 为什么R2023b在Ubuntu 20.04上经常出问题
先搞清楚一个底层逻辑:MATLAB在Linux下的安装方式和Windows下差别很大。Windows版是一个setup.exe双击跑完,本质上是个标准的Windows安装程序,依赖的运行时环境基本都自带了。而Linux版是给一个光盘镜像(ISO),里面是一个自解压的安装器二进制文件install,它依赖系统里一堆X11图形库、GL库、JVM和csh等组件。
Ubuntu 20.04默认是相当“干净”的,很多运行库默认不装。而MATLAB R2023b的系统要求里明确列出了对Linux发行版的验证矩阵,但官方文档写得比较克制,不会告诉你这台机器上还缺哪个库导致装到一半就崩。于是问题就来了:不是MATLAB本身安装流程复杂,而是它和Linux系统库之间的依赖关系没处理好。
我个人的切身体会是,凡是遇到“安装器刚启动就退出”“安装过程中进度条跳一下就没了”“安装完成后bin/matlab一执行就Segmentation fault”这一类问题,八成不是MATLAB安装包损坏,而是系统缺库。所以在真正开始装之前,先把环境检查一遍,比出了错再去查日志省力得多。
1.2 磁盘空间、权限和依赖库三项预检
先看磁盘空间。R2023b完整安装大概需要25GB左右,如果还要装Simulink全系工具箱、Stateflow、自动驾驶工具箱这种大户,建议至少留出35GB以上。这个空间不仅仅是安装本身占用,安装器在工作时会在目标盘写临时文件,空间不够会直接报错。检查方式很简单:
df -h /usr/local目标安装目录我习惯放在/usr/local/MATLAB,这个目录需要root权限来写入。安装时直接用sudo运行安装器就行,不用提前chmod,它会自己处理目录权限。如果你想装在用户目录下(比如~/matlab),那就不需要sudo,但我不推荐这么干,因为后续添加桌面快捷方式、做系统级PATH软链都会麻烦一点。
然后是依赖库。下面这个命令是我在新机器上默认都会敲一遍的“基础全家桶”:
sudo apt update sudo apt install -y build-essential ca-certificates \ libxt6 libxmu6 libxpm4 libxi6 libgomp1 libselinux1 \ libglu1-mesa libgles2 mesa-utils \ xterm csh unzip zip解释一下这些包各自管什么:libxt6、libxmu6、libxpm4、libxi6是一组X11图形界面的底层库,安装器界面和MATLAB桌面本身的渲染都依赖它们;libgomp1是OpenMP运行时,R2023b里并行计算相关功能会用到;libselinux1是SELinux的运行时库,部分启动脚本会动态加载它,少了就报libselinux.so.1: cannot open shared object file;glu和mesa-utils负责OpenGL相关的支持。
还有Java运行环境。R2023b自带的MATLAB桌面基于Java 11构建,虽然安装包里捆绑了对应的JRE,但某些情况下系统会抢着用默认Java,导致启动界面卡在“初始化Java”或者按钮渲染异常。为了省心,我建议顺手装一个OpenJDK 11:
sudo apt install -y openjdk-11-jre注意别装太新的Java版本,比如Java 17或21。虽然能跑,但偶尔会遇到奇怪的类加载问题,没必要给自己找麻烦。
1.3 镜像准备与挂载方式的选择
拿到安装包通常是.iso文件,有时下载下来是压缩包需要先解压。安装方式有几种:直接解压ISO到目录再执行,或者挂载为loop设备。我个人强烈推荐挂载方式,因为ISO是只读的,防止安装过程中误改文件,而且不用额外占用一份磁盘空间(解压ISO到硬盘相当于复制了一份接近11GB的文件出来)。
挂载命令如下:
sudo mkdir -p /mnt/matlab sudo mount -o loop MATLAB_R2023b_Linux.iso /mnt/matlab这里有个小细节——mount -o loop需要root权限,但挂载完成后,普通用户是可以读取和执行里面文件的。如果你用的是无桌面环境的服务器,又想远程图形化安装,可以通过SSH X11转发或者VNC来做,不过那样网络延迟会比较影响体验。后面第4部分我会单独讲完全无GUI环境下怎么用静默安装模式,那种方式其实才是服务器部署的正解。
2. 核心安装步骤与关键参数拆解
2.1 GUI安装流程与目录选择
挂载好之后,进入镜像目录,用root权限启动安装器:
cd /mnt/matlab sudo ./install如果你的系统缺了某些图形库,安装器可能会直接打不开或者打开之后窗口一片空白。这时先退出来,回头把1.2节里的依赖包装齐,再重新启动安装器。
安装向导整体逻辑跟Windows版差不多,无非就是几步:接受许可协议、选择许可证类型、登录MathWorks账号或输入文件安装密钥(File Installation Key,简称FIK)、选择安装目录、勾选工具箱。这里我建议几个实操上的选择:
- 安装目录:默认是
/usr/local/MATLAB/R2023b,不要改到一个带空格的路径下,后续写启动脚本和软链时会很痛苦。 - 工具箱选择:不要盲目全选。很多工具箱体积巨大,而且安装时间跟工具箱数量有直接关系。如果只是做算法验证,选MATLAB本体加Simulink、Signal Processing Toolbox、Statistics and Machine Learning Toolbox、Curve Fitting Toolbox就够了;做深度学习的加上Deep Learning Toolbox和Parallel Computing Toolbox。
- 安装方式:选择“离线安装”时,安装器会要求你提供
license.lic文件,这是后续激活的关键;选择“在线安装”则需要登录MathWorks账号并联网同步许可证。
安装过程大概15到40分钟,取决于机器性能和选了多少东西。这期间最好别动机器,尤其别开大内存应用,安装器内存不够会直接崩溃。
2.2 许可证激活方式与常见误解
R2023b的许可证激活是整个安装流程里最容易卡住的一环。先理清两种主流的激活路径:
第一种是在线激活。安装时登录MathWorks账号,安装器会自动拉取你账号下绑定的许可证。这种方式适合有正式License的校园用户或商业用户,并且在安装时确保机器能访问外网。激活后,你在任何一台机器上登录同一账号,都能同步激活。优点是方便;缺点是如果你所在的内网环境禁止访问MathWorks服务器,或者代理配置有问题,会一直卡在“正在联系许可证服务器”这个提示上。
第二种是文件激活(离线)。你需要事先在账户官网的License Center里,针对自己电脑的MAC地址生成一个license.lic文件。用文件激活时,安装器会要求你把这个文件路径填进去。很多新手在这里栽跟头,是因为生成License时填的MAC地址和最终实际运行MATLAB的网卡MAC不一致。要查当前机器的MAC地址:
ip link注意,如果你的机器上有多个网卡(有线、无线、虚拟机虚拟网卡等),要以安装激活时填的那个网卡为准。而且有个坑:安装了Docker或虚拟机软件后,系统会多出docker0、vmnet8之类的虚拟网卡,有些人填License时用的是虚拟网卡的MAC,结果重启后IP变了或者服务顺序变了,MATLAB就提示许可证无效。解决办法是,在生成License时尽量选择物理网卡的MAC;如果已经生成了错误的,只能去License Center重新生成一份覆盖旧的。
另外一个很容易被忽略的细节是系统时间同步。许可证文件本身带有有效期,如果你的系统时间比实际时间快或慢了几小时(比如装完双系统之后Windows和Ubuntu的时间互相干扰),激活时会直接报“许可证过期或尚未生效”。用NTP同步一下再启动MATLAB:
sudo timedatectl set-ntp true这个时间问题在我处理过的案例里至少占了20%,务必检查。
2.3 创建启动脚本与桌面快捷方式
安装完成后,MATLAB的可执行文件在/usr/local/MATLAB/R2023b/bin/matlab。但直接敲matlab是找不到命令的,因为/usr/local/MATLAB/R2023b/bin不在系统PATH里。这里有两种做法,我推荐先做全局软链:
sudo ln -s /usr/local/MATLAB/R2023b/bin/matlab /usr/local/bin/matlab做完之后在任何目录敲matlab都能启动。注意,软链不是复制,后续升级或卸载时删除源目录后软链就失效了,记得清理。
然后是桌面快捷方式。创建~/.local/share/applications/matlab.desktop这个文件:
[Desktop Entry] Name=MATLAB R2023b Comment=MATLAB R2023b Exec=/usr/local/MATLAB/R2023b/bin/matlab -desktop Icon=/usr/local/MATLAB/R2023b/bin/glnxa64/matlab_icon.png Terminal=false Type=Application Categories=Development;Science;保存后运行update-desktop-database ~/.local/share/applications或者在GNOME里直接搜“MATLAB”就能看到图标了。如果图标不显示,多半是Icon路径写错了,检查一下matlab_icon.png的实际位置就好。
3. 安装后的高频故障与排查全记录
3.1 启动闪退与libselinux缺失
装完后第一次启动MATLAB,最经典的问题是窗口闪现一下然后整个进程退出,或者终端里看到类似这样的报错:
matlab: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory原因很简单:MATLAB启动时会调用系统里的一些共享库,但Ubuntu 20.04的桌面版默认没有装libselinux1。这个库平时看起来不起眼,很多常规软件根本不依赖它,所以不会有人预先装它。解决办法就是装依赖:
sudo apt install -y libselinux1装完再启动。类似的还有libgomp.so.1、libXt.so.6缺失等等,报错格式基本一样,缺什么就补什么,直接用apt install搜对应包名即可。如果报错提了libc.so.6之类的核心库版本问题,那多半不是缺库,而是你的系统版本太老导致的GLIBC版本不兼容——这种情况基本只能升级系统,没有太好的绕路方案。
3.2 OpenGL渲染崩溃与软件渲染切换
MATLAB R2023b的桌面和绘图窗口大量依赖OpenGL。在Ubuntu 20.04上常见两个问题:一是启动后绘图窗口一打开就闪退;二是图形界面卡成PPT,拖拽时严重撕裂。
先看看你的OpenGL状态。在MATLAB里运行:
opengl info它会输出当前使用的渲染模式、显卡型号和驱动版本。如果输出里出现的不是你的显卡厂商(NVIDIA/AMD/Intel),而是llvmpipe,说明系统没有启用硬件加速,MATLAB实际在通过CPU模拟OpenGL渲染,这时候绘图性能极差。
排查顺序是这样的:先确认显卡驱动是否装好。很多人的Ubuntu 20.04是双系统或虚拟机,NVIDIA显卡默认用的是nouveau开源驱动,性能和兼容性都一般。先查当前驱动:
nvidia-smi如果提示command not found,说明NVIDIA驱动压根没装。装驱动的方式推荐用系统自带的ubuntu-drivers:
sudo ubuntu-drivers autoinstall或者手动指定版本:
sudo apt install -y nvidia-driver-535这里有个提醒:除非你很清楚自己在做什么,不然不要从NVIDIA官网下载.run文件手动装驱动。在Ubuntu 20.04上手动装驱动非常容易踩坑,轻则需要重装系统,重则直接进不了图形界面。用apt装的驱动虽然版本可能不是最新,但和内核模块的兼容性是有保障的。
装了驱动且硬件支持没问题之后,如果MATLAB还是有渲染异常,可以强制走软件渲染来排除问题:
matlab -softwareopengl加上这个参数后,MATLAB会忽略GPU,用OpenGL软件渲染。这在比较老的工作站或者远程桌面场景下反而更稳定。但要注意,用了软件渲染,Simulink等模块的实时渲染性能会下降,如果只是画图分析还可以接受。
3.3 界面字体发虚、中文乱码或空白块
这是另一个高频问题。Ubuntu默认缺少微软雅黑、宋体这类中文字体,MATLAB的编辑器、命令行窗口如果设置了中文编码的注释或变量名,会出现方块字或乱码。而界面字体发虚,则多半是高分屏(HiDPI)下MATLAB没有正确识别缩放比例。
字体问题最直接的办法是补装中文字体:
sudo apt install -y fonts-noto-cjk fonts-wqy-microhei fonts-wqy-zenhei装完字体之后重启MATLAB。如果编辑器里中文还是乱码,检查Preferences(预设)里的语言设置和字体设置,把编辑器字体指到Noto Sans CJK SC或者WenQuanYi Micro Hei。
对于高分屏缩放,MATLAB R2023b在GNOME桌面下的缩放处理其实已经比旧版好很多,但偶尔还是会遇到工具栏图标和文字偏小的情况。解决办法是修改启动脚本的环境变量,在~/.bashrc里加上:
export MATLAB_USE_USERWORKSPACE=1这只是设置MATLAB首次启动时默认工作路径为用户目录。针对HiDPI,还有一个参数是让Qt绘制界面时强制走高DPI缩放:
export QT_AUTO_SCREEN_SCALE_FACTOR=1具体效果因桌面环境而异,建议自己试一下哪个组合最舒服。
另外,如果你通过ssh -X远程跑MATLAB,界面显示异常是X11转发的常见问题。这时字体、渲染、窗口仿伪等都会变得“很奇怪”,别花太多时间在调参数上,直接改用VNC或者NoMachine连接服务器会清爽得多。
3.4 并行计算与GPU检测不到
R2023b有个我很烦的问题:装完Parallel Computing Toolbox之后,gpuDevice经常检测不到显卡。这个问题的根源通常是MATLAB自带的CUDA和系统实际安装的显卡驱动不匹配。
查一下MATLAB识别到的CUDA版本:
gpuDevice如果提示不支持或无法初始化,先确认系统的CUDA驱动版本。nvidia-smi顶部会显示CUDA Version。R2023b对CUDA的官方支持已到12.x,如果你装了13.x的驱动,MATLAB可能不兼容。这种情况不必卸载驱动,直接在启动MATLAB之前指定一个已知兼容的CUDA库路径即可。比较省事的办法是装CUDA 11.8配套工具包:
sudo apt install -y nvidia-cuda-toolkit这会把CUDA运行时装好,然后MATLAB再跑gpuDevice大概率就正常了。如果还不行,大概率是你主板BIOS里开启了核显优先模式,导致系统默认把核显作为计算设备,MATLAB自然找不到独立显卡。这种属于硬件层面的优先级问题,需要在BIOS里把独显改成Preferred或Discrete模式,具体菜单名称因主板厂商不同有差异。
3.5 启动速度极慢与卡在Logo界面
很多新用户的机器装完R2023b,启动要等一分钟以上,卡在MATLAB的Logo界面半天不动。这个问题需要分两层看。
第一层是首次启动会做大量的Java类缓存、路径初始化、许可证校验,慢是正常的。第二次启动如果还超级慢,就要考虑是不是许可证校验时网络超时导致的。前面提到,用文件激活的License如果填的网卡信息不准确,每次启动MATLAB都会尝试向许可证服务器请求校验,在网络不可达的情况下,这个超时过程可能会拖十几秒甚至更久。排查方法很简单:启动前把网线拔了或者断网,看启动速度是否明显提升。如果是的话,说明License配置有问题,重新去License Center生成一份正确的文件。
第二层是MATLAB会加载用户目录下的一大堆路径。如果你之前在~/.matlab里配置过大量自定义搜索路径,每次启动都要扫描这些目录。可以使用pathtool把不必要的路径移掉,或者用-c参数指定一个专门的许可证文件绕开复杂校验:
matlab -c /usr/local/MATLAB/R2023b/licenses/license.lic实测这样能少几秒钟启动时间,不算很多,但在服务器上跑批量任务时会显得更干净。
4. 无图形界面服务器的静默安装方案
4.1 准备installer_input.txt与许可文件
如果你手上是一台没有显示器的服务器(比如机房里的计算节点),运行图形化安装向导不太现实。MATLAB支持完全静默安装,核心是准备一个installer_input.txt配置文件。这个文件控制整个安装过程的所有参数,模板在ISO镜像里的installer_input.txt可以参照,但建议自己新建一个,避免注释干扰。
我的配置文件通常长这样:
destinationFolder=/usr/local/MATLAB/R2023b fileInstallationKey=xxxxx-xxxxx-xxxxx-xxxxx-xxxxx agreeToLicense=yes mode=silent licensePath=/home/user/matlab_license.lic参数解释:
destinationFolder:安装目标绝对路径。fileInstallationKey:文件安装密钥(FIK)。这个在MathWorks官网的License Center里,针对你的许可证可以查到,是5组5位字符,用连字符分隔。agreeToLicense=yes:必须显式设为yes,否则静默安装会卡在同意许可协议这步。mode=silent:静默模式的核心开关。licensePath:指向license.lic文件的绝对路径。
这里要特别提醒:绝不要把mode写成silent就又加-inputFile却漏掉其它参数。配置文件的每一行都必须和实际安装需求匹配,任何一项缺失或格式错误,安装器不会给任何提示,而是直接以非零码退出。
4.2 静默安装执行与日志分析
配置文件准备好之后,执行:
cd /mnt/matlab sudo ./install -inputFile /path/to/installer_input.txt执行完看退出码。如果没有任何输出直接回到命令行,有可能是成功了,但也有可能是失败了。所以建议执行时重定向日志:
sudo ./install -inputFile /path/to/installer_input.txt -log /tmp/matlab_install.log安装完之后查看日志尾部:
tail -50 /tmp/matlab_install.log看到MATLAB installation completed successfully之类的字样才算完。如果日志里提到permission denied,检查目标目录的写权限;提到Invalid file installation key,检查FIK是否粘贴完整且没有多余空格。
还有个容易忽略的问题:静默安装用的是root权限,但安装生成的某些配置文件和启动脚本的属主会变成root。如果之后有非root用户想运行MATLAB,可能因为无法写入用户目录报错。稳妥的做法是装完后用root把/usr/local/MATLAB/R2023b下的关键配置目录权限放开,或者在服务器上统一用同一个账号运行计算任务。
4.3 无界面模式运行MATLAB脚本
在服务器上跑MATLAB,很少需要打开桌面界面,常见的用法是跑.m脚本或函数。无界面模式有两种:-nodisplay和-batch。
-nodisplay适合交互式调脚本,但依然会加载Java桌面组件,启动稍慢:
matlab -nodisplay -nosplash -r "run('myscript.m'); exit"-batch是R2019a之后推荐的模式,运行完自动退出,标准输出会打印脚本里的fprintf和disp结果:
matlab -batch "myscript"这两种模式在服务器场景下都够用。注意,-nojvm参数能进一步省内存,但很多工具箱(包括绘图函数)在纯无Java环境下不可用,除非跑的是纯数学计算,否则不建议加。
如果服务器内存有限,还可以通过-r参数限制MATLAB工作区的可用内存策略——在脚本里用maxNumCompThreads控制并行线程数,避免一个任务把整台机器的核都占满:
maxNumCompThreads(8);这在多人共享服务器时尤其重要,既不影响别人干活,也避免自己的任务被OOM杀掉。
5. 常见问题速查表与避坑建议
5.1 问题现象、原因与解决方案对照表
我把这些年遇到的Ubuntu 20.04安装MATLAB R2023b的问题做了一个速查表,方便大家遇到类似情况快速定位方向。
| 问题现象 | 常见原因 | 解决办法 |
|---|---|---|
| 安装器启动立刻退出 | 缺X11图形库 | 装libxt6 libxmu6 libxpm4 libxi6 |
安装过程报permission denied | 目标目录无写权限 | 用sudo执行安装器 |
启动报libselinux.so.1缺失 | 缺SELinux运行时 | sudo apt install libselinux1 |
启动报libgomp.so.1缺失 | 缺OpenMP运行时 | sudo apt install libgomp1 |
| 打开绘图窗口闪退 | OpenGL驱动/渲染问题 | 更新显卡驱动或matlab -softwareopengl |
| 启动卡Logo数十秒 | 许可证网络校验超时 | 确认License文件;用-c指定本地Lic |
| 激活提示许可证无效 | MAC地址不匹配或系统时间错误 | 重新生成license.lic;同步系统时间 |
| 中文注释或界面乱码 | 缺失中文字体 | sudo apt install fonts-noto-cjk |
| Simulink运行特别慢 | 使用了软件OpenGL渲染 | 修复显卡驱动后取消-softwareopengl |
gpuDevice检测不到 | CUDA版本与驱动不匹配 | 装nvidia-cuda-toolkit或升级驱动 |
| 桌面图标不显示 | 图标路径错误或desktop文件权限问题 | 核对Icon路径;chmod +x文件 |
| 窗口在高分屏下发虚 | Qt缩放策略不对 | 设置QT_AUTO_SCREEN_SCALE_FACTOR=1 |
安装日志出现GFX init failed | 服务器无显示器或无GPU | 用-nodisplay或-batch模式运行 |
这张表里的很多内容前面已经展开讲了,这里是给已经踩了坑、正在到处搜关键词的同学一个快速定位入口。
5.2 安装后的空间清理与备份建议
安装包ISO本身11GB左右,挂载安装完成后不要急着删ISO,可以先确认一遍matlab启动正常。确认无误后,卸载ISO并删除文件,能腾出不少空间:
sudo umount /mnt/matlab rm -rf MATLAB_R2023b_Linux.iso另外,安装过程中可能会在/tmp下生成临时文件(比如Java的安装过程缓存),如果安装后/tmp占用异常,可以重启清空或者手动清理。注意清理前确认没有正在运行的安装进程。
关于备份,我个人的习惯是安装完成后复制一份license.lic文件到/etc/matlab_license_backup.lic,防止之后误删用户目录导致License文件丢失。虽然可以在License Center重新下载,但生成新文件又要重新填MAC,很烦。备份一个总没错。
5.3 实用小技巧:换图标、自动打开工作目录、默认字体
最后分享几个提升日常使用体验的小技巧。首先是默认启动路径。每次打开MATLAB都停在/home/username,而你实际的工作目录可能经常是/data/project,可以在启动脚本里加个自动化处理:
alias matlab='matlab -sd /data/project'这样每次启动直接进入指定工作目录,少两次鼠标点击。
第二个技巧是修改打开新脚本时的默认字体和行宽。在~/.matlab/R2023b下有个matlab.prf文件,里面可以调编辑器的字体归属、字号、Tab宽度等。不建议手动改这个文件(容易改出问题),更推荐在MATLAB里执行savepath.slreq或者通过预设面板调整,但有经验的用户可以知道有这么一个配置文件存在,方便在重装后做批量配置。
第三个技巧是针对经常用Simulink的人。R2023b的Simulink加载速度是个老大难问题,其实可以在启动时加参数预加载Simulink,减少进入后的等待:
matlab -r "load_system('my_model');"这样打开MATLAB后模型已经在内存里,不用每次手动点击加载。小项目不明显,大型Simulink模型会让体验好很多。
6. 写在最后的一点实际体会
装MATLAB这件事,Windows上可能半小时就能搞定,Linux上折腾一整天也不稀奇。说实话,整个过程最气人的不是安装包本身有多大,而是明明按着教程一步步来了,却总是败在一些系统环境的小细节上。我踩过的最深的一个坑,是给一台双网卡服务器激活License时填了eth0的MAC,结果重启一次网卡顺序变了,MATLAB直接罢工,后来一查才知道Linux下网卡命名(eth0变成ens33)是会随内核识别顺序变化的,这个教训我记到现在。
现在我的流程已经固定下来了:先装依赖,再挂ISO,用installer_input.txt静默安装,装完立刻验证License和gpuDevice,最后快照备份系统。整个过程半小时内能完成。如果你在安装过程中遇到上面没提到的问题,先别急着重装系统,去/root/.matlab或用户目录下的java.log里翻一下详细日志,大多数线索都藏在里面。希望这篇记录能帮你少走点弯路。