我正在尝试在 Ubuntu 12.04 中安装用于 Unity 的 Matlab R2011a 启动器。我试过本指南(虽然我知道它适用于 11.10 并提到即使 11.10 也是不受 Matlab R2011a 支持的操作系统)但没有任何令人满意的解决方案。
这是我的启动器文件/usr/share/applications/matlab.desktop
:
#!/usr/bin/env xdg-open
[Desktop Entry]
Type=Application
Icon=/usr/share/icons/matlab.png
Name=MATLAB R2011a
Comment=Start MATLAB - The Language of Technical Computing
Exec=matlab -desktop
Categories=Development;
我打开仪表板并搜索“matlab”。在应用程序中找到了此启动器。我单击它,Matlab 的启动画面出现,但当它消失时,程序不会启动。(我已经验证过,htop
后台也没有运行任何 matlab 进程。)
如果我添加
Terminal=true
到启动器文件,程序启动正常,并打开终端和 Matlab。但是,终端和 Matlab 本身都显示在启动器区域中,带有 Matlab 图标,所以看起来我有二Matlab 实例正在运行,但实际上只有一个。(实际上,它们显示为两个不同的程序,而不仅仅是同一个程序的两个实例 - 图标是独立的,而不是组合在一起的。)
这绝对不是最佳选择。我曾希望创建一个可以锁定到启动器区域的启动器,然后当程序运行时,同一个图标将成为活动 Matlab 实例的图标。
如何为 Matlab 创建一个按预期运行的启动器?
更新:我显然对自己的症状有点不清楚,我会尝试澄清一下。我还尝试了一些答案中的建议,并进一步调查了发生了什么。我当前的设置(带有 和 的启动器文件Terminal=true
)Exec=matlab -desktop -nosplash &
呈现以下行为:
- 我按下笔记本电脑上的 Windows 键打开 Dash,然后搜索“matlab”。它找到了名为“MATLAB R2011a”的启动器。我点击它。
- 终端窗口打开,使用我在启动器文件中引用的图标。MATLAB 的启动画面也几乎立即打开,使用相同的图标(因此与启动器中的终端窗口分组)。
- 启动画面消失,启动器中的一个图标也消失。MATLAB 桌面环境打开,使用不同版本的图标它显示在终端窗口图标旁边(不与其分组)。
我可以将终端窗口的图标锁定到启动器并通过单击它成功启动 MATLAB,但用一个图标启动程序,再用另一个图标切换到它,感觉不太理想。我还尝试了以下方法:
Exec
启动器命令中没有 & 符号&
,但这并没有什么区别。matlab -nosplash
从终端手动执行仍会显示启动画面。(那么 nosplash 选项到底起什么作用呢?)
答案1
加勒特的答案几乎对我有用,但我必须使用
StartupWMClass=sun-awt-X11-XFramePeer
当启动画面可见时,这仍然会给出一个额外的启动器图标(因为启动画面的 WM_CLASS 只是“MATLAB”),但随后窗口会在启动器下正确分组。
Matlab 的新实例(由终端、Synapse 或另一个 tty 启动export DISPLAY=:0
)也被分组到这个启动器下,并且启动器的退出选项将杀死所有实例。
我通过使用找到了这个 WM_CLASS 值
$ xprop WM_CLASS
然后单击 Matlab 窗口,这是我从超级用户。
为了防止出现临时的额外启动器图标,您还可以在图标-nosplash
后添加标志-desktop
。
所以,我的~/.local/share/applications/MATLAB.desktop
样子是这样的:
[Desktop Entry]
Version=1.0
Type=Application
Icon=matlab
Name=Matlab
Comment=Start MATLAB - The Language of Technical Computing
Exec=matlab -desktop -nosplash
Terminal=false
Categories=Development;
StartupNotify=true
StartupWMClass=sun-awt-X11-XFramePeer
X-Ayatana-Desktop-Shortcuts=New_Window;
Name[en_US]=MATLAB
[New_Window Shortcut Group]
Name=start a new MATLAB instance
Exec=matlab -desktop
这是在 Ubuntu 12.10 上,使用 Matlab R2012b
答案2
这很奇怪。matlab -desktop
真的应该能解决问题。
方法 1:查看启动器出了什么问题
我的 Unity 侧边栏中有一个可用的 MATLAB 图标。我可以单击它,它会保持正确的图标并且不会打开终端。据我所知,它与您的代码几乎相同,但是:
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/usr/local/MATLAB/R2011b/bin/matlab -desktop
Name=MATLAB
Icon=/home/tomas/icons/Matlab_Logo.png
上述代码位于 matlab.desktop 中,它位于 中/usr/share/applications/
。我发现唯一可能存在的区别是 (i)Exec
路径,但如果您在安装 MATLAB 时安装了符号链接,那么您的路径应该可以正常工作,并且 (ii) 我正在运行 MATLAB R2011b。
像您一样,我正在运行 Ubuntu 12.04。
如果我遗漏了什么,您可以尝试使用我的代码来启动 MATLAB,谁知道呢,它可能会起作用。
方法 2:使用终端的肮脏解决方法
您提到matlab -desktop
在终端中输入有效(即添加Terminal=true
)。但是,这会给您两个屏幕,它们都分组在 MATLAB 下。
您可以尝试通过更改调用过程的方式来解决这个问题。这里的关键是 &&
符号。它的作用是执行前面的代码,而不是等待它完成。理想情况下,它会启动终端,让终端启动 MATLAB 并立即关闭终端,让 MATLAB 继续运行。如果您从终端启动 matlab 并在行后加上 & 符号,会发生什么情况,或者:
matlab -desktop &
如果可行,您可以尝试(i)使用Terminal=true
上述代码制作启动器或(ii)制作引用 bash 脚本的启动器,然后调用上述代码。
对于您来说,方法 1 没有帮助。如果方法 2 也不起作用,那么最好尝试一下,看看您能用 ampersand、终端和 bash 脚本做什么,不能做什么。我几乎没有好主意,但到时候可能有人比我聪明,可以帮到您。
答案3
我从软件中心安装了一个 Matlab 配置文件/脚本。它在仪表盘中列出了 Matlab 启动器,并且完美适用于 Ubuntu 12.04 中的 Matlab2011a。但它无法从启动器运行。我的意思是,如果你在启动器上锁定它并尝试从那里启动它,那么它将无法工作,至少对我来说无法工作。所以我必须从仪表盘启动它。
要安装它,请转到Ubuntu 软件中心,搜索矩阵,它应该是列表中的第一个(图标是 Matlab 徽标)。只需安装它,它会处理剩下的事情。
答案4
我可能有点晚了,但我已经设法通过在“主菜单”应用程序中添加一个条目来做到这一点。我将其列为“应用程序”,然后提供 MATLAB 目录中可执行文件的完整路径作为命令。
我还必须添加标志“-desktop”(不带引号)。此外,我还必须使用“-glnx86”标志,因为我在 64 位系统上使用学生版,但这也运行良好。
然后我设法从中获取了一个图标网站。
然后可以将其放在应用程序菜单中并拖入启动器。唯一有点奇怪的是,当我单击它时,启动器中会出现另一个 MATLAB 图标,而不是直接使用已经存在的图标。如果有人能找到解决这个问题的方法,那就太好了……但我可以忍受它。