MATLAB
来自 官方网站
- MATLAB 是一个编程和数值计算平台,数百万工程师和科学家使用它来分析数据、开发算法和创建模型。
安装
MATLAB 是 The MathWorks 生产的专有软件,需要许可证才能获取、安装和激活。新版本的 MATLAB 每年发布两次,版本名称由 R
、发布年份和 a
或 b
组成。
Arch Linux 不在 官方支持的发行版列表中。
必须先获得 MATLAB 软件的完整副本才能安装。 MATLAB 软件可通过 DVD 和 MathWorks 网站提供给许可证持有者。除了软件之外,还需要文件安装密钥。
可以通过 MATLAB Package Manager、matlabAUR 或直接从 MATLAB 安装软件安装 MATLAB。 推荐且最稳健的方法是使用 MATLAB Package Manager,因为它自动化了 MATLAB 和工具箱的安装。 由于标准 MATLAB 安装程序不支持 Wayland,因此如果运行 Wayland,MPM 是安装 MATLAB 的唯一方法。 请注意,MATLAB 本身将需要 xorg-xwayland。
使用 MATLAB Package Manager (MPM) 安装
MATLAB Package Manager (MPM) 提供了一种简化的方法,可以直接从命令行在 Linux 系统上安装 MATLAB 和随附的 MathWorks 产品。 此实用程序有助于以编程方式安装,而无需用户登录、文件安装密钥或预先获取的许可证文件,从而将激活和许可推迟到安装后。 MPM 允许指定 MATLAB 发行版本、其他工具箱和安装目录。 此外,它非常适合构建 MATLAB Docker 容器。 截至 2023 年,MATLAB 安装程序不支持 Wayland,这是通过命令行安装 MATLAB 的一种简便方法。
从 https://www.mathworks.com/mpm/glnxa64/mpm 下载 mpm 并使其成为可执行文件。
要将 MATLAB R2021b 与选定的工具箱一起安装到指定目录,命令例如可以是
$ ./mpm install --release=R2021b --destination=/home/username/matlab MATLAB Simulink Deep_Learning_Toolbox Parallel_Computing_Toolbox
可以在模板输入文件中找到格式正确的产品名称的完整列表。
从 MATLAB 安装软件安装
MATLAB 安装软件是独立的,不需要任何额外的软件包以静默模式安装。 要使用 GUI 安装,需要一个工作的 Xorg 图形显示。 Wayland 尚未正式支持,因此它将在 Xwayland 会话中运行。 安装由 install
脚本处理。 您可以以 root 身份运行脚本以系统范围安装 MATLAB,或者以您的用户身份运行仅为您安装。
在安装过程中,系统会询问您是否要创建符号链接。 如果您没有选择这样做,您现在可以在 /usr/local/bin
中手动创建一个符号链接,以便更轻松地在终端中启动
# ln -s /{MATLAB}/bin/matlab /usr/local/bin
或者您可以将 MATLAB 安装路径添加到 PATH
环境变量。
Failed to launch web window with error: Unable to launch the MATLABWindow application.
,请参阅 #无法启动 MATLABWindow 应用程序 以获取解决方法。桌面条目
可以选择创建桌面条目。 MATLAB 文件的 MIME 类型是 text/x-matlab
。
使用以下命令启动 matlab
-desktop
在没有终端的情况下运行 Matlab。-nosplash
阻止显示启动画面。-useStartupFolderPref
使用 初始工作文件夹 首选项指定的文件夹 [1]
为了使图标正确显示,需要在桌面条目中设置 StartupWMClass
。 要找出它,请启动 MATLAB,运行 xprop | grep WM_CLASS
并选择 MATLAB 窗口。
桌面条目示例
/usr/share/applications/matlab.desktop
[Desktop Entry] Type=Application Terminal=false MimeType=text/x-matlab Exec=/usr/local/MATLAB/R20xyz/bin/matlab -desktop -useStartupFolderPref Name=MATLAB Icon=matlab Categories=Development;Math;Science Comment=Scientific computing environment StartupNotify=true
如果需要设置环境变量,可以在 Exec
中预先添加 env
,例如,用于系统的 libfreetype
Exec=env LD_PRELOAD=/usr/lib/libfreetype.so.6 matlab
可能需要使用系统的 libstdc++
。
在 Wayland 上运行
要使 MATLAB 在 Wayland 上运行,请设置环境变量 QT_QPA_PLATFORM=xcb
。
从 AUR 软件包安装
matlabAUR 软件包旨在允许 MATLAB 集成到 Arch 并由 Arch 管理。 matlabAUR 软件包的优点是它可以管理依赖项和安装过程中的一些细微之处。 但是请注意,该软件包不包含安装文件,您需要自行将其放置在克隆的软件包文件夹中。 使用 AUR 助手构建软件包可能会有问题,因此您需要手动执行此操作。 您可以使用来自 MathWorks 网站的安装程序获取实际的 MATLAB 软件。
- 克隆 matlabAUR 软件包并
cd
进入它。 - 从 MathWorks 下载包含 MATLAB 安装程序的 zip 文件到当前目录。
- 使用以下命令运行解压后的安装程序
$ ./matlab/install
- 安装程序让您选择立即安装软件或仅下载选定的模块。 选择第二个选项。 此选项也可能位于“高级选项”下拉菜单下。
- 安装程序将为您提供更改下载路径的选项。 您可能希望将其更改为临时路径(例如,如果您有足够大的内存盘,则为
/tmp
),因为您很快会将内容移动到不同的位置。 - 等待下载完成并关闭安装程序。 将下载的存档合并到解压后的
matlab
子目录中
$ rsync -a /selected/download/folder/YYYY_MM_DD_HH_MM_SS/ matlab
- 然后将目录打包到 tarball 中
$ tar -cvf matlab.tar matlab
- 下载您的许可证:转到 您的 MathWorks 帐户,然后单击您要使用的许可证号。 然后,转到安装和激活选项卡,然后选择激活以检索许可证文件。 按照说明下载安装所需的许可证文件。 将文件命名为
matlab.lic
并将其放在 AUR 软件包目录中。 MathWorks 网站上还将显示文件安装密钥 (FIK)。 将其复制粘贴到名为matlab.fik
的新文件中,并将其与PKGBUILD
放在一起,就像您对matlab.lic
所做的那样。 - 现在,您将创建一个 pacman 软件包。 您可以通过修改
PKGBUILD
来自定义您希望软件包包含的模块,或者将其保留为默认值
PKGBUILD
... # Limit products to lower size, set this to true to do a partial install partialinstall=false # Example list of products for a partial install; check README.md for details products=( "MATLAB" #---MATLAB Product Family---# "Curve_Fitting_Toolbox" # Math and Optimization "Database_Toolbox" # Database Access and Reporting "Deep_Learning_HDL_Toolbox" "Deep_Learning_Toolbox" "DSP_System_Toolbox" "Global_Optimization_Toolbox" "GPU_Coder" "MATLAB_Coder" # Code Generation "MATLAB_Compiler" # Application Deployement "MATLAB_Compiler_SDK" "Optimization_Toolbox" "Parallel_Computing_Toolbox" # Parallel computing "Partial_Differential_Equation_Toolbox" "Reinforcement_Learning_Toolbox" "Statistics_and_Machine_Learning_Toolbox" # AI, Data Science, Statistics "Symbolic_Math_Toolbox" "Text_Analytics_Toolbox" #---Application Products---# "Audio_Toolbox" "Bioinformatics_Toolbox" # Computational Biology "Computer_Vision_Toolbox" "Image_Processing_Toolbox" # Image Processing and Computer Vision "Signal_Processing_Toolbox" # Signal Processing "Wavelet_Toolbox" ) ...
- 最后,使用
makepkg
命令构建和安装软件包
$ makepkg -sri
配置
Java
MATLAB 软件捆绑了 JVM,因此无需安装 Java。 MATLAB 支持的 JVM 版本在 系统要求和平台可用性 中列出,或者只需在 MATLAB 中键入 version -java
即可。 可以设置 MATLAB_JAVA
环境变量以使用自定义 JVM,例如,要指定 jre8-openjdk JRE,请使用以下命令启动 MATLAB
$ env MATLAB_JAVA=/usr/lib/jvm/java-8-openjdk/jre matlab
OpenGL 加速
MATLAB 可以利用基于硬件的 2D 和 3D OpenGL 加速。 对硬件加速的支持需要在 MATLAB 之外进行配置。 需要安装适当的视频驱动程序以及 OpenGL 实用程序库 glu 软件包。 如果正在使用 X11 转发,则需要在客户端和服务器上都安装视频驱动程序。 要检查 MATLAB 是否正在使用基于硬件的 OpenGL 加速,请运行
$ matlab -nodesktop -nosplash -r "opengl info; exit" | grep Software
如果“软件渲染”不是“false”,则说明您的硬件加速存在问题。 如果是这种情况,请确保系统上 OpenGL 配置正确。 这可以使用 glxinfo
程序来完成,该程序来自 mesa-utils 软件包。
$ glxinfo | grep "direct rendering"
如果“直接渲染”不是“yes”,则很可能您的系统配置存在问题。
如果 glxinfo 工作正常,但 MATLAB 不行,您可以尝试运行
$ export LD_PRELOAD=/usr/lib/libstdc++.so; export LD_LIBRARY_PATH=/usr/lib/xorg/modules/dri/; matlab -nodesktop -nosplash -r "opengl info; exit" | grep Software
如果它工作正常,您可以编辑 MATLAB 启动器脚本以添加
export LD_PRELOAD=/usr/lib/libstdc++.so export LD_LIBRARY_PATH=/usr/lib/dri/
在进行这些更改后,您可能会在 MATLAB 控制台中看到低级图形错误,例如
com.jogamp.opengl.GLException: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice[type .x11, connection :0, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x76ddc7cd, isOwner false, <6876ff80, 5d5c50dc>[count 0, qsz 0, owner <NULL>]]] at jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:326) at jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:297) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NullPointerException at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:688) at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:580) at jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:297) ... 2 more
在这种情况下,在 MATLAB 执行的目录中(例如 /usr/local/MATLAB/R2020a/bin/glnxa64
)创建一个名为 'java.opts' 的文件,并包含以下行
java.opts
-Djogl.disable.openglarbcontext=1
声音
要确认 MATLAB 能够使用默认声卡播放声音,请运行
$ matlab -nodesktop -nosplash -r "load handel; sound(y, Fs); pause(length(y)/Fs); exit" > /dev/null
这应该播放亨德尔《哈利路亚合唱》的片段。 如果失败,请确保 ALSA 配置正确。 这可以使用 speaker-test
程序来完成,该程序来自 alsa-utils 软件包。
$ speaker-test
如果您听不到任何声音,则很可能您的系统配置存在问题。
GPU 计算
MATLAB 可以利用支持 CUDA 的 GPU 来加速应用程序。 为了利用受支持的 GPU,请安装 nvidia、nvidia-utils、ocl-icd、opencl-nvidia 和 cuda 软件包。 要检查 MATLAB 是否能够利用 GPU,请运行
$ matlab -nodesktop -nosplash -r "x=rand(10, 'single'); g=gpuArray(x); Success=isequal(gather(g), x), exit" | sed -ne '/Success =/,$p'
安装受支持的编译器
为了访问 MATLAB 的完整功能(例如,使用 Simulink、Builder JA 和 MEX 文件编译),必须安装受支持版本的 gcc
、g++
、gfortran
和 jdk
编译器。 有关 当前版本 和 以前版本 支持的编译器的详细信息,请在线查看。 过去 MATLAB 版本的许多受支持的 gcc
、g++
、jdk
编译器版本都可以在 AUR 中找到(例如,gcc43AUR、gcc44AUR、gcc47AUR、gcc49AUR 和 jdk7AUR),而过去版本的 gfortran
编译器未打包。
要将以前版本的 gcc
、g++
和 gfortran
编译器与 MEX 文件一起使用,请编辑 ${MATLAB}/bin/mexopts.sh
,并将所有出现的 CC='gcc'
替换为 CC='gcc-4.X'
,CXX='g++'
替换为 CXX='g++-4.X'
,FC='gfortran'
替换为 FC='gfortran-4.X'
,其中 X
是适合特定 MATLAB 版本的编译器版本。
- 较新版本的 MATLAB(至少 2017a)似乎不遵循
${MATLAB}/bin/mexopts.sh
自定义。 而是使用${MATLAB}/bin/glnxa64/mexopts/LANG_glnxa64.xml
文件。 - 虽然这并非官方支持,但仍然可以使用更高版本的编译器,并忽略警告。
帮助浏览器
帮助浏览器在动态线程向量中使用宝贵的插槽,并与 BLAS 等库提供的核心功能竞争,这些库也依赖于动态线程向量。 可以配置帮助浏览器以使用更少的动态线程向量插槽,使用命令
>> webutils.htmlrenderer('basic');
这是一个持久性更改,要撤消它,请使用
>> webutils.htmlrenderer('default');
串口访问
为了成功连接到任何串口,MATLAB 期望直接写入 /var/lock
,这在 Arch Linux 上出于安全原因是不允许的。 您可以不只为 MATLAB 允许此访问,而是通过使用 lockdev-redirectAUR 重定向设备锁定来解决此问题。 您只需像这样执行 MATLAB
# lockdev-redirect /{MATLAB}/bin/matlab
如果您已创建 .desktop 文件作为 MATLAB 的快捷方式,则将 “lockdev-redirect” 作为前缀添加到您的 “Exec=” 条目中。
HiDPI 和 4k
请参阅 HiDPI#MATLAB。
故障排除
警告:初始化 MATLAB 图形失败
此错误似乎发生在多显示器设置中,请参阅 此论坛帖子。
在 MATLAB 可执行文件所在的文件夹中创建一个 java.opts 文件
java.opts
-Djogl.disable.openglarbcontext=1
或查看 此论坛帖子 以获取其他解决方案
或禁用硬件加速
>> opengl('save','software')
帮助浏览器和 Live Script 中出现黑屏
为了使用帮助浏览器和 Live Script,请安装 libselinuxAUR。
静态 TLS 错误
MATLAB 有许多库已使用静态线程本地存储 (TLS) 编译,包括帮助浏览器 doc
和 BLAS 库。 例如,
>> doc('help'); >> ones(10)*randn(10); Error using * BLAS loading error: dlopen: cannot load any more object with static TLS
与以下错误有关
还建议了重新编译 glibc
的更通用的解决方案。 [2]
当使用 WM(非重父窗口管理器)时,UI 为空白/灰色
请参阅 Java#灰色窗口、应用程序无法随 WM 调整大小、菜单立即关闭。
如果您注意到菜单或输入字段已损坏或未正确显示,您可以尝试在 MATLAB 首选项中激活“使用抗锯齿平滑桌面字体”选项,这似乎可以解决问题。 转到“首选项” > “Matlab” > “字体”并激活它。 您需要重启 MATLAB 才能生效。
缺少安装依赖项
MATLAB 可能会抱怨找不到软件包。 查看软件包名称并使用 Pacman 安装它,或者在 x86_64 的情况下,某些库仅在 AUR 中。 matlabAUR 包含最新 MATLAB 版本的最新依赖项列表。
另请参阅 #无法启动 MATLABWindow 应用程序。
安装错误:archive 不是 ZIP 归档文件
在安装过程中,您可能会遇到
The following error was detected while installing package_name: archive is not a ZIP archive Would you like to retry installing package_name? If you press No, the installer will exit without completing the installation. More information can be found at /tmp/mathworks_root.log
MATLAB 将所有软件包下载到 /tmp/
目录,该目录位于 RAM 中,最大大小为可用内存的一半。 在这种情况下,这对于安装文件来说是不够的,MATLAB 2019a 安装程序会警告您。 如果它没有警告,或者您忽略了警告,您将收到上述错误。
您可以调整 tmpfs 的大小(3.5 GB 不够,6 GB 可以),或者从基本安装中删除软件包,稍后使用内置的 MATLAB 附加组件安装程序添加它们。
安装时库错误
- 确保符号链接
bin/glnx64/libstdc++.so.6
指向正确版本的libstdc++.so.xx
(它也位于同一目录中,并且 'xx' 是数字)。 默认情况下,它可能指向较旧(且不存在)的版本('xx' 的值不同)。
- 确保从中安装的设备未挂载为
noexec
- 如果您从 MathWorks 网站下载了文件,请确保它们不在 NTFS 或 FAT 分区上,因为这会搞乱符号链接。 Ext4 或 Ext3 应该可以正常工作。
在使用 Intel 显卡进行渲染或退出时挂起
一些用户报告了在 Intel 显卡芯片上启用 DRI3 时出现的问题。 一种可能的解决方法是禁用 DRI3 并使用 DRI2 上的硬件渲染运行 MATLAB; 为此,请启动 MATLAB 并将环境变量 LIBGL_DRI3_DISABLE 设置为 1
LIBGL_DRI3_DISABLE=1 /{MATLAB}/bin/matlab
如果之前的解决方法不起作用,可以通过使用 MATLAB 命令选择软件渲染来规避此问题(注意,在执行大型或复杂的 3D 绘图时,性能可能非常差)
opengl('save','software')
Live Script 错误
如果您在尝试加载或创建 Live Script 时遇到错误
Viewing matlab live script files is not currently supported by this operating system configuration
- 这可能是由于系统更新后 libgcrypt 和其他依赖项的符号链接损坏造成的。 在 Live Editor 首次启动时,组件会被提取,并创建这些库符号链接(如果不存在)。
- 一种解决方案是简单地删除包含损坏的符号链接和提取的组件的整个文件夹,该文件夹位于安装目录中
matlab_root/sys/jxbrowser-chromium
- 或者,如果安装目录不可由用户写入,则在
~/.matlab/R2017b/HtmlPanel
- MATLAB 将在下次启动 Live Editor 时重新生成内容。
- 更好的选择是将此提取目录中的 libgcrypt 符号链接替换为不太精确的链接。 例如,提取后,将创建指向 /lib64/libgcrypt.so.20.2.4 的链接。 将其替换为例如 /lib64/libgcrypt.so.20。
- MATLAB R2020 不再包含 chromium 目录。 将库文件 libcrypto.so.1.1 与系统文件重新链接可以解决此问题。 它位于
matlab_root/bin/glnxa64
- 此外,#无法启动 MATLABWindow 应用程序 中的步骤可能解决此问题。
- 这也可能是由于缺少 gconf 软件包引起的。 确保已安装 gconfAUR。
- 如果以上方法均无效,请在命令窗口中执行
>> com.mathworks.mde.liveeditor.widget.rtc.CachedLightweightBrowserFactory.createLightweightBrowser()
以获取更详细的错误消息。
- 可以使用以下命令打开调试控制台
>> com.mathworks.mde.webbrowser.HtmlPanelDebugConsole.invoke;
使用摄像头/视频设备
确保安装了正确的支持软件包附加组件(例如,摄像头或 OS Generic Video Interface)。 如果以用户身份运行 MATLAB,请确保您的用户对支持软件包下载和安装的任何位置具有写入权限。
自 MATLAB R2017a 起,Image Acquisition Toolbox 正在使用 GStreamer 库版本 1.0。 之前使用的是 0.10 版本。
通常,USB 摄像头支持软件包在处理 UVC 和内置摄像头方面比 OS Generic Video Interface 支持软件包做得更好。
关闭帮助浏览器时 MATLAB 挂起几分钟
自 glibc 从 2.24 升级到 2.25 以来,MATLAB(至少 R2017a)在关闭帮助浏览器时会挂起。 该问题与 MATLAB 附带的特定版本的 jxbrowser-chromium 有关。 此问题仍然存在于 glibc 2.26 和 MATLAB R2017b 和 R2018a 中。
要解决此问题,请下载最新的 jxbrowser 并替换 MATLAB 中的以下 jar 文件
matlab_root/java/jarext/jxbrowser-chromium/jxbrowser-chromium.jar matlab_root/java/jarext/jxbrowser-chromium/jxbrowser-linux64.jar
MATLAB 应该在首次打开帮助浏览器时自动将这些 jar 文件解压缩到 matlab_root/sys/jxbrowser-chromium/glnxa64/chromium
中。 删除 matlab_root/sys/jxbrowser-chromium/glnxa64/chromium
目录以确保 MATLAB 使用最新的 jxbrowser。
遗憾的是,此解决方法在 R2017b 中不再有效。 深入研究此问题,它与 jxbrowser-chromium 进程之一的崩溃有关。 jxbrowser-chromium 的父进程随后停留在那里并等待来自已死亡进程的响应。 这导致 MATLAB 主窗口冻结。 您可以通过手动杀死所有剩余的 jxbrowser-chromium 进程来轻松解冻 MATLAB。
我编写了这个简单的脚本,它使用 inotify 并等待用户关闭 MATLAB 中的帮助浏览器。 当用户关闭帮助浏览器时,它会触发并向所有剩余的 jxbrowser-chromium 进程发送 kill 信号
#!/bin/sh if [ -z "$1" ]; then REL=R2017b else REL=$1 fi JXPATH="/path/to/MATLAB/$REL/sys/jxbrowser-chromium/glnxa64/chromium" CMD="inotifywait -m -e CLOSE $JXPATH/resources.pak" #Exit if the daemon is already active if ! pgrep -f "$CMD" > /dev/null; then #Wait for user to close Help Browser, then killall leftover jxbrowser processes $CMD | while read line do killall "$JXPATH/jxbrowser-chromium" done else exit fi
我像这样在我的 MATLAB 启动脚本中运行此脚本
~/bin/unfreeze_matlab.sh R2017b &
为了确保在我退出 MATLAB 时杀死此后台作业,我在 MATLAB 启动脚本的开头使用此命令
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
在某些界面中 - 例如 Simulation Data Inspector 或 Simulink Test Manager - 在下拉菜单中选择项目时不会发生任何事情(例如,尝试更改 Simulation Data Inspector 中的子图数量时)。 要解决此问题,请在单击下拉菜单中的项目时按住 Shift 键。
无法启动 - 许可错误
如果 MATLAB 无法从 桌面环境 通过调用其 桌面文件 启动,则应看到从终端启动时的输出。
对于如下许可错误
# matlab
MATLAB is selecting SOFTWARE OPENGL rendering. License checkout failed. License Manager Error -9 This error may occur when: -The hostid of this computer does not match the hostid in the license file. -A Designated Computer installation is in use by another user. If no other user is currently running MATLAB, you may need to activate. Troubleshoot this issue by visiting: https://www.mathworks.com/support/lme/R2017a/9 Diagnostic Information: Feature: MATLAB License path: /home/<USER>/.matlab/R2017a_licenses/license_<NUM>_R2017a.lic:/home/<USER>/.matlab/R2017a_licenses/lice nse_Darkness_<NUM>_R2017a.lic:/opt/MATLAB/R2017a/licenses/license.dat:/opt/MATLAB/R2017a/licenses/* .lic Licensing error: -9,57.
重新激活可能会解决问题。
/usr/local/MATLAB/R2017a/bin/activate_matlab.sh -javadir /usr/lib/jvm/java-8-openjdk/jre/
MATLAB 启动时崩溃,并显示“加载桌面类失败”
如果 MATLAB 无法启动,并且从命令行启动时出现以下错误
$ matlab
Fatal Internal Error: Internal Error: Failure occurs during desktop startup. Details: Failure loading desktop class.
并且您的 _JAVA_OPTIONS
环境变量中设置了选项 -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel,请使用以下命令启动 MATLAB
$ _JAVA_OPTIONS= matlab
如果这有效,请添加以下行
export _JAVA_OPTIONS=
到您的 MATLAB 启动器脚本。 可选地,重新添加其他 Java 选项。
无法在基于 MATLABWindow 的界面的文本字段中输入内容
自 R2018a 版本起,基于 MATLABWindow 的界面(如 Signal Editor、Add-Ons Explorer 等)中无法输入文本。MATLABWindow 和 MATLAB 的 webwindow 基础设施基于 Chromium Embedded Framework,这似乎是一个已知且长期存在的错误:https://bitbucket.org/chromiumembedded/cef/issues/2026/multiple-major-keyboard-focus-issues-on
一种可能的解决方法是将焦点从 MATLABWindow 切换到另一个窗口,然后再切换回来 - 这样您就可以输入了。
为了更详细地说明此解决方法(因为 R2018b 中问题仍然存在),以下是我在 Openbox 配置中所做的操作(请注意,默认配置中已存在 A-Middle 键绑定)
<mousebind button="A-Middle" action="Press"> <action name="Unfocus"/> <action name="Focus"/> </mousebind>
现在,每当无法在文本字段中输入内容时,我按下 Alt+鼠标中键,然后就可以再次输入了。
此问题在安装期间至关重要。在安装窗口中单击某些元素后,用户将无法再在任何文本框中输入内容,并且窗口之间的切换并不总是有效。为了规避此问题,在安装期间应仅使用按键,而不是鼠标单击。MATLAB 安装程序对 Wayland 的支持较差,您也可以考虑在安装期间使用其他 WM。
无法启动 MATLABWindow 应用程序
在 MATLAB R2018b 到 R2022b 版本中,安装程序崩溃,如下所示
$ ./install
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] 1409378 IOT instruction (core dumped) ./install
要找出 MATLABWindow
崩溃的原因,请手动运行它以获取详细信息。
$ ./bin/glnxa64/MATLABWindow
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 应用程序和 Arch Linux 软件包之间存在库不兼容性。[5]
要解决此问题,请将 MATLAB 的 libfreetype.so*
放在一边。
$ rm ./bin/glnxa64/libfreetype.so*
您还可以使用 LD_PRELOAD
环境变量来强制 MATLAB 使用 Arch Linux 的 libfreetype,而无需删除 lib 文件。
$ export LD_PRELOAD=/lib64/libfreetype.so $ ./install
同样,如果错误是由 undefined symbol: g_log_structured...
引起的,请将 MATLAB 的 libglib-2.0.so*
放在一边。如果错误是由 path to/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by _somelibrary_)
引起的,请将 MATLAB 的 libstdc++.so.6
放在一边。
安装期间无法验证大学登录
对于总人数许可证用户,MATLAB 将弹出一个窗口,要求用户在 Web 浏览器中使用其凭据登录。但是,如果以 sudo
运行,大多数浏览器(尤其是 chromium)将无法运行。为了规避此问题,应由普通用户通过浏览器使用 MATLAB 网站“激活计算机”。请参阅此问题
缺少 libcrypt.so.1
如果在启动或安装 MATLAB(R2020a 及更高版本)时遇到此错误,请安装 libxcrypt-compat。
以 root 身份运行安装程序不会启动 GUI
如果您以 root 身份运行安装程序,但 GUI 没有出现(但在不以 root 身份启动的情况下出现),请尝试临时允许 root 用户访问 X 服务器,方法是按顺序运行以下命令(其中 ./install
是以 root 身份运行安装程序的命令)
$ xhost +SI:localuser:root # ./install $ xhost -SI:localuser:root
请注意,最后一个命令应在完成安装过程后执行,并且 localuser
是一个字符串字面量。请参阅 此支持解答 和 xhost(1)。
此外,请验证是否已设置 DISPLAY
环境变量。
另一种方法是以本地用户身份安装 MATLAB。
以用户身份安装时,GUI 安装程序无法创建目标文件夹
手动创建文件夹(以 root 身份),并取得所有权。路径通常为 /usr/local/MATLAB
# mkdir -p /path/to/MATLAB/R20XXx # chown -R $LOGNAME: /path/to/MATLAB/R20XXx
打开 Simulink 时 MATLAB 崩溃
从终端运行时,错误消息为
Inconsistency detected by ld.so: ../elf/dl-tls.c: 597: _dl_allocate_tls_init: Assertion `listp != NULL' failed!
请在此处查看上游错误报告:https://www.mathworks.com/support/bugreports/details/2632298
MATLAB 无法打开或创建脚本文件
调用 mex 失败
如果从 MATLAB 或 Simulink 对 mex 的调用(例如,快速加速器)失败,并出现错误 *.mexa64 is not a MEX file
,即使生成的文件是可用的,也可能有助于编辑 在
matlab/bin/
或 ~/.matlab7rc.sh
中,方法是将 LDPATH_PREFIX
变量从其空的默认值更改为:[6]
matlab/bin/.matlab7rc.sh (or ~/.matlab7rc.sh)
... case "$ARCH" in glnx*) # Make sure you are modifying case glnx* AUTOMOUNT_MAP='' DISPLAY="$DISPLAY" ARCH="$ARCH" TOOLBOX="$TOOLBOX" MATLABPATH="$MATLABPATH" SHELL="$SHELL" LDPATH_PREFIX='/usr/lib' ...
与某些使用 MKL 的 python 库不兼容
在 matlab 中运行的某些 python 代码可能会失败,并出现提到 Parameter * was incorrect on entry to
的错误。可以通过调用
py.sys.setdlopenflags(int32(bitor(int64(py.os.RTLD_NOW), int64(py.os.RTLD_DEEPBIND))));
或
py.sys.setdlopenflags(int32(bitor(int64(py.os.RTLD_LAZY), int64(py.os.RTLD_DEEPBIND))));
在任何调用 py
之前和调用 pyenv
之后直接调用来避免这种情况。请参阅 此支持解答。
设置在 MATLAB 重启之间无法持久保存
在最近的 Arch 系统上的某些情况下,matlab 无法导出 .mlsettings
文件,从而阻止工具箱和某些 matlab 设置保存到磁盘并持久保存。这些情况来自 matlab 尝试将新文件从 /tmp
硬链接到首选项目录(通常为 ~/.matlab/release
,其中 release
是 matlab 版本,例如 R2021b
)。作为一种解决方法,请在设置 $TMPDIR
环境变量为与首选项目录位于同一文件系统上的文件夹的情况下运行 matlab。[7]
“无法在当前系统配置中打开此文件”
可以通过将 matlab_root/bin/glnxa64/
中的 libfreetype.so.6
放在一边来修复此错误。您可以运行以下命令
cd matlab_root/bin/glnxa64/ mv libfreetype.so.6 libfreetype.so.6.old
可以通过安装 noto-fonts 来解决此问题。
Xwayland 上的空白屏幕
如 Wayland#Java 中建议的那样,可以通过在 Matlab 启动器脚本中添加
export _JAVA_AWT_WM_NONREPARENTING=1
桌面错误,文本未渲染
启动 MATLAB 时,您会收到一个错误对话框,其中包含“desktop error”消息,并且文本未渲染。错误日志如下所示
ERROR
Crash report: Ajava.lang.ExceptionInInitializerError at com.mathworks.mde.cmdwin.CmdWin.<init>(CmdWin.java:111) at com.mathworks.mde.cmdwin.CmdWin.<clinit>(CmdWin.java:107) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.mathworks.jmi.ClassLoaderManager.loadClass(ClassLoaderManager.java:442) at com.mathworks.jmi.ClassLoaderManager.findClass(ClassLoaderManager.java:422) at com.mathworks.jmi.Matlab$2.findClass(Matlab.java:517) at com.mathworks.util.ClassLoaderBridge.findClass(ClassLoaderBridge.java:23) at com.mathworks.widgets.desk.DTClient.createComponent(DTClient.java:275) at com.mathworks.widgets.desk.Desktop.createClientComponent(Desktop.java:6468) at com.mathworks.mde.desk.MLDesktop.createClientComponent(MLDesktop.java:1040) at com.mathworks.widgets.desk.Desktop.createClientComponentWrapper(Desktop.java:6482) at com.mathworks.widgets.desk.Desktop.setClientShowing(Desktop.java:7181) at com.mathworks.widgets.desk.Desktop.setClientShowing(Desktop.java:7168) at com.mathworks.widgets.desk.DTNestingContainer$ViewState.restore(DTNestingContainer.java:2910) at com.mathworks.widgets.desk.DTNestingContainer$SplitState.restore(DTNestingContainer.java:2536) at com.mathworks.widgets.desk.DTNestingContainer$SplitState.restore(DTNestingContainer.java:2537) at com.mathworks.widgets.desk.DTNestingContainer$RootState.restore(DTNestingContainer.java:2422) at com.mathworks.widgets.desk.DTNestingContainer$RootState.restore(DTNestingContainer.java:2417) at com.mathworks.widgets.desk.DTNestingContainer.restoreState(DTNestingContainer.java:2291) at com.mathworks.widgets.desk.DTMultipleClientFrame.restoreState(DTMultipleClientFrame.java:2791) at com.mathworks.widgets.desk.Desktop.restoreLayout(Desktop.java:5947) at com.mathworks.mde.desk.MLDesktop.restoreLayout(MLDesktop.java:1652) at com.mathworks.widgets.desk.Desktop.restoreLayout(Desktop.java:5706) at com.mathworks.mde.desk.MLDesktop.setDefaultDesktop(MLDesktop.java:1539) at com.mathworks.widgets.desk.Desktop.initMainFrame(Desktop.java:296) at com.mathworks.mde.desk.MLDesktop.initMainFrameFromThread(MLDesktop.java:844) at com.mathworks.mde.desk.MLDesktop.access$600(MLDesktop.java:224) at com.mathworks.mde.desk.MLDesktop$Initializer.run(MLDesktop.java:1215) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: java.lang.ArithmeticException: / by zero at com.mathworks.mde.cmdwin.XCmdWndView.getPotentialColumns(XCmdWndView.java:1072) at com.mathworks.mde.cmdwin.XCmdWndView.setCWFont(XCmdWndView.java:1651) at com.mathworks.mde.cmdwin.XCmdWndView.initPrefs(XCmdWndView.java:907) at com.mathworks.mde.cmdwin.XCmdWndView.<init>(XCmdWndView.java:401) at com.mathworks.mde.cmdwin.XCmdWndView.<clinit>(XCmdWndView.java:329) ... 43 more
此错误与缺少字体有关,可以通过从 AUR 安装 ttf-ms-fonts 软件包来修复
KDE 深色主题上的 Simulink 具有不合适的配色方案
当运行 Simulink 模块时,工作区窗口可能会渲染一些深色边框,导致在某些情况下角落中的文本和图标完全不可见。根据 潜在的解决方案,可以通过使用以下内容设置 XDG_CURRENT_DESKTOP
和 GTK_THEME
环境变量来修复它
export XDG_CURRENT_DESKTOP=GNOME export GTK_THEME=Adwaita:light
终端中的 canberra 消息
从终端启动 matlab 时,可能会收到如下行
Gtk-Message: 20:01:53.344: Failed to load module "canberra-gtk-module"
根据 [8],可以通过设置环境变量 GTK_PATH
来修复此问题。当然,需要安装 gtk2 和 libcanberra 软件包。
env GTK_PATH=/usr/lib/gtk-2.0
MATLAB R2024b 或更早版本中的可执行堆栈错误
最近发布的 glibc 2.41 也导致了 MATLAB 的问题。MATLAB 将抛出一个类似于以下的错误
$ bin/matlab
Command `service` threw an exception Error loading /home/user/.MathWorks/ServiceHost/-mw_shared_installs/$version/bin/glnxa64/mathworksservicehost/rcf/matlabconnector/serviceprocess/rcf/service/libmwmshrcfservice.so. libmwfoundation_crash_handling.so: cannot enable executable stack as shared object requires: Invalid argument: Success: Success
更严格的安全设置现在要求为 libmwfoundation_crash_handling.so
共享对象文件禁用可执行堆栈权限。这可以使用 execstackAUR 完成。
$ execstack -c ~/.MathWorks/ServiceHost/-mw_shared_installs/$version/bin/glnxa64/libmwfoundation_crash_handling.so
systemd-nspawn 中的 MATLAB
MATLAB 可以在 systemd-nspawn 容器中运行,以维护静态系统并避免在 Arch 中的库进行重大更新后经常困扰 matlab 安装的库问题。有关设置此类容器的详细信息,请参阅 Systemd-nspawn。
以下说明是在最小的 Debian 11 环境中运行 MATLAB R2021b 安装。它假设 MATLAB 已在 “/usr/local/MATLAB/R2021b” 中正常安装。
使用 Xhost 允许 nspawn 环境使用现有的 X 服务器实例,另请参阅 Systemd-nspawn#使用_X_环境。
在目录(此处为 “deb11”)中创建一个最小的 Debian 环境,使用
$ debootstrap --include=systemd-container --components=main,contrib bullseye deb11
为 root 用户设置密码并创建常规用户
$ systemd-nspawn -D deb11 passwd useradd -m username logout
然后使用以下命令启动环境
$ systemd-nspawn --bind-ro=/dev/dri --bind-ro=/tmp/.X11-unix --bind=/dev/shm --bind=/usr/local/MATLAB --setenv=DISPLAY=:0 --setenv=MESA_LOADER_DRIVER_OVERRIDE=i965 -b -D deb11
安装以下软件包,以便在 nspawn 环境中拥有 MATLAB 所需的库:https://github.com/mathworks-ref-arch/container-images/blob/master/matlab-deps/r2021b/ubuntu20.04/Dockerfile
需要安装 “mesa-utils” 和依赖项以支持图形加速。“usbutils” 可以安装以支持与 MATLAB 进行 I/O 的 usb 接口。
在环境中安装 matlab-support(来自 contrib 源)软件包以进行一些方便的集成。
$ apt-get install matlab-support
MATLAB 可以通过使用 matlab_root/bin
中的二进制文件从环境中正常启动。
另一种方法是在上面的 systemd-nspawn 命令中添加类似这样的内容
-u username -a /usr/local/MATLAB/R2021b/bin/matlab -nosoftwareopengl -useStartupFolderPref
至 systemd-nspawn 命令之上。